Liviu M Postat Noiembrie 23, 2012 Partajează Postat Noiembrie 23, 2012 am văzut pe google că se inseria si un rezistor de 2k2 cu borna 5v la senzorSa intelegem de aici ca ai alimentat senzorul si direct la +5 volti? Daca da, sunt toate sansele ca acum sa fie putin defect. Deci?Deci ce? Link spre comentariu
Vlad Mihai Postat Noiembrie 23, 2012 Autor Partajează Postat Noiembrie 23, 2012 mda, dar vazusem ca lm35 se alimenteaza la 5v, si am presupus ca si asta se comporta la fel.... aia e. Link spre comentariu
Vlad Mihai Postat Noiembrie 28, 2012 Autor Partajează Postat Noiembrie 28, 2012 revin cu o problema pe care nu reusesc sa o rezolv. sbit LCD_RS at RB4_bit;sbit LCD_EN at RB5_bit;sbit LCD_D4 at RB0_bit;sbit LCD_D5 at RB1_bit;sbit LCD_D6 at RB2_bit;sbit LCD_D7 at RB3_bit;sbit LCD_RS_Direction at TRISB4_bit;sbit LCD_EN_Direction at TRISB5_bit;sbit LCD_D4_Direction at TRISB0_bit;sbit LCD_D5_Direction at TRISB1_bit;sbit LCD_D6_Direction at TRISB2_bit;sbit LCD_D7_Direction at TRISB3_bit; unsigned int val1,val2,val3,valm; unsigned int t,a, b,K,H,M; //K-grade Kelviu, H-grade fahrenheit, M=grade Rankine,t-grade Celsius unsigned long u;unsigned char ch;void main(){ //TRISA = 0xFF; // designate PORTA as input //INTCON = 0; // Disable all interrupts //IRP_bit = 1 ; Lcd_Init(); // Initialize LCD Lcd_Cmd(_LCD_CURSOR_OFF); // Cursor off Lcd_Cmd(_LCD_CLEAR); // Clear display Delay_ms(100); LCD_Out(1,2," Termometer"); LCD_Out(2,2," EA 1341A"); Delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); // Clear display LCD_Out(1,2," Alexandru"); LCD_Out(2,2," Bujorean"); Delay_ms(1500); Lcd_Cmd(_LCD_CLEAR); // Clear display Delay_ms(500); Lcd_Cmd(_LCD_CLEAR); LCD_Out(1, 1,"C:"); LCD_Out(2, 1,"F:"); LCD_Out(1, 9,"K:"); LCD_Out(2, 9,"R:"); while (1) { for (b ; b < 2; b++) { } // Voltage val1=ADC_read(1); // get ADC value for U from channel 1 delay_ms(30); val2=ADC_read(1); delay_ms(30); val3=ADC_read(1); delay_ms(30); valm=((val3+val2+val1)/3); t=(valm*0.48876);//Convert to Degree Celcius ch = t/100; //=> afisez sutele if(ch) LCD_chr(1,4,'0'+ch); else ch = (t/10)%10; LCD_chr(1,5,'0'+ch); ch = t%10; LCD_chr(1,6,'0'+ch); val1=ADC_read(1); // get ADC value for U from channel 1 delay_ms(30); val2=ADC_read(1); delay_ms(30); val3=ADC_read(1); delay_ms(30); valm=((val3+val2+val1)/3); t=(valm*0.48876);//Convert to Degree Celcius M= (t*9/5)+ 32; ch = M/100; //=> afisez sutele if(ch) LCD_chr(2,4,'0'+ch); else ch = (M/10)%10; LCD_chr(2,5,'0'+ch); ch = M%10; LCD_chr(2,6,'0'+ch); val1=ADC_read(1); // get ADC value for U from channel 1 delay_ms(30); val2=ADC_read(1); delay_ms(30); val3=ADC_read(1); delay_ms(30); valm=((val3+val2+val1)/3); t=(valm*0.48876);//Convert to Degree Celcius K= t+ 273,15; ch = K/100; //=> afisez sutele if(ch) LCD_chr(1,12,'0'+ch); else ch = (K/10)%10; LCD_chr(1,13,'0'+ch); ch = K%10; LCD_chr(1,14,'0'+ch); val1=ADC_read(1); // get ADC value for U from channel 1 delay_ms(30); val2=ADC_read(1); delay_ms(30); val3=ADC_read(1); delay_ms(30); valm=((val3+val2+val1)/3); t=(valm*0.48876);//Convert to Degree Celcius M=K*9/5; ch = M/100; //=> afisez sutele if(ch) LCD_chr(2,12,'0'+ch); else ch = (M/10)%10; LCD_chr(2,13,'0'+ch); ch = M%10; LCD_chr(2,14,'0'+ch); }}De ce nu calcuzeaza bine gradele Kelvin si Rankine daca eu am pus bine formula in cod? photo uploader LE: cum fac simbolul de la grad? Link spre comentariu
Liviu M Postat Noiembrie 28, 2012 Partajează Postat Noiembrie 28, 2012 revin cu o problema pe care nu reusesc sa o rezolv. if(ch) LCD_chr(1,4,'0'+ch); else ch = (t/10)%10; LCD_chr(1,5,'0'+ch);}De ce nu calcuzeaza bine gradele Kelvin si Rankine daca eu am pus bine formula in cod?LE: cum fac simbolul de la grad? Probabil din cauza de else "neterminat".Cu alte cuvinte, la numerele mai mari de 100 testul if(ch) e adevarat, asa ca ramura cu else nu mai e executata. Asta inseamna ca instructiunea care-i urmeaza lui else nu e executata (un rand gol nu conteaza, instructiunea care-i urmeaza lui else e ch = (t/10)%10;), adica zecile nu mai sunt calculate ci e afisata valoarea anterioara a lui ch. Pentru simbolul °, daca nu se potriveste cu cel "standard" (eu il am pe tastatura, da' probabil n-avem acelasi layout), trebuie sa-l cauti in documentatia LCD-ului si sa trimiti codul corespunzator la LCD. Observatii: - pentru ca citesti temperatura pentru fiecare tip de afisare in parte, sunt sanse ca intre valorile in diversele temperaturi sa ai discrepante. Ce-i drept, distanta (in timp) intre citiri e mica, asa ca probabil n-o sa se simta. - foloseste variabile "cu virgula" (float sau double, mai uita-te prin documentatia compilatorului). Chiar daca afisezi temperaturile ca intregi, o sa ai rezultate mai aproape de realitate (reduci din erorile datorate rotunjirilor). - la transformarea in Kelvin e 273.15 nu 273,15 (ma mir ca s-a compilat) - poate mai sunt, n-am citit chiar tot. Link spre comentariu
Vlad Mihai Postat Noiembrie 28, 2012 Autor Partajează Postat Noiembrie 28, 2012 am rezolvat cu afisarea la Kelvin, am sters else si if si merge bine, nu ma deranjeaza acel 0 in fata cand nu sunt sute, acum ramane sa vad cum fac grad simbolul, Ca asa introdus de la tastatura nu merge si nici in daasheet lui nu il gasesc. LE: conform datasheetului codul este 11011111 - e corect sau nu? mie imi afiseaza o virgula http://www.lcd-module.com/eng/pdf/doma/dip162-de.pdf Link spre comentariu
sofian Postat Noiembrie 28, 2012 Partajează Postat Noiembrie 28, 2012 Afiseaza virgula pentru ca este alt tip de LCD se poate defini caracterul grad in lcd http://www.geocities.com/dinceraydin/lcd/custom.htm http://deanandara.com/robots/ApuLcd.html Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum