|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Alan Novinec
Pridružen/-a: Sob Sep 2004 16:28 Prispevkov: 9
|
Objavljeno: Sob Sep 25, 2004 4:38 pm Naslov sporočila: Merjenje 2-temp. z avr-jem |
|
|
Najprej en lep pozdrav.
Zanima me če ima kdo mogoče primer za merjenje dveh temperatur z senzorjem DS1820 za AVR-je.
Hvala! |
|
Nazaj na vrh |
|
|
Alan Novinec
Pridružen/-a: Sob Sep 2004 16:28 Prispevkov: 9
|
Objavljeno: Sob Sep 25, 2004 6:03 pm Naslov sporočila: |
|
|
Zanima me samo software
lp |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Sob Sep 25, 2004 6:11 pm Naslov sporočila: merjenje dveh temperatur |
|
|
LP!
Njabolj enostavna rešitev je da DS-je priklopiš na različne pine (če so na voljo) in vsakega bereš posebi.Poglej v Help tam je primer kako se definirajo pini za posamezen 1WIRE .
Z tem se boš izognil da moraš poznati ID posameznega DS-ja.
(drugače pa lahko primer ki je bil objavljen v SE in je napisan za Bascom 8051 lahko prevedeš v AVR brez težav).
Vlado |
|
Nazaj na vrh |
|
|
Alan Novinec
Pridružen/-a: Sob Sep 2004 16:28 Prispevkov: 9
|
Objavljeno: Sob Sep 25, 2004 7:32 pm Naslov sporočila: |
|
|
ID senzorjev sem prebral, sem tudi probal s primerom za 8051 pa mi vseeno ne dela, me zanima če ima še kdo preverjeno verzijo.
hvala |
|
Nazaj na vrh |
|
|
Alan Novinec
Pridružen/-a: Sob Sep 2004 16:28 Prispevkov: 9
|
Objavljeno: Sob Sep 25, 2004 7:37 pm Naslov sporočila: |
|
|
Program pa izgleda nekeko takole:
Config Lcd = 20 * 4
Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
' konfiguracija LCD display
Declare Sub Read1820
Declare Sub Temperature
Declare Sub Srno1
Declare Sub Srno2
Dim T2 As Integer , T4 As Integer
Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim T As Integer , T1 As Integer , Tn As Byte
Dim Tz As Byte
Dim Ar( As Byte
T = 0
Config 1wire = Pinc.2
Cursor Off Noblink
Cls
'///////////////////////////GLAVNA RUTINA//////////////////////////////////////
Do
Srno1
Temperature
Locate 1 , 1 : Lcd "Notranja : " ; T ; Chr(46) ; T1 ; Chr(223) ; "C"
Tn = T4
If Err = 1 Then 'ce ni senzorja
Locate 1 , 1 : Lcd "Notranja : error " 'je na LCDju "error"
End If
Srno2
Temperature
Locate 2 , 1 : Lcd "Zunanja : " ; T ; Chr(46) ; T1 ; Chr(223) ; "C"
If Err = 1 Then 'ce ni senzorja
Locate 2 , 1 : Lcd "Zunanja : error " 'je na LCDju "error "
End If
Loop
End
'///////////////////////////////////////////////////////////////////////////////
'//////////////////////////// read address 1 ///////////////////////////////////
Sub Srno1 'branje adrese 1
For I = 0 To 7
Ar(i) = Lookup(i , Dta1)
Next
'For I = 0 To 7
'Locate 1 , 1 : Lcd " berem-1 "
' Locate 3 , 3 : Lcd "Data " ; I ; " = " ; Ar(i)
' Wait 1
' Locate 3 , 12 : Lcd " "
' Next
End Sub
'//////////////////////////// read address 2 ///////////////////////////////////
Sub Srno2 'branje adrese 2
For I = 1 To 8
Ar(i) = Lookup(i , Dta2)
Next
'For I = 1 To 8
'Locate 2 , 1 : Lcd " berem-2 "
' Locate 3 , 3 : Lcd "Data " ; I ; " = " ; Ar(i)
' Wait 1
' Locate 3 , 12 : Lcd " "
' Next
End Sub
'//////////////////////////ID NASLOVI SENZORJEV/////////////////////////////////
Dta1: 'naslov 1 Dallasa
Data 16 , 175 , 153 , 136 , 0 , 8 , 0 , 116
Dta2: 'naslov 2 Dallasa
Data 16 , 180 , 183 , 60 , 0 , 8 , 0 , 18
'//////////////////////////MERJENJE TEMPERATURE/////////////////////////////////
Sub Temperature 'merjenje temperature
1wreset
1wwrite &H55 '55
1wwrite Ar(i) , 8 '1Wire ukaz
1wwrite &H44
Wait 1
Read1820 'read 9 bytes
End Sub
Sub Read1820 'bere senzor 'T za 0.1 C
1wreset 'reset
1wwrite &H55 '55 '1Wire ukaz
1wwrite Ar(i) , 8
1wwrite &HBE
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(1) And 1 '0.1C natancnost
If Tmp = 1 Then
Decr Bd(1)
End If
T = Makeint(bd(1) , Bd(2))
T4 = T / 2 'T4 lahko uporabimo, ce zelimo temp. kot celo stevilo
T = T * 50 : T = T - 25 : T1 = Bd( - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd( : T = T + T1 : T = T / 10
T1 = T
T = T / 10
T2 = T * 10
T1 = T1 - T2
T1 = Abs(t1)
End Sub |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Sob Sep 25, 2004 8:24 pm Naslov sporočila: temperature |
|
|
Alan!
Malo sem pogledal program in ne vidim napake vsaj na hiter ne,daj napisi kaj dobis na displeju,imam en DS pa bom jutar preizkusil.Kateri procesor uporabljas?
Če imaš prst pin še vedno svetujem da vsak DS priklopiš na posebi pin.
Prav tako v compiler options pravilno nastavi HWstack,soft stack in frame size,glede na tvoje spremenjivke.
Vlado |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Sob Sep 25, 2004 8:49 pm Naslov sporočila: TEMPERATURE |
|
|
Alan!
Neki pa ni tako kot bi moglo biti,namreč ko pošiljaš ID ne pošlješ vseh osam bytov
Poskusi takole:
Dim Adr_1820( As Byte , I As Byte , Pom As Byte , Oldtemp As Integer
Dim T1 As Byte , T2 As Byte , Temp As Integer , Desetice As Byte , Enice As Byte
Config 1wire = Portd.3
cls
cursor off
LCD "TERMO 02"
'This routine will address one of several connected DS1820, start conversion
'and read the result:
Do
Gosub Read_adr
Gosub Adr_1820
1wwrite &H44 'conversion
Waitms 250
Waitms 250
Gosub Adr_1820
1wwrite &HBE 'read RAM
T1 = 1wread()
T2 = 1wread()
1wreset
Gosub Lcd_t
Loop
'.....
Adr_1820:
1wreset
1wwrite &H55
For I = 1 To 8
Pom = Adr_1820(i)
1wwrite Pom
Next
Return
Lcd_t:
' Cls
If Err = 1 Then
Print "NAPAKA"
Waitms 250
Else
Desetice = T1
Enice = T2
Temp = Makeint(t1 , T2)
' Print "TEMP=" ; Temp
Temp = Temp / 2
If Oldtemp = Temp Then
Oldtemp = Temp
Return
End If
Print "Temp = " ; Temp ; "," ;
T1 = T1 And 1
If T1 = 0 Then
Print "0";
Else
Print "5";
End If
Print " T1=" ; Desetice ; " T2=" ; Enice
End If
Oldtemp = Temp
Return
'Lcd_t calculates temperature to 0.5°C
Read_adr:
1wwrite &H33
For I = 1 To 8
Pom = 1wread()
Adr_1820(i) = Pom
Next
1wreset
Return
End |
|
Nazaj na vrh |
|
|
Alan Novinec
Pridružen/-a: Sob Sep 2004 16:28 Prispevkov: 9
|
Objavljeno: Sob Sep 25, 2004 8:53 pm Naslov sporočila: |
|
|
ker ne prepozna senzorja napiše -1.2°C za vsak senzor, ID-ji so pravilno vpisani, uporabljam pa M163. Imam proste pine pa me vseeno zanima tale varianta kar bi moralo delovati.
Alan |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Ned Sep 26, 2004 11:42 am Naslov sporočila: temperature |
|
|
Alane!
Vzel sem si malo časa in našel kje je napaka:
Sub Srno1 'branje adrese 1
For I = 0 To 7
Ar(i) = Lookup(i , Dta1)
Next
iz tabele bereš podatke od 0 do 7,kasneje pa jihpošiljaš od 1 do 8.
V tabelo DTA na prvo mesto dodaj neko številko in beri od 1 do 8
Sub Temperature 'merjenje temperature
1wreset
1wwrite &H55 '55
1wwrite Ar(i) , 8 '1Wire ukaz 'TUKI SPREMENI Ar(i) v Ar(1)
1wwrite &H44
Wait 1
Read1820 'read 9 bytes
End Sub
Program pa zgleda takole (imel sem samo en DS zato ni srno2)
'Config Lcd = 20 * 4
'Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
' konfiguracija LCD display
Declare Sub Read1820
Declare Sub Temperature
Declare Sub Srno1
'Declare Sub Srno2
Dim T2 As Integer , T4 As Integer
Dim Bd(9) As Byte
Dim I As Byte , Tmp As Byte
Dim T As Integer , T1 As Integer , Tn As Byte
Dim Tz As Byte
Dim Ar(8)as Byte
T = 0
Config 1wire = Pind.2
Cursor Off Noblink
Cls
'///////////////////////////GLAVNA RUTINA//////////////////////////////////////
Do
Srno1
Temperature
Print "Notranja : " ; T ; Chr(46) ; T1 ; Chr(223) ; "C"
Tn = T4
Print "tN=" ; Tn
If Err = 1 Then 'ce ni senzorja
Print "Notranja : error " 'je na LCDju "error"
End If
Wait 3
'Srno2
'Temperature
'Locate 2 , 1 : Lcd "Zunanja : " ; T ; Chr(46) ; T1 ; Chr(223) ; "C"
'If Err = 1 Then 'ce ni senzorja
'Locate 2 , 1 : Lcd "Zunanja : error " 'je na LCDju "error "
'End If
Loop
End
'///////////////////////////////////////////////////////////////////////////////
'//////////////////////////// read address 1 ///////////////////////////////////
Sub Srno1 'branje adrese 1
For I = 1 To 8
Ar(i) = Lookup(i , Dta1)
Print Ar(i);
Next
Print
'For I = 0 To 7
'Locate 1 , 1 : Lcd " berem-1 "
' Locate 3 , 3 : Lcd "Data " ; I ; " = " ; Ar(i)
' Wait 1
' Locate 3 , 12 : Lcd " "
' Next
End Sub
'//////////////////////////// read address 2 ///////////////////////////////////
'Sub Srno2 'branje adrese 2
'For I = 1 To 8
'Ar(i) = Lookup(i , Dta2)
'Next
'For I = 1 To 8
'Locate 2 , 1 : Lcd " berem-2 "
' Locate 3 , 3 : Lcd "Data " ; I ; " = " ; Ar(i)
' Wait 1
' Locate 3 , 12 : Lcd " "
' Next
'End Sub
'//////////////////////////ID NASLOVI SENZORJEV/////////////////////////////////
Dta1: 'naslov 1 Dallasa
Data 0 , 16 , 133 , 151 , 42 , 0 , 0 , 0 , 119
'Dta2: 'naslov 2 Dallasa
'Data 16 , 180 , 183 , 60 , 0 , 8 , 0 , 18
'//////////////////////////MERJENJE TEMPERATURE/////////////////////////////////
Sub Temperature 'merjenje temperature
1wreset
1wwrite &H55
1wwrite Ar(1) , 8
', 8
1wwrite &H44
Wait 1
1wreset
Wait 1
Read1820 'read 9 bytes
End Sub
Sub Read1820 'bere senzor 'T za 0.1 C
1wreset 'reset
1wwrite &H55
1wwrite Ar(1) , 8
1wwrite &HBE
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(1) And 1 '0.1C natancnost
If Tmp = 1 Then
Decr Bd(1)
End If
T = Makeint(bd(1) , Bd(2))
T4 = T / 2 'T4 lahko uporabimo, ce zelimo temp. kot celo stevilo
T = T * 50 : T = T - 25 : T1 = Bd( - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd( : T = T + T1 : T = T / 10
T1 = T
T = T / 10
T2 = T * 10
T1 = T1 - T2
T1 = Abs(t1)
End Sub
Vlado |
|
Nazaj na vrh |
|
|
Alan Novinec
Pridružen/-a: Sob Sep 2004 16:28 Prispevkov: 9
|
Objavljeno: Ned Sep 26, 2004 6:34 pm Naslov sporočila: |
|
|
Sem popravil, pa še zmeraj ne dela.
V katerem delu programa primerja med prebranem id senzorja, ki ga primerja z določenem id senzorja ki ga prebere iz dta. |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Ned Sep 26, 2004 7:07 pm Naslov sporočila: temperature |
|
|
LP!
Preberi moj post,v sub temperature popravi:
1wwrite Ar(i) , 8 '1Wire ukaz 'TUKI SPREMENI Ar(i) v Ar(1) Program deluje ker sem preizkisil.Najlažje bo da tisto kar sem napisal skopiraš v Bascom (popravi pin za 1Wire in spet dodaj LCD jaz sem uporabil print ker nisem imel LCD-ja pri roki zato je tudi zakasnitev 3sec.)
Prav tako dodaj sub srno2 (ne pozabi pa v dta2 dodati kakšno številko na prvo mesto.
Vlado |
|
Nazaj na vrh |
|
|
Alan Novinec
Pridružen/-a: Sob Sep 2004 16:28 Prispevkov: 9
|
Objavljeno: Ned Sep 26, 2004 10:42 pm Naslov sporočila: |
|
|
Vlado
Hvala za pomoč, zadeva deluje!
Napaka je bila, da sem zadevo najprej hotel sprobati z enim senzorjem, pri katerem pa sem imel pri 8 bytu napisan napačen id. Ko sem priklopil še drugi senzor je začel meriti seveda samo za drugi senzor ker bil ID ok.
Malček nepozornost, veliko heca. |
|
Nazaj na vrh |
|
|
rudolf Mojster
Pridružen/-a: Sre Mar 2004 17:31 Prispevkov: 23 Kraj: Novo mesto
|
Objavljeno: Čet Okt 21, 2004 2:13 pm Naslov sporočila: |
|
|
Na moji strani je na Download-u
nacrt in Bascom-AVR program za
merjenje 2 temperatur z AT90S2313,
ADC0831 in temp. senzorjem LM35.
Lep pozdrav
Rudi |
|
Nazaj na vrh |
|
|
kolesar007 Mojster
Pridružen/-a: Čet Jul 2004 9:39 Prispevkov: 22
|
Objavljeno: Sre Nov 10, 2004 12:05 pm Naslov sporočila: |
|
|
...a je mogoče kdo testiral na koliko razdalje delujejo DSji?
LP Sandi |
|
Nazaj na vrh |
|
|
Vlado Profesionalec
Pridružen/-a: Ned Jan 2004 16:11 Prispevkov: 556 Kraj: Ljubljana
|
Objavljeno: Sre Nov 10, 2004 7:54 pm Naslov sporočila: merjenje tem |
|
|
Brez zunanjega napajanja ne delajo na večjih razdaljah,z napajanjem (+5V) pa ih imam na razdalji 70m in delajo ,potrebno pa je zmanjšati vrednost pull up upora.
Vlado |
|
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
|