fratello Postat Decembrie 26, 2008 Partajează Postat Decembrie 26, 2008 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
Administratori Badman Postat Decembrie 26, 2008 Administratori Partajează Postat Decembrie 26, 2008 Nu ma pricep ca sa te ajut dar am impresia ca asta afiseaza temperatura in F nu in C Link spre comentariu
fratello Postat Decembrie 26, 2008 Autor Partajează Postat Decembrie 26, 2008 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
Stefan Postat Decembrie 26, 2008 Partajează Postat Decembrie 26, 2008 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
fratello Postat Decembrie 26, 2008 Autor Partajează Postat Decembrie 26, 2008 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
junior Postat Decembrie 26, 2008 Partajează Postat Decembrie 26, 2008 Uite aici .Ar tb sa mearga corect acum: Link spre comentariu
fratello Postat Decembrie 26, 2008 Autor Partajează Postat Decembrie 26, 2008 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
fratello Postat Decembrie 26, 2008 Autor Partajează Postat Decembrie 26, 2008 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
junior Postat Decembrie 26, 2008 Partajează Postat Decembrie 26, 2008 Sorry.My bad .Incearca varianta asta .Cred ca merge pentru valori pozitive de temperetura.Incercam sa rezolvam si pentru negative. Link spre comentariu
fratello Postat Decembrie 26, 2008 Autor Partajează Postat Decembrie 26, 2008 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
junior Postat Decembrie 26, 2008 Partajează Postat Decembrie 26, 2008 Normal ca indica .25 .75. Precizia a devenit 0.5V. Link spre comentariu
fratello Postat Decembrie 26, 2008 Autor Partajează Postat Decembrie 26, 2008 MULTUMESC !!!!!Ati facut o treaba f. buna... 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
aionescu Postat Decembrie 27, 2008 Partajează Postat Decembrie 27, 2008 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
fratello Postat Decembrie 27, 2008 Autor Partajează Postat Decembrie 27, 2008 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
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