Recentemente a Texas Instruments me forneceu duas amostras de seu novo sensor de umidade/temperatura HDC1080 com interface I²C. Há muito tempo queria montar um relógio preciso que medisse estas grandezas assim como não perdesse a hora quando falta energia elétrica.
Este sensor usa um encapsulamento com terminais muito pequenos, assim montei uma placa adaptadora.
Sensor HDC1080 montado por baixo da placa, com a abertura expondo a parte sensora no centro do furo. |
A medição do tempo é feita pelo DS3231, um RTC de alta precisão com o cristal de quartzo incorporado no encapsulamento, com compensação de temperatura e com interface I²C. Este RTC vem num SOIC de 16 pinos dos quais somente metade é usada. Fiz um adaptador DIP para ele.
Para controlar tudo, usei um PIC16F1503, que só consegui com encapsulamento SOIC, também tendo que fazer um adaptador DIP.
Para controlar tudo, usei um PIC16F1503, que só consegui com encapsulamento SOIC, também tendo que fazer um adaptador DIP.
Placa do relógio, com o PIC16F1503 e o DS3231 com seus horrendos adaptadores DIP. Há também a bateria de lítio pendurada. |
Vista de baixo. |
O display usado é um Winstar WO1602, de 16x2 caracteres também com interface I²C (comprado na TATO Equipamentos Eletrônicos). Este tem um backlight simples de LED e usa o controlador Sitronix ST7032. Para operar em 3,3V, este display usa um charge pump composto de dois capacitores, assim montei uma pequena placa com os mesmos mais o IC TC54 para fazer o RESET e adaptar os pequenos pinos de interface. Preferi usar um display LCD em vez do OLED porque este tem uma vida útil muito maior, pois o OLED perde o brilho com o tempo.
Pinagem do display Winstar WO1602. |
Esquema para ligar em 3V ou 5V. |
Display Winstar WO1602 com a placa adaptadora e os fios para ligar o backlight. Esta placa tem os mesmo 4 pinos do display OLED para ser intercambiável. |
Vista de baixo. Note os terminais do display que tem metade do espaçamento dos furos da placa. |
Vista de frente. |
Relógio em operação mostrando a data completa, temperatura e umidade relativa. |
Para comunicar com o display, uso duas rotinas:
Rotina de envio de comando:
Envia I²C START bit
Envia ST7032_I2C_ADDRESS=0x7C + bit de escrita pela enterface I²C=0
Envia seleção de dado/comando 0x00 (Co, RS, 0, 0, 0, 0, 0, 0)
RS=0, COMMAND
Co=0, (continuation bit)
Envia I²C STOP bit
Rotina de envio de dado:
Envia I²C START bit
Envia ST7032_I2C_ADDRESS=0x7C + bit de escrita pela enterface I²C=0
Envia seleção de dado/comando 0x40 (Co, RS, 0, 0, 0, 0, 0, 0)
RS=1, DATA
Co=0, (continuation bit)
Envia I²C STOP bit
Para iniciar o display, envio os seguintes comandos através das rotinas mostradas acima:
RESET, feito por hardware pelo IC TC54;
FUNCTION SET=0x38 (0, 0, 1, DL, N, DH, 0, IS)
DL 1=8bit, 0=4bit
N 1=2lines, 0=1line
DH 1=double (N must be 0), 0=normal
IS 1=extended inst., 0=normal inst.
ENTRY MODE SET=0x06 (0, 0, 0, 0, 0, 1, I/D, S)
I/D 1=cursor/blink moves to right & ddram address is incremented, 0=cursor/blink moves to left & ddram address is decremented
S 1=shift of entire display, 0=no shift
S/C 1=screen controlled by R/L, 0=cursor controlled by R/L
R/L 1=right, 0=left
FUNCTION SET=0x39 (0, 0, 1, DL, N, DH, 0, IS)
DL 1=8bit, 0=4bit
N 1=2lines, 0=1line
DH 1=double (N must be 0), 0=normal
IS 1=extended inst., 0=normal inst.
INTERNAL OSC FREQUENCY=0x14 (0, 0, 0, 1, BS, F2, F1, F0)
BS 1=1/4bias, 0=1/5bias
F2 F1 F0 3V FREQ. 5V FREQ. (2 LINE MODE)
0 0 0 122Hz 120Hz
0 0 1 131Hz 133Hz
0 1 0 144Hz 149Hz
0 1 1 161Hz 167Hz
1 0 0 183Hz 192Hz
1 0 1 221Hz 227Hz
1 1 0 274Hz 277Hz
1 1 1 347Hz 347Hz
CONTRAST SET=0x71 (0, 1, 1, 1, C3, C2, C1, C0)
C3~C0 contrast low nibble
POWER/ICON CONTROL/CONTRAST SET=0x54 (0, 1, 0, 1, ION, BON, C5, C4)
ION 1=display ON, 0=display OFF
BON 1=booster ON (OPF1=0, OPF2=0), 0=booster OFF
C5~C4 contrast high nibble
FOLLOWER CONTROL=0x6F (0, 1, 1, 0, FON, RAB2, RAB1, RAB0)
FON 1=internal follower ON (OPF1=0, OPF2=0), 0=internal follower OFF
RAB2~RAB0 V0 generator amplified ratio
DISPLAY ON/OFF=0x0C (0, 0, 0, 0, 1, D, C, B)
D 1=entire dsiplay ON
C 0=cursor OFF
B 0=cursor position OFF
CLEAR DISPLAY=0x01
Para enviar os caracteres:
Envia o comando SET DDRAM ADDRESS=0x80 + DDRAM ADDRESS
Envia dado com o caractere ASCII
Nenhum comentário:
Postar um comentário