Olá pessoal, sou um novo membro aqui do fórum. Meu conhecimento em C é moderado e tenho desenvolvido um projeto complexo de automatização de fornos para uma carvoaria. Vamos ao assunto: Preciso desenvolver um programa em linguagem C (tenho usado o MikroC e o CCS, mas tenho preferência pelo primeiro) para montar o projeto de comandos pra um PIC, que já foi definido: PIC 12F675. Este pic é suficiente pro que estou precisando: ler uma entrada analógica que varia entre 0V e 5V, já linearizada e, em seguida, de acordo com o valor lido de tensão na porta analógica (AN0, no caso em que tentei), ativar uma saída digital (5V). Quero ativar a saída se por acaso o valor de tensão lido for um valor próximo de 3,6V e 3,9V (o que no caso do circuito que já montei significa 360ºC 390ºC). Como já comprei quase tudo, prefiro que o programa siga estas orientações. Abaixo segue um programa que fiz no MikroC e que tentei simular com o Proteus7- ISIS, mas parece que o programa não funcionou como deveria, por favor dêem dicas de otimização, apontem erros, quaisquer que forem ou até mesmo postem um programa alternativo que use o pic 12f675: O datasheet desse pic segue abaixo também: http://search.microchip.com/searchapp/sear...ge=10&id=24 Programa: //Controle de temperatura para forno com PIC 12F675 // Autor: Diego Marques #define temp_set_hi 390 // Definição da temperatura de acionamento da ventoinha em graus Celsius #define temp_set_lo 360 // Definição da temperatura de desligamento da ventoinha em graus Celsius #define vent gpio.f1 //Definição da porta que acionará a venoinha (porta 1) float temp_read(void) //Função que lê o sinal do conersor A/D { float temp; temp = Adc_Read(0); //Atribui à variavel temp o valor do A/D da porta 0 temp = temp*0.4884; //Conversão do valor para graus Celsius // fundo de escala = 500 graus Celsius (1023 = 500 graus) => resolução de 0,5 grau return temp; } void main(void) { float temp = 1000; //Inicialização arbitrária da variável ADCON0 = 0b00000001; //Configuração do registrador do A/D (vide pag. 43 do datasheet) TRISIO = 0b10000000; //Configuração do registrador das portas (vide pag. 20 do datasheet) GPIO = 0; //Inicia com as portas de saída em 0 while(1) //Loop infinito { if(temp >= temp_set_hi) { vent = 1; //Ativa um relê } if(temp <= temp_set_lo) { vent = 0; //Desativa um relê } temp = temp_read(); //Atualização da temperatura } }