Nesse circuito estou utilizando o PIC 18F258 e um cristal de 8 MHz, Este circuito apenas para fins didticos, pode ser feitas alteraes e utilizar outro Pic assim como outro cristal.
Esse projeto tem a funo de monitorar a temperatura de algum equipamento e acionar uma
sada do pic para indicar que a temperatura do mesmo ultrapassou a temperatura que foi
configurada como referncia. Podemos usar essa sada para ligar um ventilador e resfriar o
equipamento, controlando assim a temperatura mxima de trabalho.
Cdigo no MIKROC PRO FOR PIC
#define led portb.f1 #define botao portb.f0
// inicializando LCD, configurao dos pinos para 4 vias (fora EN, RS ).( RW fica 0v).
sbit LCD_RS at LATB2_bit; // for writing to output pin always use latch (PIC18 family) sbit LCD_EN at LATB3_bit; // for writing to output pin always use latch (PIC18 family) sbit LCD_D4 at LATB4_bit; // for writing to output pin always use latch (PIC18 family) sbit LCD_D5 at LATB5_bit; // for writing to output pin always use latch (PIC18 family) sbit LCD_D6 at LATB6_bit; // for writing to output pin always use latch (PIC18 family) sbit LCD_D7 at LATB7_bit; // for writing to output pin always use latch (PIC18 family)
sbit LCD_RS_Direction at TRISB2_bit; sbit LCD_EN_Direction at TRISB3_bit; sbit LCD_D4_Direction at TRISB4_bit; sbit LCD_D5_Direction at TRISB5_bit; sbit LCD_D6_Direction at TRISB6_bit; sbit LCD_D7_Direction at TRISB7_bit; // fim da inicializao do modo display 4-vias. OBS.: para famlia pic 18fxxx
// Inicio das configuraes das variaveis. int temp=0, x, variavel, t_alarme=100; // declarao de variaveis char txt[7], txtx[7]; // variavel texto.
//INICIO DA ROTINA CONFIGURAO void configuracao(){ lcd_cmd(_lcd_clear); t_alarme =0;
do{ lcd_out(1,1,"VALOR DE ALARME"); // imprime na primeira linha lcd_out(2,1,"TEMP.:"); delay_ms(100); // delay de 100 ms wordtostr(t_alarme,txtx); // converte a variavel t_alarme para char lcd_out(2,9,txtx); // imprime na segunda linha o valor do char
if (!botao){ while(!botao){ lcd_out(1,1,"VALOR DE ALARME"); lcd_out(2,1,"TEMP.:"); delay_ms(100); wordtostr(t_alarme,txtx); lcd_out(2,9,txtx); t_alarme++; delay_ms(10); } }
variavel++; delay_ms(100); }
while(variavel < 50); x = 100; } //FIM
void main() { //ROTINA PRINCIPAL adcon1 = 0b1110; // configura o pino a0 como analgica. trisb = 0b00000001; // Configura o portb, entradas e sadas. portb = 0; // Inicializa os pinos do portb.
lcd_init(); //Inicializa o lcd lcd_cmd(_lcd_cursor_off); //Desliga o cursor da tela do display.
lcd_out(1,1,"CONFIGURAR"); lcd_out(2,1,"VALOR DE ALARME?");
lcd_cmd(_lcd_clear); while(1){ // lao infinito temp = adc_read(0); // ler a variavel analgica. temp = (temp/2)-2; // operao matemtica para a temperatura.
if (temp<=0) temp=0;
wordtostr(temp,txt); // converte temp para texto.
lcd_out(1,9,txt); lcd_out(1,16,"C"); lcd_out(1,1,"AMBIENTE:"); //escreve texto na linha e coluna descrita. lcd_out(2,1,"ALARME:"); lcd_out(2,9,txtx);