|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
Pobesneli Član
Pridružen-a: Sre 02 Jan 2008 1:24 Prispevkov: 1070 Aktiv.: 5.39 Kraj: Ajdovščina
|
Objavljeno: Čet Sep 16, 2010 8:17 pm Naslov sporočila: DS18B20 v bascom avr |
|
|
Pozdravljeni!
Ima kdo slučajno napisan kakšen program za merjenje temperature s tem senzorjem?
Malce se mi mudi, pa ne bi rad tople vode izumljal. Ni pa to za kakšno šolo, rabim za hobi mudi se mi pa zato ker mi gre dopust h koncu in bi nekaj rad naredil
Ima kdo kakšen link, kjer je razložen postopek merjenjena z senzorji ds18X20 v bascom? kakšen del kode z komentarji ali kaj podobnega. |
|
Nazaj na vrh |
|
|
kose19 Član
Pridružen-a: Sre 02 Mar 2005 19:37 Prispevkov: 1228 Aktiv.: 5.51 Kraj: okolica Kobarida
|
Objavljeno: Čet Sep 16, 2010 9:04 pm Naslov sporočila: |
|
|
to je na hitro
Koda: |
For I = 1 To 8
Ar(i) = Lookup(i , Dta3)
Next 'branje kode za senzor 3
I = 1
1wreset
1wwrite &H55
1wwrite Ar(1) , 8
1wwrite &H44
1wreset
1wwrite &H55
1wwrite Ar(1) , 8
1wwrite &HBE
Bd(1) = 1wread(9)
1wreset
T = Makeint(bd(1) , Bd(2))
Tz = T / 16
T1 = Tz * 16
T2 = T - T1
T3 = T2 * 100
Tz1 = T3 / 16 |
kodo senzorja vpiši v tabelo _________________ - Absens, carens -
- Tisti, ki ga ni, bo prikrajšan - |
|
Nazaj na vrh |
|
|
Pobesneli Član
Pridružen-a: Sre 02 Jan 2008 1:24 Prispevkov: 1070 Aktiv.: 5.39 Kraj: Ajdovščina
|
Objavljeno: Pet Sep 17, 2010 8:15 pm Naslov sporočila: |
|
|
Kje je razlika v branju temperature med DS1820 in DS18B20? |
|
Nazaj na vrh |
|
|
Profesor Einstein Član
Pridružen-a: Ned 24 Sep 2006 0:13 Prispevkov: 1423 Aktiv.: 6.65 Kraj: Rogaška Sl.
|
Objavljeno: Sob Sep 18, 2010 12:17 am Naslov sporočila: |
|
|
Za natančno analizo dogajanja bo potrebno proučiti datasheet in malo potestirati flow chart ki je priložen
Lp.
Darko _________________ --
"Če bi volitve kaj pomagale, bi jih prepovedali." (Mark Twain) |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.03 Kraj: Dragomer
|
Objavljeno: Sob Sep 18, 2010 9:12 am Naslov sporočila: |
|
|
Pobesneli je napisal/a: |
Kje je razlika v branju temperature med DS1820 in DS18B20? |
Razlika je le, če hočeš meritev na desetinko stopinje natančno. Sicer ti ti termometri dajo podatek v 'polovičkah' stopinje v integer obliki (dva bajta s predznakom). Če ti je ta natančnost dovolj, potem sta v tem oba termometra enaka. |
|
Nazaj na vrh |
|
|
Pobesneli Član
Pridružen-a: Sre 02 Jan 2008 1:24 Prispevkov: 1070 Aktiv.: 5.39 Kraj: Ajdovščina
|
Objavljeno: Sob Sep 18, 2010 9:41 am Naslov sporočila: |
|
|
Nekaj mi je uspelo spravit skupaj, temperatura mi zgleda na lcdju dokaj realna, moram pa še danes z nečim primerjat.
Če že imam možnost na 0,1 stopinje natančnosti jo bom poskusil, sedaj moram ugotovit kako naredit 0,1 stopinje z DS1820, nekje sem prebral da se da z programom do doseči. |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.03 Kraj: Dragomer
|
Objavljeno: Sob Sep 18, 2010 10:04 am Naslov sporočila: |
|
|
Pobesneli je napisal/a: |
Če že imam možnost na 0,1 stopinje natančnosti jo bom poskusil, sedaj moram ugotovit kako naredit 0,1 stopinje z DS1820, nekje sem prebral da se da z programom do doseči. |
Točno, in ravno v tem detajlu se oba termometra razlikujeta.
Težko si predstavljam aplikacijo, kjer je potrebna tolikšna natančnost. No, ja, če že ne meriš telesne temperature in po tem sklepaš o zdravju človeka.. |
|
Nazaj na vrh |
|
|
Pobesneli Član
Pridružen-a: Sre 02 Jan 2008 1:24 Prispevkov: 1070 Aktiv.: 5.39 Kraj: Ajdovščina
|
Objavljeno: Sob Sep 18, 2010 10:16 am Naslov sporočila: |
|
|
Pravzaprav se deloma tudi učim, tako da 0,1 stopinje ni zahteva, ampak le želja po tem da se nekaj naučim |
|
Nazaj na vrh |
|
|
vilko Član
Pridružen-a: Pet 13 Feb 2004 10:26 Prispevkov: 3351 Aktiv.: 15.03 Kraj: Dragomer
|
Objavljeno: Sob Sep 18, 2010 9:01 pm Naslov sporočila: |
|
|
To sem nekje našel, verjetno dela, nisem probal. Je pa pisano kot funkcija, ki jo pokličeš, ko si prebral odgovor termometra v Sc(od 1 do 9)
Koda: |
'(
Function Decigrades(byval Sc(9) As Byte)
Dim Tmp As Byte , T As Integer , T1 As Integer
Tmp = Sc(1) And 1 ' 0.1C precision
If Tmp = 1 Then Decr Sc(1)
T = Makeint(sc(1) , Sc(2))
'Print Hex(t)
'Print T
T = T * 50 'here we calculate the 1/10 precision like
T = T - 25 'DS18S20 data sheet
T1 = Sc(8) - Sc(7)
T1 = T1 * 100
T1 = T1 / Sc(8)
T = T + T1
Decigrades = T / 10
'As integer, this routine gives T*10, with 1/10 degree precision
End Function
')
|
|
|
Nazaj na vrh |
|
|
HeBird Član
Pridružen-a: Ned 16 Avg 2009 16:36 Prispevkov: 79 Aktiv.: 0.44 Kraj: Domžale
|
Objavljeno: Tor Apr 30, 2013 1:46 pm Naslov sporočila: |
|
|
Pozdravljeni,
mi je kar nerodno pisat, ker je tako veliko tem na forumu in drugje na internetu o branju podatka temperature s tega čipa. Vseeno vas prosim za pomoč.
Imam senzor DS18B20 in mikrokontroler ATmega16A PU 1224. Temperaturo bi prikazoval prek USART in USB na PC v programu Terminal. Senzor napajam posebej s 5V, zaporedno z DQ imam vezan 4,7k upor na napajanje. Komunikacija med mikrokrmilnikom in PC dela, med senzorjem in mikrokrmilnikom pa očitno ne, saj mi Terminal izpiše Error 1.
Slike vezave, fuse bitov in izpisa na terminalu sem uploadal na File Manager, vendar ne znam pripeti na forum albuma, ali pa ne morem, ker nisem aktiven uporabnik. Slike so tukaj: http://www.elektronik.si/phpATM/index.php?&direction=0&order=&directory=DS18B20%20Atmega16A%20Problem
Če naložim kodo:
Koda: |
$regfile = "M16DEF.DAT" 'Atmega16
$crystal = 8000000
Config Com1 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'PC
'when only bytes are used, use the following lib for smaller code
$lib "mcsbyte.lib"
Config 1wire = Portb.0 'use this pin
Dim Ar(8) As Byte , I As Byte
Do
Wait 1
1wreset 'reset the device
Print Err 'print error 1 if error
1wwrite &H33 'read ROM command
For I = 1 To 8
Ar(i) = 1wread() 'place into array
Next
For I = 1 To 8
Print Hex(ar(i)); 'print output
Next
Loop |
Tukaj mi terminal izpisuje
Citiram: |
1
FFFFFFFFFFFFFFFF |
Če naložim kodo:
Koda: |
$regfile = "M16DEF.DAT" 'Atmega16
$crystal = 8000000
Config Com1 = 38400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 'PC
Config 1wire = Portb.0 'use this pin
Dim T As Integer
'////////////////////////Glavni program/////////////////////////////////////////
Do
1wreset
Print Err
1wwrite &HCC 'skip ROM – velja za vse, ki ste na liniji
1wwrite &H44 'merite temperaturo
Wait 2 'dajem vam čas za merjenje
1wreset 'reset
Print Err
1wwrite &HCC 'skip ROM – velja za vse, a je samo eden na liniji
1wwrite &HBE 'dajte podatke
T = 1wread(2)
Print T 'Beremo podatke, prva dva bajta sta temperatura
' T je tipa integer
Print "USART OK"
Loop
'///////////////////////////////////////////////////////////////////////////////
End |
Tukaj mi Terminal izpisuje:
Torej vedno mi piše napako "Unknown statement". Tudi ni mi jasno, zakaj mi v drugem primeru programa napiše za temperaturo "-1". Pri nekem tretjem in četrtem primeru programa mi pa napiše "0". Res sem izgubljen. _________________ Gašper |
|
Nazaj na vrh |
|
|
mucek Član
Pridružen-a: Tor 01 Avg 2006 10:47 Prispevkov: 5337 Aktiv.: 24.73 Kraj: Domzale
|
Objavljeno: Tor Apr 30, 2013 2:59 pm Naslov sporočila: |
|
|
Hmm, ne vem če gre tako enostavno ... Kje pa je konverzija, branje IDja itd?
Poskusi s spodnjo kodo. Je sicer za LCD, ne terminal, ampak boš že spremenil ...
LP, g
Koda: |
'Konfiguracija za temperaturni senzor
Declare Sub Convallt 'Preračun temperature
Declare Function Decigrades(byval Sc(9) As Byte) As Integer
Config 1wire = Portc.0 'DS1820 imamo priklopljen na PC.0
'Temp spremenljivke
Dim B As Byte
Dim W As Word
'Spremenljivke
Dim Dg As Integer 'DECIgrades, I call it, cause I have no space for commas on the display...
Dim Dsid1(8) As Byte 'Dallas ID 64 bits incl CRC
Dim Dsid2(8) As Byte
Dim Sc(9) As Byte 'Scratchpad 0-8 72 bits incl CRC, explanations for DS18b20
'Zacetek
Cls
Cursor Off
W = 1wirecount()
Dsid1(1) = 1wsearchfirst()
'Berem ID senzorja; če se izpišejo same ničle, senzor ni priklopljen (pravilno...)
If Dsid1(8) = Crc8(dsid1(1) , 7) Then
Locate 1 , 1
Lcd "CRC1 OK"
Wait 1
Locate 2 , 1
For B = 1 To 8
Lcd Hex(dsid1(b))
Next
End If
Wait 1
Cls
' Glavna zanka
'**************************** M A I N ******************************************
Do
Convallt
1wverify Dsid1(1)
If Err = 1 Then
Lcd "Err1" 'Err = 1 če senzorja ni
Elseif Err = 0 Then
1wwrite &HBE
Sc(1) = 1wread(9) 'berem podatkovne bite s senzorja v array
If Sc(9) = Crc8(sc(1) , 8) Then
Dg = Decigrades(sc(9))
End If
Lcd Dg : Lcd Chr(223) 'Pri mojem LCDju je to znak za stopinje; mogoče boš moral narediti sam preko Tools -> LCD designer
End If
Loop
End
'*************************** M A I N E N D ***********************************
'---------------------------------Podprogrami-----------------------------------
Sub Convallt
1wreset
1wwrite &HCC
1wwrite &H44
End Sub
Function Decigrades(byval Sc(9) As Byte)
Dim Tmp As Byte , T As Integer , T1 As Integer
Tmp = Sc(1) And 1
If Tmp = 1 Then Decr Sc(1)
T = Makeint(sc(1) , Sc(2))
'Print Hex(t)
'Print T
T = T * 50 'računamo na desetinko stopinje natančno
T = T - 25
T1 = Sc(8) - Sc(7)
T1 = T1 * 100
T1 = T1 / Sc(8)
T = T + T1
Decigrades = T / 10 'Tu nastavimo natančnost izpisa; 1/10 nam vrne natančnost na 0,1 stopinje, 1/100 pa na 1 stopinjo
End Function
|
_________________ ...lahko pa se tudi motim ... |
|
Nazaj na vrh |
|
|
HeBird Član
Pridružen-a: Ned 16 Avg 2009 16:36 Prispevkov: 79 Aktiv.: 0.44 Kraj: Domžale
|
Objavljeno: Tor Apr 30, 2013 6:10 pm Naslov sporočila: |
|
|
Hvala mucek, ampak spet error.
Trenutno imam mego na testni plošči minipin2, bom probal dati na protoboard in izpisovat na LCDju; mogoče ledica, ki se prižiga pri komunikaciji kaj zmoti časovne intervale. _________________ Gašper |
|
Nazaj na vrh |
|
|
HeBird Član
Pridružen-a: Ned 16 Avg 2009 16:36 Prispevkov: 79 Aktiv.: 0.44 Kraj: Domžale
|
Objavljeno: Tor Apr 30, 2013 10:23 pm Naslov sporočila: |
|
|
1 teden se že ukvarjam s tem in ne vem, kako se nisem prej spomnil tega, kar sem napisal.
ATmego sem dal dol z minipina2 na protoboard in izpisoval na LCD. Merjenje temperature sedaj dela že s prvim programom (saj uporabljam samo 1 senzor).
Očitno je povezavo s čipom nekaj motilo, ne vem pa kaj. _________________ Gašper |
|
Nazaj na vrh |
|
|
MadMax Član
Pridružen-a: Pet 09 Sep 2005 22:16 Prispevkov: 4743 Aktiv.: 21.28
|
Objavljeno: Tor Apr 30, 2013 10:29 pm Naslov sporočila: |
|
|
Iz slik ni razvidno, imam pa občutek, da si z napajanji urejal bolj po šalabajzersko.
Minipin prek USBja iz PCja, DS prek ločenega usmernika. Skupna masa je pa kaj? Ozemljitev PCja in napajalnika? Ker vidim samo eno žico iz DS na Minipin. Šalabajz.
A DS vtaknit v predvideno mesto na minipin (in seveda ustrezno popravit program) pa nisi probal?
Pa ledice na minipin se tudi enostavno odklopi... |
|
Nazaj na vrh |
|
|
HeBird Član
Pridružen-a: Ned 16 Avg 2009 16:36 Prispevkov: 79 Aktiv.: 0.44 Kraj: Domžale
|
Objavljeno: Tor Apr 30, 2013 10:54 pm Naslov sporočila: |
|
|
MAdMax imaš prav glede vezave. PC in usmernik sta iz iste vtičnice oziroma razdelilca, pa sem mislil, da so potenciali potem isti.
Da, sedaj v končni fazi sem dal senzor v 1-wire priključke na minipinu in dela. Zakaj nisem prej tega naredil - ne vem, nikoli prej nisem tega uporabljal in delal, pa se mi je zdelo komplicirano.
Ledice sem izklopil, rezultat je bil podoben; brez veljavne temperature, ne pa isti. Pri branju ROM kode mi je enkrat kazal 16xF, drugič 16x0. _________________ Gašper |
|
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 Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 74 dni
Powered by phpBB © 2001, 2005 phpBB Group
|