Aqui está mais uma etapa do programa para leitura de termopar. A leitura do canal do lm35 é perfeita, mas o canal do termopar não lê o termopar, acredito que é algo relacionado a fonte simétrica do amplificador, pois simulei com 2 lm35, um em cada canal, e a leitura é perfeita. Alguém sabe como resolver?
j7rka1.PNG
cpp code
#include "C:\Users\Particular\Documents\PROGRAMAS CCS\PIC E TERMOPAR TIPO J\PIC E TERMOPAR J.h"
int16 lm35,termopar,contador;
#use fast_io(b)
#use fast_io(c)
#byte portb=0x06
#byte portc=0x07
// .GFEDCBA
int unidade,dezena,centena, m[10]={ 0b01000000,//número 0
0b01111001,//número 1
0b00100100,//número 2
0b00110000,//número 3
0b00011001,//número 4
0b00010010,//número 5
0b00000010,//número 6
0b01111000,//número 7
0b00000000,//número 8
0b00010000};//número 9
float p,t;
void main()
{
setup_adc_ports(AN0_AN1_AN3);
setup_adc(ADC_CLOCK_INTERNAL);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_tris_c(0b00000000);//define I/O PORTC
set_tris_b(0b00011111);//define I/O PORTB
portb=0x00;
portc=0x00;
while(1)
{
set_adc_channel(0);//seta canal analógico 0
delay_us(40);//aguada 40uS para estabilizar
lm35=read_adc();//lê temperatura ambiente através do lm35
p=(0.00487*lm35);//multiplica valor lido pela resolução mínima
p=(p*100);//converte para graus Celsius
set_adc_channel(1);//seleciona canal analógico 1
delay_us(40);//aguada 40uS para estabilizar
termopar=read_adc();//lê termopar j
t=(0.00487*termopar);//multiplica valor lido pela resolução mínima
t=(t*200);//converte para graus Celsius
contador=(t+p); //soma termopar+lm35 e truca para inteiros
unidade=0;
dezena=0;
centena=0;
//a=resolução
//x=valor lido no A/D
//b=valor a ser somado
// ou subtraido para corrigir desvio
if(contador>0 && contador<28)// 1 primera reta, temperatura=ax+b
{
contador=++contador; //soma um a contador
}
if(contador>47 && contador<65)//64-48=16;2 reta
{
contador=--contador;//subtrai um de contador
}
if(contador>64 && contador<79)//78-65=13; 3 reta
{
contador=(contador-2);//subtrai 2 de contador
}
if(contador>78 && contador<92)//91-79=12; 4 reta
{
contador=(contador-3);//subtrai 3 de contador
}
if(contador>91 && contador<104)//103-92=11; 5 reta
{
contador=(contador-4);//subtrai 4 de contador
}
if(contador>103 && contador<115)//114-104=10; 6 reta
{
contador=(contador-5);
}
if(contador>114 && contador<125)//124-115=9; 7 reta
{
contador=(contador-6);
}
if(contador>124 && contador<135)//134-125=9; 8 reta
{
contador=(contador-7);
};
if(contador>135 && contador <145)//144-136=8; 9 reta
{
contador=(contador-8);
}
if(contador>144 && contador<155)//10 reta
{
contador=(contador-9);
}
if(contador>154 && contador<165)//11 reta
{
contador=(contador-10);
}
if(contador>164 && contador<174)// 12 reta
{
contador=(contador-11);
}
if(contador>173 && contador<184)// 13 reta
{
contador=(contador-12);
}
if(contador>183 && contador<192)// 14 reta
{
contador=(contador-13);
}
if(contador>191 && contador<202)// 15 reta
{
contador=(contador-14);
}
if(contador>201 && contador<211)// 16 reta
{
contador=(contador-15);
}
if(contador>210 && contador<220)//17 reta
{
contador=(contador-16);
}
if(contador>219 && contador<229)// 18 reta
{
contador=(contador-17);
}
if(contador>228 && contador<238)// 19 reta
{
contador=(contador-18);
}
if(contador>237 && contador<247)// 20 reta
{
contador=(contador-19);
}
if(contador>246 && contador<256)// 21 reta
{
contador=(contador-20);
}
if(contador>255 && contador<265)// 22 reta
{
contador=(contador-21);
}
if(contador>264 && contador<274)// 23 reta
{
contador=(contador-22);
}
if(contador>273 && contador<284)//24 reta
{
contador=(contador-23);
}
if(contador>283 && contador<293)//25 reta
{
contador=(contador-24);
}
if(contador>292 && contador<302)//26 reta
{
contador=(contador-25);
}
if(contador>301 && contador<312)//27 reta
{
contador=(contador-26);
}
if(contador>311 && contador<321)//28 reta
{
contador=(contador-27);
}
if(contador>320 && contador<331)//29 reta
{
contador=(contador-28);
}
if(contador>330 && contador<340)//30 reta
{
contador=(contador-29);
}
if(contador>339 && contador<350)//31 reta
{
contador=(contador-30);
}
if(contador>349 && contador<360)//32 reta
{
contador=(contador-31);
}
if(contador>359 && contador<369)//33 reta
{
contador=(contador-32);
}
if(contador>368 && contador<379)//34 reta
{
contador=(contador-33);
}
if(contador>378 && contador<389)// 35 reta
{
contador=(contador-34);
}
if(contador>388 && contador<399)// 36 reta
{
contador=(contador-35);
}
if(contador>398 && contador<408)//37 reta
{
contador=(contador-36);
}
if(contador>407 && contador<418)//38 reta
{
contador=(contador-37);
}
if(contador>417 && contador<428)//39 reta
{
contador=(contador-38);
}
if(contador>427 && contador<437)// 40 reta
{
contador=(contador-39);
}
if(contador>436 && contador<447)//41 reta
{
contador=(contador-40);
}
if(contador>446 && contador<456)//42 reta
{
contador=(contador-41);
}
if(contador>455 && contador<465)//43 reta
{
contador=(contador-42);
}
if(contador>464 && contador<474)//44 reta
{
contador=(contador-43);
}
if(contador>473 && contador<483)// 45 reta
{
contador=(contador-44);
}
if(contador>482 && contador<492)//46 reta
{
contador=(contador-45);
}
if(contador>491 && contador<500)//47 reta
{
contador=(contador-46);
}
if(contador>499 && contador<508)//48 reta
{
contador=(contador-47);
}
while(contador>=100)//conta quantas centenas tem a variável contador
{
contador=(contador-100);
++centena;
}
while(contador>=10)//conta quantas dezenas tem a variável contador
{
contador=(contador-10);
++dezena;
}
while(contador>=1)//conta quantas unidades tem a variável contador
{
contador=(contador-1);
++unidade;
}
portc=m[centena];
output_low(pin_b5);//liga display das centenas
delay_ms(500);
output_high(pin_b5);
delay_ms(500);
portc=m[dezena];
output_low(pin_b6);//liga display das dezenas
delay_ms(500);
output_high(pin_b6);
delay_ms(500);
portc=m[unidade];
output_low(pin_b7);//liga display das unidades
delay_ms(500);
output_high(pin_b7);
delay_ms(500);
}
}
Você não está autorizado a ver ou baixar esse anexo.