Sari la conținut
ELFORUM - Forumul electronistilor

Termometru cu pic16f876A


Vlad Mihai

Postări Recomandate

am văzut pe google că se inseria si un rezistor de 2k2 cu borna 5v la senzor

Sa 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? :nas:
Link spre comentariu
  • Răspunsuri 20
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • Vlad Mihai

    11

  • Liviu M

    7

  • francezu

    1

  • 10vid

    1

Top autori în acest subiect

Imagini postate

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?

Posted Image

photo uploader

 

LE: cum fac simbolul de la grad?

Link spre comentariu

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

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

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 cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări