Kazalo po Svet elektronike forumu Svet elektronike
Revija za prave elektronike
 
AlbumAlbum   Pomoč pogostih vprašanjPomoč pogostih vprašanj   IščiIšči   Seznam članovSeznam članov   Skupine uporabnikovSkupine uporabnikov   Registriraj seRegistriraj se 
 Tvoj profilTvoj profil   Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil   PrijavaPrijava 

Merjenje 2-temp. z avr-jem

 
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
Alan
Novinec


Pridružen/-a: Sob Sep 2004 16:28
Prispevkov: 9

PrispevekObjavljeno: Sob Sep 25, 2004 4:38 pm    Naslov sporočila: Merjenje 2-temp. z avr-jem Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Alan
Novinec


Pridružen/-a: Sob Sep 2004 16:28
Prispevkov: 9

PrispevekObjavljeno: Sob Sep 25, 2004 6:03 pm    Naslov sporočila: Odgovori s citatom

Zanima me samo software

lp
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 555
Kraj: Ljubljana

PrispevekObjavljeno: Sob Sep 25, 2004 6:11 pm    Naslov sporočila: merjenje dveh temperatur Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Alan
Novinec


Pridružen/-a: Sob Sep 2004 16:28
Prispevkov: 9

PrispevekObjavljeno: Sob Sep 25, 2004 7:32 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Alan
Novinec


Pridružen/-a: Sob Sep 2004 16:28
Prispevkov: 9

PrispevekObjavljeno: Sob Sep 25, 2004 7:37 pm    Naslov sporočila: Odgovori s citatom

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(Cool 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(Cool - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(Cool : 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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 555
Kraj: Ljubljana

PrispevekObjavljeno: Sob Sep 25, 2004 8:24 pm    Naslov sporočila: temperature Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 555
Kraj: Ljubljana

PrispevekObjavljeno: Sob Sep 25, 2004 8:49 pm    Naslov sporočila: TEMPERATURE Odgovori s citatom

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(Cool 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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Alan
Novinec


Pridružen/-a: Sob Sep 2004 16:28
Prispevkov: 9

PrispevekObjavljeno: Sob Sep 25, 2004 8:53 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 555
Kraj: Ljubljana

PrispevekObjavljeno: Ned Sep 26, 2004 11:42 am    Naslov sporočila: temperature Odgovori s citatom

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(Cool - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(Cool : 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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Alan
Novinec


Pridružen/-a: Sob Sep 2004 16:28
Prispevkov: 9

PrispevekObjavljeno: Ned Sep 26, 2004 6:34 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 555
Kraj: Ljubljana

PrispevekObjavljeno: Ned Sep 26, 2004 7:07 pm    Naslov sporočila: temperature Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Alan
Novinec


Pridružen/-a: Sob Sep 2004 16:28
Prispevkov: 9

PrispevekObjavljeno: Ned Sep 26, 2004 10:42 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
rudolf
Mojster


Pridružen/-a: Sre Mar 2004 17:31
Prispevkov: 23
Kraj: Novo mesto

PrispevekObjavljeno: Čet Okt 21, 2004 2:13 pm    Naslov sporočila: Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
kolesar007
Mojster


Pridružen/-a: Čet Jul 2004 9:39
Prispevkov: 22

PrispevekObjavljeno: Sre Nov 10, 2004 12:05 pm    Naslov sporočila: Odgovori s citatom

...a je mogoče kdo testiral na koliko razdalje delujejo DSji?

LP Sandi
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


Pridružen/-a: Ned Jan 2004 16:11
Prispevkov: 555
Kraj: Ljubljana

PrispevekObjavljeno: Sre Nov 10, 2004 7:54 pm    Naslov sporočila: merjenje tem Odgovori s citatom

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
Poglej uporabnikov profil Pošlji zasebno sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo    Kazalo po Svet elektronike forumu -> Digitalna elektronika Časovni pas GMT + 1 ura, srednjeevropski - zimski čas
Stran 1 od 1

 
Pojdi na:  
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