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 

3x DS1820

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


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Sre Jan 09, 2013 9:50 pm    Naslov sporočila: 3x DS1820 Odgovori s citatom

Imam naslednjo kodo s kadero berem tri senzorje DS1820 vsakega na sojem pinu, kot ste mi svetovali. Težava se mi pojavi, ker je pri meritvi potreben waitms 600 ukaz . Zraven temperatur prikazujem na LCD_ju še čas s sekundami, vendar mi zaradi teh zakasnitem ne prikazuje lepo tekoče sekund, ampak vsako drugo sekundo. Se da kaj tukaj naredit?

Meritev_temp1:
1wwrite &HCC , 1 , Pina , 5
1wwrite &H44 , 1 , Pina , 5
Waitms 600
Gosub Read1820_1
If Err = 1 Then
Locate 2 , 1 : Lcd "T1: " ; "NO SENSOR "
Else
Locate 2 , 1 : Lcd "T1: " ; T1_1 ; Chr(0) ; "C" ; " "
End If
Return
'-------------------------------------------------------------------------------
Meritev_temp2:
1wwrite &HCC , 1 , Pina , 6
1wwrite &H44 , 1 , Pina , 6
Waitms 600
Gosub Read1820_2
If Err = 1 Then
Locate 3 , 1 : Lcd "T2: " ; "NO SENSOR "
Else
Locate 3 , 1 : Lcd "T2: " ; T2_1 ; Chr(0) ; "C" ; " "
End If
Return
'-------------------------------------------------------------------------------
Meritev_temp3:
1wwrite &HCC , 1 , Pinb , 0
1wwrite &H44 , 1 , Pinb , 0
Waitms 600
Gosub Read1820_3
If Err = 1 Then
Locate 4 , 1 : Lcd "T3: " ; "NO SENSOR "
Else
Locate 4 , 1 : Lcd "T3: " ; T3_1 ; Chr(0) ; "C" ; " "
End If
Return
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Vlado
Profesionalec


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

PrispevekObjavljeno: Čet Jan 10, 2013 9:17 am    Naslov sporočila: Odgovori s citatom

Boštjan,
zakaj pa izvajaš meritve tako pogosto?
Če že imaš uro, meritev lahko izvedeš poljubno, recimo enkrat v minuti.

If _sec=0 then 'predvidevam da uporabljaš RTC
GoSub meritev
'prikaži na LCD
end if

druga stvar, ni ti potrebno za vsak senzor čakati 600ms, pošlješ ukaze vsem senzorjem, počakaš 600ms, prebereš vse senzorje in obdelaš podatek.

Zdi se mi, nisem pa prepričan da ni potrebe po čakanju pri pretvorbi ča imaš napajanje na senzorjih, ne pa parazitno napajanje.
LP
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
vilko
Profesionalec


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

PrispevekObjavljeno: Čet Jan 10, 2013 11:18 am    Naslov sporočila: Odgovori s citatom

Jaz to delam tako:

V sekundi 1 startam pripravo na branje temperature na vseh termometrih (8)
na pinih od C.0 do C.7

Koda:
      If Sekunde = 1 Then
         '  vsako prvo sekundo minute:
         '  zahtevamo convert temperature v vseh termometrih
         Disable Interrupts
         For I = 0 To 7
            1wreset Pinc , I
            1wwrite &HCC , 1 , Pinc , I                     'skip ROM
            1wwrite &H44 , 1 , Pinc , I                     'convert temperature
            1wreset Pinc , I
         Next
          Enable Interrupts
      End If                                                ' konec sekunde 1

Potem pa čez eno sekundo preberem vse temperature:

Koda:
      If Sekunde = 2 Then
      ' vsako drugo sekundo minute
      ' odčitamo temperature:

'Dim Tzz As Integer                                          'C0 Temp. zunanjega zraka
'Dim Tsv As Integer                                          'C1 Temp. sanitarne vode
'Dim Tko As Integer                                          'C2 Temp. kotlovske vode
'Dim Trv1 As Integer                                         'C3 Temp. radiatorske vode, izhod mešalnega ventila
'Dim Tpv1 As Integer                                         'C4 Temp. povratne vode  sistema 1
'Dim Trv2 As Integer                                         'C5 Temp. radiatorske vode, izhod mešalnega ventila
'Dim Tpv2 As Integer                                         'C6 Temp. povratne vode  sistema 2
'Dim Tso1 As Integer                                         'C7 Temp. sobna - notranji termometer  sistem 1
'Dim Trmtrierr As Bit                                        ' Termometri error bit
'Dim Trmtrierrcnt As Byte                                    ' Termometri števec sekund do naslednjega SMS alarma

          Trmtrierr = 0
          For I = 0 To 7
                   Disable Interrupts
                   1wreset Pinc , I
                   1wwrite &HCC , 1 , Pinc , I              ' skip rom
                   1wwrite &HBE , 1 , Pinc , I              ' READ Scratchpad
                   Scratchpad(1) = 1wread(9 , Pinc , I )
                   1wreset Pinc , I
                   Enable Interrupts
                   K = 0 : For J = 1 To 9 : K = K + Scratchpad(j) : Next       ' če so same nule
                   If K = 0 Then Temperatura = 200

                   ' Ds18x20:
                   ' vhodni podatki so v Termometer(9) tipa bajt,
                   ' izhod v Temperatura tipa Integer v desetinkah stopinje C
                   W = Makeint(scratchpad(1) , Scratchpad(2))
                   If Scratchpad(5) = &H7F Then
                      ' za termometer DS18B20
                      W = W * 10
                      W = W / 16
                   Else
                      ' za ostala dva tipa termometrov
                      W = W * 5
                   End If
                   ' end of ds18x20
                   ' temperaturo zaokrožim na cele stopinje
                   W = W + 5
                   W = W / 10

                   If Crc8(scratchpad(1) , 9 ) <> 0 Then W = 200       ' temperatura 200C pomeni napaka

                    J = I + 1
                   Tarr(j) = W
          Next
   


Je koda kaj v pomoč?

Ker ti verjetno nimaš programirane ure, ki ti daje sekunde, kot jaz, enostavno med prvo in drugo kodo vstavi wait 1
Nazaj na vrh
Poglej uporabnikov profil Pošlji zasebno sporočilo
Boštjan
Profesionalec


Pridružen/-a: Tor Mar 2004 22:48
Prispevkov: 100

PrispevekObjavljeno: Sre Feb 06, 2013 6:48 pm    Naslov sporočila: hvala Odgovori s citatom

Ja odlično deluje OK
Hvala lepa
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