Termômetro Digital via I2C
Este outro projeto é um termômetro digital utilizando o PIC16F877A. A temperatura é medida pelo componente TC74-A5 que envia ao microcontrolador a informação via comunicação I2C. O MCU recebe a informação e mostra-o no display de 7 segmentos anodo comum.
O clock utilizado é de 8MHz.
DOWNLOAD:
Firmware: Termometro-digital-i2c.hex
Arquivo de Simulação: Termometro-digital-i2c.DSN
CÓDIGO-FONTE:
int temp;
//Numero de 0 a 9, +, -
char number[12]={ 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92,
0x82, 0xF8, 0x80, 0x90, 0xFF, 0xBF};
char res1, res2, res3, sinal;
void programa_i2c()
{
i2c1_Init(100000); //Inicializa o modulo
i2c1_start();
i2c1_Wr(0b10011010);
i2c1_Wr(0);
i2c1_wr(0x00);
i2c1_Stop();
}
void leitura_i2c()
{
i2c1_start(); //envia sinal de Start no barramento
i2c1_wr(0b10011010); //Seleciona o dispositivo + escrita
i2c1_wr(0x00); //Selecione o endereço do registro pra leitura
i2c1_Repeated_start(); //envia sinal de start no barramento
i2c1_wr(0b10011011); //Seleciona o dispositivo + leitura
temp = i2c1_rd(0); //leitura
i2c1_stop(); //Envia o sinal de stop no barramento
}
void main()
{
TRISB=0;
PORTB=0;
TRISD=0;
PORTD=0;
programa_i2c();
while(1)
{
leitura_i2c();
//temperatura positiva
if( temp < 131 && temp >= 0 )
{
res1 = temp / 100;
res2 = (temp % 100) / 10;
res3 = (temp % 100) % 10;
sinal=10;
}
//temperatura negativa
else
{
temp = (~temp & 0xFF) + 1;
res1 = temp / 100;
res2 = (temp % 100) / 10;
res3 = (temp % 100) % 10;
sinal=11;
}
//escreve nos displays 7 segmentos
PORTD=0b00000001; //seleciona display 1
PORTB=number[signal];
Delay_ms(1);
PORTD=0b00000010;//seleciona display 2
PORTB=number[res1];
Delay_ms(1);
PORTD=0b00000100;//seleciona display 3
PORTB = number[res2];
Delay_ms(1);
PORTD=0b00001000;//seleciona display 4
PORTB=number[res3];
///
Delay_ms(30);
}
}


gostava de saber que compilador usou?
ResponderExcluirBlz! Para esse projeto, como todos os outros deste blog eu utilizei o compilador MikroC PRO PIC.
Excluirola, gostaria de saber qual a função do instrumento I2C debugger no circuito, pois eu observei q meu programa não simula se ele não estiver inserido.
ResponderExcluirobrigado.
Ola! o I2C Debugger monitora os dados no barramento, e é necessario coloca-lo pra poder fazer a comunicacao do MCU com algum periferico.
ExcluirObrigado pelo blog
ResponderExcluirEstou começando com PIC e esse blog foi realmente um achado. Gostaria de uma dica como faço para usar mais de um dispositivo no barramento i2c.
ResponderExcluirBaixei o código mas quando abri se trata de um relógio digital com display LCD e não termõmetro. Teria como corrigir. Obrigado
ResponderExcluirlink corrigido!!!
ExcluirObrigado Tiago. Tudo certo agora.
Excluirtem como adaptar pra mostrar num LCD ? qual a modificacao?
ResponderExcluir