Você está na página 1de 8

Prof.

Edvaldo de Oliveira Nazário

“Relógio Digital ”
“O relógio” é um relógio de parede bastante especial. Além de dar a hora
(como qualquer relógio que se preze), também nos mostra a temperatura
ambiente. Mas o que o diferencia da maioria dos relógios eletrônicos,
cujos diagramas você pode encontrar navegando na web, é a forma como
seu ponteiro de segundos específico é construído. De fato, em vez de
indicar a passagem dos segundos através de um par de displays de LED de
7 segmentos, como de costume, o faz através de 60 diodos de LED
dispostos em círculo ao longo da borda externa do circuito impresso que
abriga todos os componentes do relógio.

.Descrição do projeto
Além disso, fornecemos o relógio com 4
O relógio que vamos construir pode indicar a hora pequenos botões, que serão usados p ​ ara realizar as
e os minutos por meio de 4 displays de LED de 7 tarefas de acertar a hora, selecionar o modo de operação,
segmentos, no formato “HH:MM”, o ​ nde os “:” centrais são etc.
compostos por dois pequenos LEDs de 3 mm. Esses
Dividi esta montagem em duas partes,
displays também são usados p ​ ara exibir a temperatura,
Montageme programação. vou explicar em detalhes como
que é obtida usando um sensor de temperatura Dallas
funciona o hardware, e depois vamos ver passo a passo
DS1820. Para manter o relógio funcionando com precisão
como programá-lo.
razoável, foi usado um relógio de tempo real DS1307.
O ponteiro dos segundos, como dissemos, é .O circuito
uma circunferência formada por 60 LEDs de 5mm,
controlados apenas com dois pinos do PIC16F628A. Isso Embora o circuito Clockwork possa parecer
é possível graças ao uso de um registrador de intimidador devido ao seu tamanho (ele usa 18 circuitos
deslocamento construído com 8 circuitos integrados integrados e mais de 100 resistores), na verdade não é
74HC164N. Nesta mesma edição do uControl você tão complexo quanto parece.
encontrará uma explicação de seu funcionamento. O coração do esquema é um PIC16F628A,
responsável por realizar todas as tarefas necessárias.
Este microcontrolador usa um cristal de 4MHz
como oscilador para gerar pulsos de clock, com dois
capacitores de 22pF conectados aos pinos 15 e 16.
Os botões responsáveis ​por gerenciar a
configuração do horário e a seleção do modo de
operação são conectados aos pinos 10, 11, 12 e 13, que
correspondem aos bits 4, 5, 6 e 7 da PORTB. Cada um
desses pinos foi ajustado para GND por meio de um
resistor de 10K, ao pressionar um botão, o pino
correspondente é ajustado para +V.
A temperatura é lida a partir de um sensor Dallas
DS1820, conectado ao pino 4 do microcontrolador. Este
"O pequeno relógio", pronto para começar a trabalhar pino corresponderá ao bit 5 do PORTA.
Prof. Edvaldo de Oliveira Nazário

Este é o diagrama elétrico do nosso relógio

Para manter a precisão do relógio usamos um (PORTA bit 0) é responsável por fornecer os dados para o
pequeno circuito integrado, também de Dallas, que se registrador de deslocamento, enquanto o pino 18 (PORTA
encarrega de contar o tempo para nós. Este é o DS1307 de bit 1) fornece os pulsos de clock necessários.
8 pinos, que possui seu próprio cristal (32.768 KHz) e uma O mesmo truque do registrador de deslocamento
bateria CR-2032 de 3V para backup. Esta bateria fornece a foi usado para controlar os 60 LEDs que compõem o
energia necessária para que o DS1307 continue operando ponteiro dos segundos. Desta vez, foram necessários 8
em caso de falha de energia da fonte de alimentação CIs 74HC164N. Este registrador possui 64 saídas, das
principal. Isso evitará ter que redefinir o relógio toda vez que quais são utilizadas apenas as primeiras 60. Cada uma
for desconectado da rede elétrica. dessas saídas controla um dos LEDs através de um
Para mostrar tanto a informação correspondente às resistor que limita a corrente que passa por eles.
horas e minutos como os dados de temperatura, foram Dado que o consumo máximo possível deste
utilizados 4 displays LED de 7 segmentos com cerca de 3,5 projeto é bastante alto para o que estamos acostumados,
centímetros de altura. O modelo escolhido foi o C-1021H da dividimos a etapa de alimentação em três partes, cada
Para-light. É um display de cátodo comum, onde cada uma delas encarregada de fornecer energia a uma das
segmento é composto por dois LEDs vermelhos em série. seções do relógio.
Os “:” centrais são formados por dois LEDs de 3mm Desta forma, um dos estágios construídos em
conectados em série, da mesma cor dos displays, e são torno de um regulador de tensão LM7805 fornece a
gerenciados a partir do pino 7 do microcontrolador corrente necessária para o microcontrolador, o sensor de
(PORTB.1) temperatura e o relógio em tempo real. Outro dos estágios
Como a multiplexação dessas telas usando alimenta os displays e o registrador de deslocamento que
técnicas tradicionais exigiria um grande número de pinos o controla, e o terceiro faz o mesmo com os LEDs do
de E/S do microcontrolador PIC16F628A, foi usado um ponteiro dos segundos e seus circuitos integrados de
registrador de deslocamento construído a partir de quatro controle.
ICs 74HC164N em cascata. Cada uma das saídas Embora não mostrado no esquema elétrico,
desses chips controla um dos segmentos dos displays. colocamos capacitores cerâmicos de 0,1uF nos pinos de
pino 17 do microcontrolador alimentação de cada um dos 74HC164Ns. Você pode vê-los
nas fotos, eles são soldados diretamente nos trilhos do PCB.
Prof. Edvaldo de Oliveira Nazário

.Circuito impresso
Como esperado, para abrigar tudo isso, é
necessário um circuito impresso bastante grande. Como
nós da uControl tentamos manter as coisas simples, Projeto de PCB
geralmente não usamos CIs, componentes de montagem
em superfície ou PCBs de dupla face. Isso também ajudou
a tornar o PCB grande.

EO circuito impresso mede 18 centímetros de diâmetro.

Talvez a característica mais representativa desse Para construir o PCB, basta usar o design
circuito impresso seja sua forma, pois nos afastamos do que pode ser baixado em formato PDF da pagina
desenho clássico retangular ou quadrado e o desenhamos do Curso e imprimi-lo.
como uma circunferência, de modo que os LEDs do
ponteiro dos segundos adotam a mesma disposição das
marcações no mostrador de um relógio de agulha. .Componentes
O diâmetro da placa de circuito impresso é de 18
centímetros. Cortá-lo na forma de uma circunferência é A lista de componentes que vamos utilizar é
bastante trabalhoso, mas não impossível. De qualquer bastante extensa, mas felizmente são componentes de
forma, quem não se atreve a cortar o PCB dessa maneira baixo custo, portanto é um projeto ao alcance de todos os
pode simplesmente usar um PCB quadrado com um lado alunos.
de 18 centímetros com o desenho que propomos no
centro.

El PCB puede ser


construido utilizando
el método que expli-
camos aquí.
Estos son los componentes que utilizaremos.
Prof. Edvaldo de Oliveira Nazário

A lista de materiais necessários:


12 CIs 74HC164N
92 resistores de 220 ohm, 1/8 Watt.
7 resistores de 10K, 1/8 de Watt.
1 x DS1307 IC
1 x microcontrolador PIC16F628A
1 x sensor de temperatura DS1820
1 x cristal de 4 MHz
1 cristal 32.768KHz
14 capacitores cerâmicos de 100 nF
(0,1uF). 2 capacitores cerâmicos de 22pF.
1 capacitor eletrolítico 220uF/16V.
1 soquete para bateria CR-2032
4 visores de cátodo comum C-1021H Par-
alight.
2 LEDs vermelhos de 3 mm.
Na próximo resumo veremos como programar o microcontrolador.
60 LEDs vermelhos de 5 mm.
1 x 1N4001 Diodo
1 bloco de terminais para circuito
impresso com dois parafusos.
4 botões de 8mm para circuito impresso.
3 Reguladores de Tensão LM7805

Você também precisará de um pedaço de


PCB virgem de um lado, de 18 x 18
centímetros de tamanho, e soquetes para
os CIs.

.Montagem
Não há grandes complexidades associadas à
montagem dos componentes deste projeto. Uma boa ideia
é começar o trabalho de solda com as pontes e soquetes,
e depois continuar com os resistores e capacitores. Os
displays, reguladores de tensão e LEDs devem ser
montados por último, cuidando para que estejam na
posição correta. Será um trabalho que levará pelo menos
uma ou duas horas, então você terá que enfrentá-lo com
paciência.
Uma vez que tudo está no lugar, e antes de
colocarmos os CIs em seus soquetes, podemos alimentar
o pequeno relógio e verificar se na saída de cada
regulador de tensão temos 5V. Também podemos medir a
tensão nos pinos dos soquetes responsáveis p​ or alimentar
cada chip, para não ter surpresas desagradáveis. Entre os
pinos 7 e 14 de cada 74HC164N deve haver 5V, o mesmo
que entre os pinos 5 e 14 do soquete correspondente ao
microcontrolador. Se tudo estiver bem, podemos colocar
cada um integrado em seu lugar, tomando o cuidado de
colocá-los na direção correta.
Prof. Edvaldo de Oliveira Nazário
Prof. Edvaldo de Oliveira Nazário

Na edição anterior do uControl vimos como Configuração do pino .I/O


desenvolver o hardware necessário para construir um
O primeiro passo antes de começar a usar os
relógio digital completo, que além da hora, era capaz de
pinos de entrada ou saída é configurar corretamente sua
exibir a temperatura ambiente graças à inclusão de um
função. Este é um passo muito simples e não requer
sensor de temperatura Dallas DS1820. Também foi
muita explicação. Os comentários incluídos no código-
incluído um RTC (“Real Time Clock”) DS1307,
fonte serão suficientes para entender o que cada linha do
encarregado de fornecer ao PIC16F628A a referência de
programa faz.Vamos primeiro ver como fazer isso em
tempo necessária e precisa. Um conjunto de 60 diodos
PIC BASIC
LED, indicando cada um dos segundos, deu um apelo
especial ao projeto.
A partir desta edição, começaremos a ver como PIC SIMULATOR IDE):
tirar proveito desse design, explicando cada uma das
‘-----CONFIGURAMOS PORTAS----------
rotinas necessárias para transformar essa pilha de
AllDigital ‘Todos os pinos da PORTA como E/S
hardware em algo útil. Vamos escrever o software do
zero, explicando cada um dos passos a seguir, para que ‘Configuro el PORTA:
todos possam entender completamente cada uma das TRISA.0 = 0 ‘DATA Segundero
TRISA.1 = 0 ‘CLOCK Segundero
rotinas e, assim, poder modificá-las como quiserem. TRISA.2 = 0 ‘DATA HH:MM
Decidimos apresentar as versões PIC BASIC e CCS de TRISA.3 = 0 ‘CLOCK HH:MM
cada trecho de código, como forma de atingir um maior TRISA.4 = 0 ‘Salida
TRISA.5 = 0 ‘DS1820
número de leitores.
Prof. Edvaldo de Oliveira Nazário

‘Configuro el PORTB:
.Escrevendo os segundos.
TRISB.0 = 1 ‘Entrada pulsos do DS1307 A característica mais marcante deste relógio é o seu
TRISB.1 = 0 ‘Saida, LEDs “:” display ponteiro de segundos. Compostos por 60 LEDs localizados na
“HH:MM” circunferência do relógio, são controlados por apenas dois
TRISB.2 = 0 ‘pin SCA do DS1307
pinos do microcontrolador. Isso é possível pelo uso de um
TRISB.3 = 0 ‘pin SCL do DS1307
registrador de deslocamento.
TRISB.4 = 1 ‘Entrada de botão 1
TRISB.5 = 1 ‘Entrada de botão2 Como já vimos, esse tipo de registrador incorpora os
TRISB.6 = 1 ‘Entrada de botão3 dados presentes em sua entrada a cada pulso de clock que é
TRISB.7 = 1 ‘Entrada de botão 4 aplicado ao seu terminal CLOCK.
Devemos respeitar os tempos de resposta dos circuitos
Inicialização de portas em PIC BASIC. integrados que compõem os registradores de deslocamento.
Agora, vemos como fazer a mesma tarefa no CCS: Neste caso, o 74HC164N que usamos pode trabalhar em uma
freqüência maior que os 4 MHz (ou o MIP) em que o 16F628A
trabalha, então não será necessário esperar tempos entre o
//Device/Fuses/Etc.---------------------------
#INCLUDE <16F628A.H> //Usamos um 16F628A envio de um dado e seu envio.
#FUSES NOWDT //No Watch Dog Os pinos envolvidos no controle dos LEDs dos
#FUSES XT Timer //Com oscilador segundos são os correspondentes a PORTA.0 (ou RA0, pino
a cristal...
17) e PORTA.1 (ou RA1, pino 18), para as funções DATA e
#use delay(clock=4000000) //..de 4MHz.
#FUSES NOPUT //No Power Up Timer CLOCK, respectivamente. Como este não é o único registrador
#FUSES NOPROTECT //No protegemos o código. de deslocamento presente no projeto, vamos nos referir a
#FUSES NOBROWNOUT //No Brownout Reset esses sinais como DATA2 e CLOCK2.
#FUSES NOLVP //No low voltage prgming
Especificamente, os dados presentes na entrada do
#FUSES NOCPD //No EE protection
registrador de deslocamento são apresentados na primeira de
//Declaramos a posição dos portos------- suas saídas (“empurrando” as outras uma posição para frente)
#BYTE PORTA = 0x05 quando o pino CLOCK vai de baixo para alto. Isso significa que
#BYTE PORTB = 0x06 devemos seguir a seguinte ordem para cada bit que queremos
#BYTE PORTA_TRIS = 0x85 enviar para o registrador:
#BYTE PORTB_TRIS = 0x86

//E atribuimos cada pin como E/S según


corresponda: PORTA_TRIS =
0b00000000; //1=ENTRADA, 0=SALIDA PORTB_TRIS =
0b11110001; //1=ENTRADA, 0=SALIDA
Inicialização de porta no CCS
Prof. Edvaldo de Oliveira Nazário

1) Coloque os dados para enviar nopin DATA2 (PORTA.0) pal, de la siguiente manera:
2) Colocar CLOCK2 (PORTA.1) em estado baixo. write_second (valor);
3) Colocar CLOCK2 (PORTA.1) em estado Alto
Como você pode ver, é muito simples de implementar. Onde "valor" será "0" ou "1" dependendo se
Vamos ver como fazer isso no PIC BASIC: queremos ligar ou desligar o LED correspondente à
primeira posição do registrador de deslocamento.
escrever_segundo:
data1 = bit_aux ‘Eu coloco o valor en DATA .Fazendo limpeza
clock1 = 0 ‘Eu coloco o CLOCK em baixo..
clock1 = 1 ‘... e de novo. Inteligente!
Return Antes de começar a enviar dados úteis para o
registrador de deslocamento, é conveniente “limpar” o
Esta rotina envia o valor da variável "bit_aux" para o registrador de conteúdo de seus 60 bits, pois ao alimentar El Relojito
deslocamento. eles podem conter informações aleatórias, que na prática
A sub-rotina assume que antes de chamá-la seriam vistas como uma série de LEDs acesos . Se não
declaramos as variáveis ​necessárias (usando DIM) e o fizéssemos, cada pedaço de dados que enviamos para
“macros” (usando SYMBOL): o registrador "empurra" os bits inúteis para uma posição,
o que não parece muito bom.
‘------DECLARO VARIABLES y MACROS-------------- A maneira de evitar isso é muito simples: assim
Dim bit_aux As Bit ‘Eu declaro a variável auxiliar
Symbol data1 = PORTA.0 ‘Nos referimos a que nosso programa for iniciado, devemos escrever 60
PORTA.0 como “data1” zeros no registrador de deslocamento, certificando-nos
Symbol clock1 = PORTA.1 ‘Nos referimos a de que todos os LEDs estejam apagados.
PORTA.1 como “clock1”
Como pode ser uma ação que pode ser
Declaração de variáveis e macros exigidas antes necessária mais de uma vez em nosso programa,
chame a sub-rotina “write_second”. também a implementaremos como uma sub-rotina (no
Vamos ver como fazer isso no CCS. PIC BA-SIC) ou como uma função (no CCS). Como já
temos o código necessário para escrever um valor no
//Declaramos a Variavel: registrador de deslocamento, a nova rotina/função terá
int1 bit_aux; //Declaro a variavel
auxiliar apenas que se encarregar de "chamar" aquela que vimos
antes 60 vezes seguidas, com o valor "0".
//-------------------------------------------- Vamos ver como fazer isso no PIC BASIC:
//---Envia un DADO para registro de
deslocamento: //-------------------------------- erase_seconds:
------------void write_second(int1){ bit_aux = 0 ‘Eu atribuo o valor para
if (bit_aux) {output_high(DATA2);} //Si enviar para a variável auxiliar...
es “1”, eu escrevo isso em DATA2. For i = 0 To 59 ‘”i” irá de 0 a 59, de 1 en 1.
if (!bit_aux) {output_low(DATA2);} //Si Gosub escrevo_segundo ‘envío bit_aux
es “0”, eu escrevo isso em DATA2. para registro
output_low(CLOCK2); //eu ponho o CLOCK Next i
em baixo... Return
output_high(CLOCK2); //...e novamente O código BASIC fornece a sub-rotina “borro_secondero”.
alto. Inteligente!
} E agora, o mesmo, mas em CCS:

void apaga_usado(void){
main(){
int i;
//Nós atribuímos cada pin como E/S
for (i=0;i<60;i++) { // “i” irá de 0 a 60,
conforme corresponda:
de 1 en 1.
PORTA_TRIS = 0b00000000; //1=ENTRADA,
escrevo_segundo(0); //Envio un “0”
0=SAIDA
para registro de deslocamento
PORTB_TRIS = 0b11110001; //1=ENTRADA,
}
0=SAIDA
} Código CCS para a função “borro_secondero”.

No CCS, para fazer uso da função “write_second”, basta Isso é tudo o que precisamos saber para
chamá-la a partir do programa principal. Conecte corretamente os 60 LEDs do relógio.

Você também pode gostar