- Akku Tests und Balkonkraftwerk Speicher         
Seite 3 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 21 bis 30 von 37

Thema: 4 Stück DS1820 auslesen und anzeigen mit BASCOM

  1. #21
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2004
    Beiträge
    101
    Anzeige

    Powerstation Test
    Jetzt hab ich auch eine Temperatur.
    Habe das Beispiel von for_ro genommen und einfach nur meine Daten eingegeben.

    Ich bräuchte aber die Temperatur in 0.1 Schritten !
    Harman Kardon HTPC
    Bild hier  

  2. #22
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Nimm einfach das Beispiel von Gestern auf dieser Seite das mir for_ro geschickt hat.
    Ganz am Schluß sind IDs, die du gegen deine austauschen mußt.
    Allerdings kann ich dir nicht groß weiter helfen wenns nicht gehen sollte.
    Ich blicke selbst noch nicht durch und bin immer noch am Grübeln wie er das gemacht hat.
    Es funzt aber bis auf eine Kleinigkeit. In der letzten Zeile bei T4 wird
    T4= 23 CC angezeigt. Da ist ein C zuviel. Sonst ists wunderbar.
    Gruß
    Hans

  3. #23
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Suche mal hier im Forum "DS1820". Da gibts einige Beispiele mit 1/2 Grad und mit 1/10 Grad. Da mußt du dir den Teil einfach dazukopieren.
    Da die Dinger aber nicht so genau sind und es eigentlich auf ein Grad Hin oder her nicht ankommt ist es mir Wurscht.

  4. #24
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2004
    Beiträge
    101
    Hallo,

    meine Sache läuft mit 4 Sensoren und 0.1Grad

    Was mich nur stört sind die ganzen waitms.

    Momentan lasse ich alle 5 sec. die 4 Sensoren hintereinander auslesen und dann wird mir der Wert ausgegeben.
    Nur wenn ich die 4 Dinger hintereinander auslese steht mein Programm wegen den waitms so ca. 3 sec und ich kann nichts weiter machen.(Menü durchblättern usw.)

    Kann man das nicht anders lösen?
    Müssen die ganzen waitms da hin?

    Hier mal mein Ausschnitt der auf meinem Steckbrett läuft:

    Code:
    $regfile = "m32def.dat"
    $crystal = 8000000
    
    Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.4 , Db7 = Portd.3 , E = Portb.7 , Rs = Portb.6
    Config Lcd = 16 * 2
    Config Lcdbus = 4
    Cursor Off
    Cls
    
    Config 1wire = Portc.5
    
    Dim T As Integer
    Dim T1 As Integer
    Dim T2 As Integer
    Dim T3 As Integer
    Dim T4 As String * 10
    Dim T5 As String * 10
    Dim T6 As Single
    Dim T7 As Single
    Dim Id1(8) As Byte
    Dim Id2(8) As Byte
    Dim Ar1(9) As Byte
    Dim Ar2(9) As Byte
    Dim I As Byte , Tmp As Byte , Tmp2 As Byte
    
    Dim 1t As Integer
    Dim 1t1 As Integer
    Dim 1t2 As Integer
    Dim 1t3 As Integer
    Dim 1t4 As String * 10
    Dim 1t5 As String * 10
    Dim 1t6 As Single
    Dim 1t7 As Single
    Dim Id3(8) As Byte
    Dim Id4(8) As Byte
    Dim 1ar1(9) As Byte
    Dim 1ar2(9) As Byte
    Dim 1i As Byte , 1tmp As Byte , 1tmp2 As Byte
    
    Id1(1) = 1wsearchfirst()
    Id2(1) = 1wsearchnext()
    Id3(1) = 1wsearchnext()
    Id4(1) = 1wsearchnext()
    
    
    Do
    1wreset
    1wwrite &H55
    1wwrite Id1(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id1(1) , 8
    1wwrite &HBE
    Ar1(1) = 1wread(9)
    1wreset
          Tmp = Ar1(1) And 1
          If Tmp = 1 Then Decr Ar1(1)
          T = Makeint(ar1(1) , Ar1(2))
          T = T * 50
          T = T - 25
          T1 = Ar1(8) - Ar1(7)
          T1 = T1 * 100
          T1 = T1 / Ar1(8)
          T = T + T1
          T = T / 10
          T6 = T / 10
          T4 = Fusing(t6 , "#.#")
    
    Waitms 500
    1wreset
    1wwrite &H55
    1wwrite Id2(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id2(1) , 8
    1wwrite &HBE
    Ar2(1) = 1wread(9)
    1wreset
          Tmp2 = Ar2(1) And 1
          If Tmp2 = 1 Then Decr Ar2(1)
          T2 = Makeint(ar2(1) , Ar2(2))
          T2 = T2 * 50
          T2 = T2 - 25
          T3 = Ar2(8) - Ar2(7)
          T3 = T3 * 100
          T3 = T3 / Ar2(8)
          T2 = T2 + T3
          T2 = T2 / 10
          T7 = T2 / 10
          T5 = Fusing(t7 , "#.#")
    
    
    
    1wreset
    1wwrite &H55
    1wwrite Id3(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id3(1) , 8
    1wwrite &HBE
    1ar1(1) = 1wread(9)
    1wreset
          1tmp = 1ar1(1) And 1
          If 1tmp = 1 Then Decr 1ar1(1)
          1t = Makeint(1ar1(1) , 1ar1(2))
          1t = 1t * 50
          1t = 1t - 25
          1t1 = 1ar1(8) - 1ar1(7)
          1t1 = 1t1 * 100
          1t1 = 1t1 / 1ar1(8)
          1t = 1t + 1t1
          1t = 1t / 10
          1t6 = 1t / 10
          1t4 = Fusing(1t6 , "#.#")
    
    Waitms 500
    1wreset
    1wwrite &H55
    1wwrite Id4(1) , 8
    1wwrite &H44
    
    Waitms 300
    1wreset
    1wwrite &H55
    1wwrite Id4(1) , 8
    1wwrite &HBE
    1ar2(1) = 1wread(9)
    1wreset
          1tmp2 = 1ar2(1) And 1
          If 1tmp2 = 1 Then Decr 1ar2(1)
          1t2 = Makeint(1ar2(1) , 1ar2(2))
          1t2 = 1t2 * 50
          1t2 = 1t2 - 25
          1t3 = 1ar2(8) - 1ar2(7)
          1t3 = 1t3 * 100
          1t3 = 1t3 / 1ar2(8)
          1t2 = 1t2 + 1t3
          1t2 = 1t2 / 10
          1t7 = 1t2 / 10
          1t5 = Fusing(1t7 , "#.#")
    
    Locate 1 , 1 : Lcd "T1:" ; T4
    Locate 1 , 10 : Lcd "T2:" ; T5
    Locate 2 , 1 : Lcd "T3:" ; 1t4
    Locate 2 , 10 : Lcd "T4:" ; 1t5
    
    Waitms 500
    
    Loop
    Den Code habe ich hier aus dem Forum, habe das nur mal verdoppelt und vor die neuen Variablen ne 1 vorgehängt.
    Harman Kardon HTPC
    Bild hier  

  5. #25
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    25.03.2006
    Ort
    Hinsdorf
    Alter
    49
    Beiträge
    381
    Hallo Papsi,

    wie die ganzen Beispiele hier im Forum schon beschreiben, braucht der DS ca. 750ms für die Konvertierung.
    Ich habe keine Wartezeit mit in meinem Programm verbaut, ich stoße meine Konvertierung in einem anderem Programmteil an (z.Bsp. in einer Gosub) und arbeite dann in meinem Code weiter bis zu einem späteren Zeitpunkt es zur Temp-verarbeitung kommt.
    Da das Programm weiter im Text arbeitet, reicht bei mir die Zeit aus für die Konvertierung und brauche somit keine Wartezeit.
    Vielleicht konnte ich Dir mit dem Tip weiter helfen.

    Schönen Abend und Gruß aus Istanbul
    MAT

  6. #26
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Ich würde den Ablauf etwa so machen:

    Code:
    Config TimerX = Timer , Prescale = 1024                     'oder 1, 8, 64, 256
    On TimerX Timer_isr                                         'TimerX durch beliebigen Timer ersetzen
    
    Do
       If Read_temp_counter = YYYY Then      'YYYY so wählen, dass z.B. jede Sekunde einmal ausgeführt wird
          Read_temp_counter = 0
          '....  jetzt alle Befehle zur Temp Berechnung und Anzeige, kein wait
       End If
    Loop
    
    Timer_isr:                              '           Prescale * max_counts
       Incr Read_temp_counter               'wird alle -----------------------  Sekunden um 1 hochgezählt
    Return                                  '                 $crystal
                           'für einen 8-bit Timer ist max_counts 256, für einen 16-bit Timer ist es 65536
    Lass die ganzen Blöcke weg:

    1wreset
    1wwrite &H55
    1wwrite Id3(1) , 8
    1wwrite &H44

    und ersetze sie am Ende deiner Ausgabe durch ein

    1wreset
    1wwrite &HCC
    1wwrite &H44

    Und versuche mal die ganze Orgie durch eine Schleife zu ersetzen, die die 4 Sensoren nacheinander aufruft. Dann bracuhst du auch die Unmenge an Variablen nicht mehr. Du willst die Werte ja eh nicht abspeichern, oder?

    Gruß

    Rolf

  7. #27
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2004
    Beiträge
    101
    Hallo,

    habe mein "Problem" gelöst.

    Läuft auch mit einem Timer.
    Ich lasse einfach eine Variable hochzählen und alle 1 sec. lasse ich dann die Befehle ausführen.
    Somit ersetzte ich die waitms und habe dadurch keine Wartezeit im Programmablauf.
    Somit habe ich so ca. alle 7-8 sec die aktuelle Temperatur pro Sensor.
    Das reicht für meine Zwecke locker aus.

    Gruß
    Papsi
    Harman Kardon HTPC
    Bild hier  

  8. #28
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Umso besser, wenn du es selber hinbekommen hast.

    Gruß

    Rolf

  9. #29
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    13.08.2004
    Beiträge
    101
    Hat zwar gedauert, bis ich es hinbekommen habe, aber so langsam begreife ich das hier...
    Harman Kardon HTPC
    Bild hier  

  10. #30
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.09.2007
    Beiträge
    101
    Hallo Papsi!
    Könntest du Dein Programm hier reinstellen zum abkupfern.
    Meins geht zwar auch, aber man könnte sicher noch einiges verbessern.
    Danke nochmal an Rolf!
    Gruß
    Hans

Seite 3 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen