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 

Problem ds18s20

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


Pridružen/-a: Pon Apr 2004 9:26
Prispevkov: 110

PrispevekObjavljeno: Sob Dec 05, 2009 12:53 pm    Naslov sporočila: Problem ds18s20 Odgovori s citatom

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


Pridružen/-a: Tor Jan 2004 19:06
Prispevkov: 234

PrispevekObjavljeno: Sob Dec 05, 2009 7:26 pm    Naslov sporočila: Re: Problem ds18s20 Odgovori s citatom

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. Sad

Ne vemo nič. Kak mikrokontroler je uporabljen... Kako je napisan program... Kako izgleda hardware?

Moje vprašanje - kako naj ti pomagamo?
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
ata
Profesionalec


Pridružen/-a: Pon Apr 2004 9:26
Prispevkov: 110

PrispevekObjavljeno: Sob Dec 05, 2009 9:25 pm    Naslov sporočila: Odgovori s citatom

Pogledal sem v kristalno kroglo-navodila za ds1820 in problem rešil
ata
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
fičfirič
Profesionalec


Pridružen/-a: Pet Avg 2008 21:58
Prispevkov: 80

PrispevekObjavljeno: Čet Jun 23, 2011 8:14 pm    Naslov sporočila: Odgovori s citatom

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


Pridružen/-a: Ned Maj 2005 16:19
Prispevkov: 41

PrispevekObjavljeno: Čet Jun 23, 2011 9:41 pm    Naslov sporočila: Odgovori s citatom

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


Pridružen/-a: Pet Avg 2008 21:58
Prispevkov: 80

PrispevekObjavljeno: Čet Jun 23, 2011 9:57 pm    Naslov sporočila: Odgovori s citatom

hvala!
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
fičfirič
Profesionalec


Pridružen/-a: Pet Avg 2008 21:58
Prispevkov: 80

PrispevekObjavljeno: Sob Jun 25, 2011 9:15 am    Naslov sporočila: Odgovori s citatom

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


Pridružen/-a: Sob Maj 2007 9:25
Prispevkov: 303
Kraj: Mengeš

PrispevekObjavljeno: Pon Jun 27, 2011 7:29 am    Naslov sporočila: Odgovori s citatom

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


Pridružen/-a: Pon Jan 2004 11:54
Prispevkov: 807
Kraj: Ljubljana

PrispevekObjavljeno: Tor Jun 28, 2011 12:03 pm    Naslov sporočila: Odgovori s citatom

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
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