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