home | area personale         schemi | tutorial | robotica | pic micro | recensioni         forum | chat irc         faq | contatti         store | Ordina PCB
username
password
cerca

 
FORUM: Pic Micro
Tutto quanto riguarda questi microprocessori... progetti, suggerimenti, aiuti, discussioni...ecc


DS18B20 errori random nella lettura della temperatura
     
Autore Messaggio opzioni
piero55




una ogni 10 livelli


postato il:
01.08.2022, alle ore 10:53
DS18B20 errori random nella lettura della temperatura 

Buongiorno....
sto realizzando un progetto dove mi serve tenere sotto controllo la temperatura di carica/scarica di una batteria 18650. Ho impostato temporaneamente la soglia di 40 gradi e il progetto funziona bene. Però in maniera random si blocca perche' il 18B20 fornisce una lettura sballata che e' ben superiore ai 40 gradi impostati (51....61....): in realtà la temperatura è ben al di sotto di tale valore. Di seguito il codice scritto in Positron (ex proton basic) trovato in rete.
 '*************************************************************************
'********************       LEGGI Temperatura         ********************
'*************************************************************************
Proc GetDegree(), SDword
' Read the DS18S20 chip
  Dim tmpVal As Dword
  Dim Temp As Word                ' Holds the temperature value
  Dim bCounts As Byte             ' Holds the counts remaining value
  Dim negative As Temp.15         ' the sign bit
  OWrite DQ_Pin, 1, [$CC, $44]    ' Send a Calculate Temperature command
  Repeat
    DelayMS 100                    ' Wait until conversion is complete
    ORead DQ_Pin, 4, [bCounts]    ' Keep reading low pulses until
  Until bCounts <> 0              ' the DS1820 is finished.
  OWrite DQ_Pin, 1, [$CC, $BE]    ' Send a Read ScratchPad command
  DelayMS 50
  ORead DQ_Pin, 2,[Temp.LowByte, Temp.HighByte]
  If FirstRead = False Then       ' Non scrive prima misura +85.00
    FirstRead = True
    ExitProc
  End If
    ' Calculate the temperature in degrees Centigrade
  If negative   = 1 Then
    Temp = ~Temp + 1
    Set negate
  Else
    Clear negate
  End If
  tmpVal = (Temp >> 4) * 10000
  tmpVal = tmpVal + (Temp & $000f) * 625
  Result = tmpVal / 10
  If negate = 1 Then
    Result = -Result
  End If
EndProc

'************************************************************************* 

la lettura sballata, può avvenire dopo pochi minuti o piu' di un'ora....

Come può essere? Qualche suggerimento?
rbacchi




una ogni 10 livelli


postato il:
01.08.2022, alle ore 12:40
Prima di immattire a cercare il bug (cosa comunque sacrosanta) prova a mettere una routine che legge più volte la temperatura scartando i valori che si allontanano dalla media precedente, ad esempio non prendi i considerazione salti di temperatura maggiore di 5 gradi al minuto se poi non si confermano ripetutamente


Se lo puoi fare fallo e non t'arrabbiare,
se non lo puoi fare, pazienza e non t'arrabbiare
piero55




una ogni 10 livelli


postato il:
01.08.2022, alle ore 12:56
si, infatti sto arrivando a questa soluzione oltre a fare letture ogni 4-5 secondi. tutto ok, ma perchè si comporta così?
segui questo thread con grixFC, per questa funzione devi aver installato il software grixFC

torna su
     

Come utente anonimo puoi leggere il contenuto di questo forum ma per aprire una discussione
o per partecipare ad una discussione esistente devi essere registrato ed accedere al sito




 







 
 
indietro | homepage | torna su copyright © 2004/2024 GRIX.IT - La community dell'elettronica Amatoriale