|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
ata Profesionalec
Pridružen/-a: Pon Apr 2004 9:26 Prispevkov: 110
|
Objavljeno: Sob Dec 05, 2009 12:53 pm Naslov sporočila: Problem ds18s20 |
|
|
Ko imam na vodilu samo 1 senzor dela brezhibno ,če pa priklopim dva ds po pravilih mi lcd prikaze pravilno temp do 66st.c.,ko pa temperatura preseze 66st.c je prikaz na lcd 127 st.c pri obeh senzorjih.Ne najdem napake in prosim za predloge kaj narediti.
Nazadnje urejal/a ata Pon Dec 07, 2009 8:13 am; skupaj popravljeno 3 krat |
|
Nazaj na vrh |
|
|
Silvo Profesionalec
Pridružen/-a: Tor Jan 2004 19:06 Prispevkov: 234
|
Objavljeno: Sob Dec 05, 2009 7:26 pm Naslov sporočila: Re: Problem ds18s20 |
|
|
ata je napisal/a: | Ko imam na vodilu samo 1 senzor dela brezhibno ,če pa priklopim dva ds po pravilih mi lcd prikaze pravilno temp do 66st.c.,ko pa temperatura preseze 66st.c je prikaz na lcd 127 st.c pri obeh senzorjih.Ne najdem napake in prosim za predloge kaj narediti.
ata |
Morda ti bo pomagal kdo, s telepatskimi sposobnostmi ali stekleno kroglo.
Ne vemo nič. Kak mikrokontroler je uporabljen... Kako je napisan program... Kako izgleda hardware?
Moje vprašanje - kako naj ti pomagamo? |
|
Nazaj na vrh |
|
|
ata Profesionalec
Pridružen/-a: Pon Apr 2004 9:26 Prispevkov: 110
|
Objavljeno: Sob Dec 05, 2009 9:25 pm Naslov sporočila: |
|
|
Pogledal sem v kristalno kroglo-navodila za ds1820 in problem rešil
ata |
|
Nazaj na vrh |
|
|
fičfirič Profesionalec
Pridružen/-a: Pet Avg 2008 21:58 Prispevkov: 80
|
Objavljeno: Čet Jun 23, 2011 8:14 pm Naslov sporočila: |
|
|
Ima kdo program za branje id-številke teh senzorjev? Sem imel vse programe z tečaja dokler ni šel disk k vragu.... |
|
Nazaj na vrh |
|
|
roberto Mojster
Pridružen/-a: Ned Maj 2005 16:19 Prispevkov: 41
|
Objavljeno: Čet Jun 23, 2011 9:41 pm Naslov sporočila: |
|
|
Koda: | Config 1wire = Portc.7 'use this pin
Dim Ar(8) As Byte , A As Byte , I As Byte
'Ddrd = &B11000000
Config Lcdpin = Pin , Db4 = Porta.3 , Db5 = Porta.2 , Db6 = Porta.1 , Db7 = Porta.0 , E = Porta.4 , Rs = Porta.5
'Config Lcd = 20 * 4
Config Lcd = 16 * 2
Cursor Off Noblink
Cls
Do
'Reset P1.1
'Wait 1
1wreset 'reset the device
1wwrite &H33 'read ROM command
For I = 1 To 8
Ar(i) = 1wread()
'place into array
Next
For I = 1 To 8
' Lcd I
' Lcd ":"
If I = 1 Then
Upperline
Elseif I = 5 Then
Lowerline
End If
Lcd Ar(i);
If I < 8 Then
Lcd ":"
End If
Wait 1
If I = 8 Then
Wait 1
Cls
End If
Next
Loop |
Tole iščeš? |
|
Nazaj na vrh |
|
|
fičfirič Profesionalec
Pridružen/-a: Pet Avg 2008 21:58 Prispevkov: 80
|
Objavljeno: Čet Jun 23, 2011 9:57 pm Naslov sporočila: |
|
|
hvala! |
|
Nazaj na vrh |
|
|
fičfirič Profesionalec
Pridružen/-a: Pet Avg 2008 21:58 Prispevkov: 80
|
Objavljeno: Sob Jun 25, 2011 9:15 am Naslov sporočila: |
|
|
pa program ki bere z dveh ali več senzorjev na vodilu? Nisem ga našel v download kotičku. Lahko tudi z ločenimi vodili.
Hvala |
|
Nazaj na vrh |
|
|
protoncek Profesionalec
Pridružen/-a: Sob Maj 2007 9:25 Prispevkov: 303 Kraj: Mengeš
|
Objavljeno: Pon Jun 27, 2011 7:29 am Naslov sporočila: |
|
|
npr. tole:
(ni moj izdelek, najdeno nekje na netu...):
Koda: | 'merjenje temperature z dvema (ali več) senzorjema
$regfile "m16def.dat"
$crystal = 90000 ' 4MHz
Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Pind.2 , Db5 = Pind.3 , Db6 = Pind.4 , Db7 = Pind.5 , E = Pind.1 , Rs = Pind.0
Config 1wire = Portc.0
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(9) As Byte
Do
Srno1
Temperature
Locate 1 , 1 : Lcd "Notri: "
Tn = T4
Lcd T 'vpis celega dela
Lcd Chr(46) 'vpis pike
Lcd T1 'vpis decimalnega
Lcd " " ; Chr(223) 'vpis stopinj
Lcd "C"
If Err = 1 Then 'ce ni senzorja
Locate 1 , 3 : Lcd "-- " 'je na LCDju "-- "
End If 'izpis praznega prostora
Srno2
Temperature
Locate 2 , 1 : Lcd "Zunaj: "
Tz = T4
Lcd T
Lcd Chr(46)
Lcd T1
Lcd " " ; Chr(223)
Lcd "C"
If Err = 1 Then 'ce ni senzorja
Locate 2 , 3 : Lcd "-- " 'je na LCDju "-- "
End If
Loop
'podprogrami
Sub Srno1 'branje adrese 1
For I = 1 To 8
Ar(i) = Lookup(i , Dta1)
Next
End Sub
Sub Srno2 'branje adrese 2
For I = 1 To 8
Ar(i) = Lookup(i , Dta2)
Next
End Sub
Dta1: 'naslov 1 Dallasa
Data 0 , 16 , 173 , 198 , 245 , 1 , 8 , 0 , 126
Dta2: 'naslov 2 Dallasa
Data 0 , 16 , 151 , 196 , 245 , 1 , 8 , 0 , 223
Sub Temperature 'merjenje temperature
1wreset
1wwrite &H55
1wwrite Ar(1) , 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
1wwrite Ar(1) , 8
1wwrite &HBE
Bd(1) = 1wread(9)
1wreset
Tmp = Bd(1) And 1
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(8) - Bd(7) : T1 = T1 * 100
T1 = T1 / Bd(8) : T = T + T1 : T = T / 10
T1 = T
T = T / 10
T2 = T * 10
T1 = T1 - T2
T1 = Abs(t1)
End Sub |
_________________ http://www.protoncek.com |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Tor Jun 28, 2011 12:03 pm Naslov sporočila: |
|
|
Spravljanje id-e termometrov v program je lahko mučna zadeva.
Potem je potrebno en termometer zamenjati, pa je spet potrebno ponovno popravljati program.
To me je žulilo, pa sem naredil bascom programsko vejo, ki se vgrati v program kmalu po startu. Le ta naredi sledeče:
Po vsakem startu preveri prisotnost vseh termometrov, katerih id ima v eramu. Če je vse v redu, gre naprej, če pa ne, potem
zahteva odklop vseh termometrov, in potem
priklop vsakega termometra posebej, kjer rutina določa zaporedje priklapljanja, in tako ve, kakšno temperaturo bo meril (zunanjo, notranjo, bojlerja, ..) termometer, ki ga ravnokar priklapljamo.
Program in spremni tekst sta bila objavljena na internetni reviji Elektronik.si. številka 8
Gre pa za sledečo kodo:
Koda: | ' Program najprej ugotavlja, ali so vsi termometri, katerih
' id-e ima v eepromu, dostopni, in če ne, gre v postopek
' zajemanja identitet termometrov.
' Minipin, Mega 32 1 wire na
Const Program = "zajterm8"
$regfile = "m32def.dat"
$crystal = 11059200
$hwstack = 256
$swstack = 128
$framesize = 128
Dim Reg14 As Iram Byte At 14 Overlay 'register 14
Dim I As Byte 'splošne delovne spremenljivke
Dim J As Byte
Dim K As Byte
Dim L As Byte
Dim M As Byte
Dim W As Integer
Dim Dniz As String * 32 ' delovni niz
Open "comc.7:9600,8,n,1" For Output As #2
Print #2 , Program ; " reset "
Config 1wire = Pind.0
Const Nterms = 3 ' število termometrov
Const Xx = Nterms * 8
Dim Dummy As Eram Byte ' vsak termid je dolg 8
Dim Termids(xx) As Eram Byte
Dim Scratchpad(9) As Byte
Dim Temperatura As Integer At Scratchpad(1) Overlay
' izpis vsebine Termids(xx)
For J = 1 To Xx
K = Termids(j)
Print #2 , Hex(k);
Next
Print #2 , " "
' Najprej preverjanje, ali so morda termometri že montirani in v redu
For I = 1 To Nterms
Gosub Fromtermid
1wverify Scratchpad(1)
If Err = 1 Then Exit For
Next
If Err = 0 Then
Print #2 , "Termometri preverjeni in v redu "
Else
Print #2 , " Gremo v postopek registracije termometrov "
Do
W = 1wirecount()
Print #2 , " Izklopi vse termometre Vklopljenih je " ; W
Wait 3
Loop Until W = 0
' brišem termids na 255:
J = Nterms * 8
For I = 1 To J : Termids(i) = 255 : Next
For I = 1 To Nterms
Do
W = 1wirecount()
Dniz = Lookupstr(i , Termometri)
Print #2 , " Vklopi termometer " ; Dniz ; ; I
Wait 3
Loop Until W = I
If I = 1 Then
Scratchpad(1) = 1wsearchfirst()
If Crc8(scratchpad(1) , 8) = 0 Then
Print #2 , " CRC8 OK"
Else
Print #2 , " CRC8 NOK - abort - konec."
End
End If
Gosub Totermid
Else
J = I
For I = 1 To J
If I = 1 Then
Scratchpad(1) = 1wsearchfirst()
Else
Scratchpad(1) = 1wsearchnext()
End If
If Crc8(scratchpad(1) , 8) = 0 Then
Print #2 , " CRC8 OK"
Else
Print #2 , " CRC8 NOK - abort - konec."
End
End If
Gosub Eqtoany
If Err = 1 Then Exit For
Next
I = J
If Err = 1 Then Gosub Totermid
End If
Next
' izpis vsebine Termids(xx) varianta 1
For J = 1 To Xx
K = Termids(j)
Print #2 , Hex(k) ; : Next
Print #2 , " "
End If
End
' Namesto end, nadaljevanja programa ...
Termometri:
Data "nulti tekst" , "vhoda v bojler " , "izhoda iz bojlerja " , "kolektorja "
Totermid:
Push R14
Reg14 = I : Push R14
Reg14 = J : Push R14
Reg14 = K : Push R14
' move termid to place
' Prenese termid iz Scrathcpad na i-to mesto, i = parameter
K = I - 1
K = K * 8
K = K + 1
For J = 1 To 8
Termids(k) = Scratchpad(j)
Incr K
Next
Pop r14 : K = Reg14
pop R14 : J = Reg14
Pop r14 : I = Reg14
Pop r14
Return
Fromtermid:
Push R14
Reg14 = I : Push R14
Reg14 = J : Push R14
Reg14 = K : Push R14
' move from termid to Scratchpad
' Prenese termid v Scrathcpad iz i-tega mesta, i = parameter
K = I - 1
K = K * 8
K = K + 1
For J = 1 To 8
Scratchpad(j) = Termids(k)
Incr K
Next
Pop r14 : K = Reg14
pop R14 : J = Reg14
Pop r14 : I = Reg14
Pop r14
Return
Eqtermid:
Push R14
Reg14 = I : Push R14
Reg14 = J : Push R14
Reg14 = K : Push R14
' check termid(i) to Scratchpad
' Primerja vsebino v Scrathcpad z i-tim mestom, i = parameter
' err = 1 neenako
' err = 0 enakost
K = I - 1
K = K * 8
K = K + 1
Err = 0
For J = 1 To 8
If Scratchpad(j) <> Termids(k) Then Set Err
Incr K
Next
Pop r14 : K = Reg14
pop R14 : J = Reg14
Pop r14 : I = Reg14
Pop r14
Return
Eqtoany:
Push R14
Reg14 = I : Push R14
Reg14 = J : Push R14
Reg14 = K : Push R14
' Podprogram daje err = 0 če je vsebina scratchpada enaka vsaj enemu in
' termide-jev v tabeli.
Dim Errany As Bit
Errany = 1
For I = 1 To Nterms
Gosub Eqtermid
If Err = 0 Then Errany = 0
Next
Err = Errany
Pop r14 : K = Reg14
pop R14 : J = Reg14
Pop r14 : I = Reg14
Pop r14
Return
|
|
|
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
|