|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Boštjan Profesionalec
Pridružen/-a: Tor Mar 2004 22:48 Prispevkov: 100
|
Objavljeno: Sre Jan 09, 2013 9:50 pm Naslov sporočila: 3x DS1820 |
|
|
Imam naslednjo kodo s kadero berem tri senzorje DS1820 vsakega na sojem pinu, kot ste mi svetovali. Težava se mi pojavi, ker je pri meritvi potreben waitms 600 ukaz . Zraven temperatur prikazujem na LCD_ju še čas s sekundami, vendar mi zaradi teh zakasnitem ne prikazuje lepo tekoče sekund, ampak vsako drugo sekundo. Se da kaj tukaj naredit?
Meritev_temp1:
1wwrite &HCC , 1 , Pina , 5
1wwrite &H44 , 1 , Pina , 5
Waitms 600
Gosub Read1820_1
If Err = 1 Then
Locate 2 , 1 : Lcd "T1: " ; "NO SENSOR "
Else
Locate 2 , 1 : Lcd "T1: " ; T1_1 ; Chr(0) ; "C" ; " "
End If
Return
'-------------------------------------------------------------------------------
Meritev_temp2:
1wwrite &HCC , 1 , Pina , 6
1wwrite &H44 , 1 , Pina , 6
Waitms 600
Gosub Read1820_2
If Err = 1 Then
Locate 3 , 1 : Lcd "T2: " ; "NO SENSOR "
Else
Locate 3 , 1 : Lcd "T2: " ; T2_1 ; Chr(0) ; "C" ; " "
End If
Return
'-------------------------------------------------------------------------------
Meritev_temp3:
1wwrite &HCC , 1 , Pinb , 0
1wwrite &H44 , 1 , Pinb , 0
Waitms 600
Gosub Read1820_3
If Err = 1 Then
Locate 4 , 1 : Lcd "T3: " ; "NO SENSOR "
Else
Locate 4 , 1 : Lcd "T3: " ; T3_1 ; Chr(0) ; "C" ; " "
End If
Return |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Čet Jan 10, 2013 9:17 am Naslov sporočila: |
|
|
Boštjan,
zakaj pa izvajaš meritve tako pogosto?
Če že imaš uro, meritev lahko izvedeš poljubno, recimo enkrat v minuti.
If _sec=0 then 'predvidevam da uporabljaš RTC
GoSub meritev
'prikaži na LCD
end if
druga stvar, ni ti potrebno za vsak senzor čakati 600ms, pošlješ ukaze vsem senzorjem, počakaš 600ms, prebereš vse senzorje in obdelaš podatek.
Zdi se mi, nisem pa prepričan da ni potrebe po čakanju pri pretvorbi ča imaš napajanje na senzorjih, ne pa parazitno napajanje.
LP |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Čet Jan 10, 2013 11:18 am Naslov sporočila: |
|
|
Jaz to delam tako:
V sekundi 1 startam pripravo na branje temperature na vseh termometrih (8)
na pinih od C.0 do C.7
Koda: | If Sekunde = 1 Then
' vsako prvo sekundo minute:
' zahtevamo convert temperature v vseh termometrih
Disable Interrupts
For I = 0 To 7
1wreset Pinc , I
1wwrite &HCC , 1 , Pinc , I 'skip ROM
1wwrite &H44 , 1 , Pinc , I 'convert temperature
1wreset Pinc , I
Next
Enable Interrupts
End If ' konec sekunde 1
|
Potem pa čez eno sekundo preberem vse temperature:
Koda: | If Sekunde = 2 Then
' vsako drugo sekundo minute
' odčitamo temperature:
'Dim Tzz As Integer 'C0 Temp. zunanjega zraka
'Dim Tsv As Integer 'C1 Temp. sanitarne vode
'Dim Tko As Integer 'C2 Temp. kotlovske vode
'Dim Trv1 As Integer 'C3 Temp. radiatorske vode, izhod mešalnega ventila
'Dim Tpv1 As Integer 'C4 Temp. povratne vode sistema 1
'Dim Trv2 As Integer 'C5 Temp. radiatorske vode, izhod mešalnega ventila
'Dim Tpv2 As Integer 'C6 Temp. povratne vode sistema 2
'Dim Tso1 As Integer 'C7 Temp. sobna - notranji termometer sistem 1
'Dim Trmtrierr As Bit ' Termometri error bit
'Dim Trmtrierrcnt As Byte ' Termometri števec sekund do naslednjega SMS alarma
Trmtrierr = 0
For I = 0 To 7
Disable Interrupts
1wreset Pinc , I
1wwrite &HCC , 1 , Pinc , I ' skip rom
1wwrite &HBE , 1 , Pinc , I ' READ Scratchpad
Scratchpad(1) = 1wread(9 , Pinc , I )
1wreset Pinc , I
Enable Interrupts
K = 0 : For J = 1 To 9 : K = K + Scratchpad(j) : Next ' če so same nule
If K = 0 Then Temperatura = 200
' Ds18x20:
' vhodni podatki so v Termometer(9) tipa bajt,
' izhod v Temperatura tipa Integer v desetinkah stopinje C
W = Makeint(scratchpad(1) , Scratchpad(2))
If Scratchpad(5) = &H7F Then
' za termometer DS18B20
W = W * 10
W = W / 16
Else
' za ostala dva tipa termometrov
W = W * 5
End If
' end of ds18x20
' temperaturo zaokrožim na cele stopinje
W = W + 5
W = W / 10
If Crc8(scratchpad(1) , 9 ) <> 0 Then W = 200 ' temperatura 200C pomeni napaka
J = I + 1
Tarr(j) = W
Next
|
Je koda kaj v pomoč?
Ker ti verjetno nimaš programirane ure, ki ti daje sekunde, kot jaz, enostavno med prvo in drugo kodo vstavi wait 1 |
|
Nazaj na vrh |
|
|
Boštjan Profesionalec
Pridružen/-a: Tor Mar 2004 22:48 Prispevkov: 100
|
Objavljeno: Sre Feb 06, 2013 6:48 pm Naslov sporočila: hvala |
|
|
Ja odlično deluje OK
Hvala lepa |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|