Sari la conținut
ELFORUM - Forumul electronistilor

Cum inlocuiesc DS1820 cu DS18B20 ?


fratello

Postări Recomandate

Am facut un termostat cu PIC 16F628 si LCD 2x16, dupa o schema din revista Elektor. In schema este recomandat DS1820. Am pus un DS18B20, fiindca din acesta am, dar temperatura afisata este total aiuristica : ceva de genul 138.25 'C !!!!Citind am sesizat ca un senzor este pe 9 biti, celalalt pe 9/12 biti. Atasez sursa pentru PIC. Ma puteti ajuta cu rescrierea codului pentru un senzor 18B20 ? Multumesc anticipat !

Link spre comentariu
  • Răspunsuri 40
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • fratello

    16

  • mihay

    7

  • gedd

    5

  • junior

    4

Top autori în acest subiect

Nu, temperatura este in grade Celsius, diferentele sunt date de :"In order to convert the HEX code to a temperature value, first you need to identify if you are using a DS18S20, or DS18B20 series sensor. The code to read the temperature needs to be slightly different for the DS18B20 (and DS1822), because it returns a 12-bit temperature value (0.0625 deg precision), while the DS18S20 and DS1820 return 9-bit values (0.5 deg precision)". Aici m-am blocat, treaba asta ma depaseste complet....

Link spre comentariu

deci sa intelegem ca ai temp. reala de 13,825 °C ?

nici eu nu ma pricep la programare dar e clar

 

The DS18B20 output temperature data is calibrated in degrees centigrade; for Fahrenheit applications, a

lookup table or conversion routine must be used. The temperature data is stored as a 16-bit sign-extended

two?s complement number in the temperature register (see Figure 2). The sign bits (S) indicate if the

temperature is positive or negative: for positive numbers S = 0 and for negative numbers S = 1. If the

DS18B20 is configured for 12-bit resolution, all bits in the temperature register will contain valid data.

For 11-bit resolution, bit 0 is undefined. For 10-bit resolution, bits 1 and 0 are undefined, and for 9-bit

resolution bits 2, 1 and 0 are undefined. Table 2 gives examples of digital output data and the

corresponding temperature reading for 12-bit resolution conversions.

deci in program trebuie adaugata liniile de comanda pentru semnal de 9 biti de la senzor.

Link spre comentariu

Aici " OWOut DQ, 1, [$CC, $44] ' Start temperature conversion WaitLoop: OWIn DQ, 4, [Count_Remain] ' Check for still busy converting If Count_Remain = 0 Then WaitLoop ' Busy OWOut DQ, 1, [$CC, $BE] ' Read the temperature OWIn DQ, 0, [Temperature.LowByte, Temperature.HighByte, Skip 4, Count_Remain, Count_Per_C] Temperature = (((Temperature >> 1) * 100) - 25) + (((Count_Per_C - Count_Remain) * 100) / Count_Per_C) If Temperature > 32767 Then Temperature= ~Temperature V= 10000 - Temperature ' 25 C=12500 0 C=10000 -10 C=9000 Else V= 10000 + Temperature EndIf "trebuie modificat ? Cum ?

Link spre comentariu

Multumesc mult de tot ! Le voi compara pe amandoua, sper sa inteleg modificarile ! De-abia astept sa vad rezultatele. Va tin la curent. Multumesc inca o data !!!L.E.Din pacate acum nu mai afiseaza decat " 93.24 'C"....si nu se modifica in nici un sens....

Link spre comentariu

Am rescris PIC-ul cu vechiul soft...revin cu informatii : afiseaza +199.62 'C, in conditiile in care temperatura este de cca. 20 'C (masurata cu termometru de camera). Sugestii noi ? Multumesc !

Link spre comentariu

Acum arata valori de genul xx.25 sau xx.75 ; numai .25 si .75 ; temperatura afisata se pare ca este mai mare cu cca 2 grade...am masurat acum cu LM35. Termometrul facut cu display de Nokia 3310 si 18B20 arata aceeasi temperatura cu cea indicata de senzorul LM35. Atasez si sursa acestui termometru, poate inspira....Oricum, multumesc frumos pentru eforturi !!!

Link spre comentariu

MULTUMESC !!!!!Ati facut o treaba f. buna... :aplauze Atasez o poza cu temperaturile indicate de :-senzor LM35 -DS18B20 + 12F675 + display Nokia-DS18B20 + 16F628A + display 2x16.Acum, care dintre ele indica temperatura REALA....este o intrebare la care nu pot raspunde. Oricum, ma declar multumit, in aceasta faza de rezultat. Fara Dvs. nu as fi reusit. Multumesc din inima ! Toate cele bune !

Link spre comentariu

Temperaturile citite cu cele doua DS-uri trebuie sa fie riguros egale.Ca sa vezi unde e problema injecteaza o valoare cunoscuta a temperaturii (de ex. 25 grade C, convertita in hexa) in registrul unde o "varsa" DS-ul, imediat dupa secventa de citire. Astfel, in registrul respectiv va fi valoarea ta, pe care trebuie s-o regasesti pe display.Daca nu e, aplici aceeasi tehnica in diferite puncte ale programului pana-l prinzi pe ticalos.Bafta!

Link spre comentariu

Aici cumva :"DisplayTemp: If V >= 10000 then ' Above 0 C. Temperature=V-10000 Else Temperature=10000-V ' Below 0 C. EndIf LcdOut $FE, $C0, Sign, DEC (Temperature / 100), ".", DEC2 Temperature, " ",223,"C " 'SEROUT 3,N9600,["temp = ",#temperature,10,13] 'SEROUT 3,N9600,["V = ",#V,10,13] Return" ????Scriu Temperature=xx (valoarea mea) ?E corect sau aberez ? Multumesc !

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