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.
|
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
CURSOR/DISPLAY SHIFT=0x14 (0, 0, 0, 1, S/C, R/L, 0, 0)
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