Sari la conținut
ELFORUM - Forumul electronistilor

Proticol 1-wire pentru DS18B20


aionescu

Postări Recomandate

  • Răspunsuri 21
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • aionescu

    6

  • 78ATI

    6

  • bogdanm

    2

  • puiu

    2

Top autori în acest subiect

Ciudat! Am incercat din nou! imi afiseaza valori intre 90-105..si aceste valori variaza in functie de temperatura...zau ca nu imi dau seama ce e necazul.. Am incercat cu 2 senzori identici, aceleasi simptome!

Probabil sunt grade Fahrenheit, asta inseamna 32,2 - 40,5 grade Celsius
Link spre comentariu

Nu e Farenheit! Am tradus am calculat C=(F/1.8)-32 ...si nu da nimic ok!Am reusit acum sa citesc ceva...problema este 27 grade celsius la Mine in camera?...momentan nu am gheata (am pus la frigider) cat despre apa clocotita ma gandesc ca nu are rost sa testez!Cum se testeaza daca senzorul este ok etalonat ?

Link spre comentariu

program read_one_wiredim tmp_sign as bytedim    j as bytedim    scratch as byte[9]dim    text  as char[7]dim    a,b,i,x,r as bytedim    deci     as char
AICI se seteaza senzorul sa faca conversia pe 9..12Bit

ow_reset(PORTA,2)ow_write(PORTA,2,$CC)        `Skip ROMow_write(PORTA,2,$44)         `Convert Temeraturadelay_us(120)
AICI se asteapta in functie de pe citi biti este setat senzorul (9..12bit) ptr o conversie corecta

Resolution Max Conversion Time

9-bit 93.75 ms (tCONV/8)

10-bit 187.5 ms (tCONV/4)

11-bit 375 ms (tCONV/2)

12-bit 750 ms (tCONV)

ow_reset(PORTA,2)ow_write(PORTA,2,$CC)   Ow_Write(portA, 2, $BE)             'read scratchpad cmd          for i=0 to 8           x = ow_read(PORTA, 2)            scratch[i] = x             'get result  9 bytes in array       next i
Semnul temperaturi este pe un bit nu Byte

       a= scratch[1]                   'sign temp       if a=0 then                  tmp_sign="+"              else                  tmp_sign="-"       end if       a=scratch[0]       if a.0 = 0  then                'a.0 is 0.5C value                       deci = "0"                  else                       deci = "5"       end if       a = scratch[0]  >>1             'temp en degre
Temperatura este pe 2 Bytes,iar rotirea se face numai daca vrei grade celsius (dar mai inainte ai verificat daca este 0.5 grade !)

       ByteToStr(a,text)'       Lcd_out_cp( text)'       Lcd_Chr_CP(",")'       Lcd_Chr_CP(deci)'       Lcd_chr_CP(223)'       Lcd_Chr_CP("c")end.
eu personal recomand citirea PDF-ului cu atentie a senzorului
Link spre comentariu

Nu pot sa-mi dau cu parerea despre cod fiindca nu ma pricep (eu lucrez in assembler,cum am zis) dar am urmatoarele observatii:1. Senzorul afisaza in grade Celsius.2. Rotirea face conversia din binar in hexa,n-are legatura cu Farenheit.Sigur se face corect calculul? Forteaza o valoare in registrii in care se stocheaza temperatura trimisa de DS sa vezi daca o regasesti pe LCD.3. Senzorul e etalonat din fabrica, asa ca ori merge ori nu. Daca indicatia se schimba cand il incalzesti dar nu seamana cu o temperatura inseamna ca e o buba la calcul. De curiozitate intreb, folosesti o simulare sau "arzi" picul de fiecare data cand modifici codul?

Link spre comentariu

Curat ciudat: indicatia unui senzor de temperatura sa varieze cu... temperatura :d

Imi cer scuze de exprimare, insa ma refeream la valoarea afisata nu la faptul "ca variaza odata cu temperatura".

 

@aionescu: din pacate nu folosesc nici o simulare, nu am un soft ce face acest lucru, si asa cum ai spus testarea o fac "arzand" PIC-ul.

 

Va multumesc tuturor de ajutor. Ceea ce parea super simplu s-a dovedit mai complex. Am reusit in final sa citesc temperatura senzorului, insa folosind rezolutia default a acestuia 12 biti. Multumesc lui @sofian, marea problema a fost timpul de conversie. Conversia corecta ( a zecimalelor) a fost facuta la 720 milisecunde. Interesant este ca la 120 microsecunde cum aveam in programul testat, conversia gradelor se face bine.

Am sa refac astazi programul pentru o rezolutie de 9 biti cu un timp de conversie 93,75 milisecunde, iar apoi am sa verific etalonarea DS18B20. Am sa postez codul sursa

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