- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 4 ErsteErste 1234 LetzteLetzte
Ergebnis 11 bis 20 von 31

Thema: DS18S20 Seriennr. am LCD ausgeben?

  1. #11
    Benutzer Stammmitglied
    Registriert seit
    03.02.2007
    Ort
    Bayern
    Beiträge
    85

    T

    Anzeige

    Powerstation Test
    Also entweder:
    Code:
    Dim Dsid(24) As Byte
    ' Die Adresse meines DS1820 die ich vorher ermittelt habe
    Dsid(1) = &H10 : Dsid(2) = &H99 : Dsid(3) = &H4E : Dsid(4) = &H71 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H6D
    '^= 1
    Dsid(9) = &H10 : Dsid(10) = &H3D : Dsid(11) = &H48 : Dsid(12) = &H71 : Dsid(13) = &H01 : Dsid(14) = &H08 : Dsid(15) = &H00 : Dsid(16) = &H71
    '^= 2
    Dsid(17) = &H10 : Dsid(18) = &H4D : Dsid(19) = &H47 : Dsid(20) = &H71 : Dsid(21) = &H01 : Dsid(22) = &H08 : Dsid(23) = &H00 : Dsid(24) = &H86
    '^= 3
    Dim Sc(9) As Byte
    Dim Sc2(9) As Byte
    Dim T As Integer
    Dim T1 As Integer
    Dim I As Byte
    Dim Halb As Byte
    Dim Halb2 As Byte
    Dim Ds1820 As Byte
    Dim Ds1820_2 As Byte
    Cursor Off
    
    
    Do
     ' Alle angeschlossenen DS1820 zum Messen veranlassen
     1wreset
     1wwrite &HCC
     1wwrite &H44
     Waitms 750
     ' Den gewünschten Sensor auswählen
     1wverify Dsid(1)
     ' Kommando READ SCRATCHPAD
     1wwrite &HBE
     Sc(1) = 1wread(9)
     If Sc(9) = Crc8(sc(1) , 8) Then
      T = Makeint(sc(1) , Sc(2))
      ' Die Nachkommastelle entfernen
      T = T / 2
      ' Temperatur in ganzen Grad Schritten ausgeben
      Locate 1 , 1
      Lcd "T1: " ; T ;
     End If
     ' Ausgabe alle 0,75 Sekunden
     Waitms 750
    'usw... für 3 Sensoren.
    Wobei hier dann ab ca. 3° 30 am Display steht, wenn ich mich recht entsinne.

    Oder diesen Teil:
    Code:
    Dim Dsid(24) As Byte
    ' Die Adresse meines DS1820 die ich vorher ermittelt habe
    Dsid(1) = &H10 : Dsid(2) = &H99 : Dsid(3) = &H4E : Dsid(4) = &H71 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H6D
    '^= 1
    Dsid(9) = &H10 : Dsid(10) = &H3D : Dsid(11) = &H48 : Dsid(12) = &H71 : Dsid(13) = &H01 : Dsid(14) = &H08 : Dsid(15) = &H00 : Dsid(16) = &H71
    '^= 2
    Dsid(17) = &H10 : Dsid(18) = &H4D : Dsid(19) = &H47 : Dsid(20) = &H71 : Dsid(21) = &H01 : Dsid(22) = &H08 : Dsid(23) = &H00 : Dsid(24) = &H86
    '^= 3
    Dim Sc(9) As Byte
    Dim Sc2(9) As Byte
    Dim T As Integer
    Dim T1 As Integer
    Dim I As Byte
    Dim Halb As Byte
    Dim Halb2 As Byte
    Dim Ds1820 As Byte
    Dim Ds1820_2 As Byte
    Cursor Off
    
    
    Do
    1wreset
      1wwrite &HCC
      1wwrite &H44
      Waitms 700
      1wreset
      1wverify Dsid(9)
      1wwrite &HBE
      Ds1820 = 1wread(9)
      Locate 4 , 1
      Lcd Ds1820
      1wreset
      Halb = Ds1820 And 1
      Locate 2 , 1
      Shift Ds1820 , Right
      If Ds1820 > 127 Then
        Lcd "-"
        Ds1820 = 256 - Ds1820
        If Halb = 1 Then Ds1820 = Ds1820 - 1
      Else
        Lcd " "
      End If
      Lcd Ds1820 ; ".";
      If Halb = 1 Then
        Lcd "5"
      Else
        Lcd "0"
      End If
      Lcd "C "
      Waitms 700
    'usw...
    Loop
    Wobei hier dann im Negativen Bereich eine 3-stellige Zahl und keine negatvie Temperatur raus kommt...

    Edit: Bild hier  
    "T1" ist jetzt mal zu vernachlässigen und mit 1. Code gschrieben.
    Die "Temperatur" in der zweiten Zeile ist die, die ich mit dem 2. Code programmiert habe (sie ist negativ!) und der Wert ganz unten ist "Ds1820"
    Wenn er jetzt also 256 - Ds1820 rechnen würde, würde wohl auch die richtige Temperatur heraus kommen, nur scheint es mir, als würde er die If-Schleife nicht richtig ausführen; 1. rechnet er anscheinend nicht 256 - Ds1820 und 2. zeigt er auch ein keinster Weise ein "-" an

  2. #12
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113

    Re: T

    Ich habe dir mal den 1. Code so abgeändert, wie ich denke dass er laufen müsste. Kann ich aber nicht ausprobieren.
    Code:
    Dim Dsid(24) As Byte
    ' Die Adresse meines DS1820 die ich vorher ermittelt habe
    Dsid(1) = &H10 : Dsid(2) = &H99 : Dsid(3) = &H4E : Dsid(4) = &H71 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H6D
    '^= 1
    Dsid(9) = &H10 : Dsid(10) = &H3D : Dsid(11) = &H48 : Dsid(12) = &H71 : Dsid(13) = &H01 : Dsid(14) = &H08 : Dsid(15) = &H00 : Dsid(16) = &H71
    '^= 2
    Dsid(17) = &H10 : Dsid(18) = &H4D : Dsid(19) = &H47 : Dsid(20) = &H71 : Dsid(21) = &H01 : Dsid(22) = &H08 : Dsid(23) = &H00 : Dsid(24) = &H86
    '^= 3
    Dim Sc(9) As Byte
    Dim Sc2(9) As Byte
    Dim T As Byte                                      'kein Integer mehr
    Dim T1 As Integer
    Dim I As Byte
    Dim Halb As Byte
    Dim Halb2 As Byte
    Dim Ds1820 As Byte
    Dim Ds1820_2 As Byte
    Cursor Off
    
    Do
      ' Alle angeschlossenen DS1820 zum Messen veranlassen
       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750
       ' Den gewünschten Sensor auswählen
       1wverify Dsid(1)
       ' Kommando READ SCRATCHPAD
       1wwrite &HBE
       Sc(1) = 1wread(9)
       If Sc(9) = Crc8(sc(1) , 8) Then
          T = Sc(1)
          If Sc(2) > 0 Then
             Print "-";
            T = 256 - T
          End If
          T = T / 2
          locate 1,1
          If Sc(2) > 0 Then lcd "-";
          lcd T ;
          If Sc(1).0 = 1 Then
             lcd ".5°C"
          Else
             lcd ".0°C"
          End If
       End If
       ' Ausgabe alle 0,75 Sekunden
       Waitms 750
       'usw... für 3 Sensoren.
    loop
    Probier es mal aus.

  3. #13
    Benutzer Stammmitglied
    Registriert seit
    03.02.2007
    Ort
    Bayern
    Beiträge
    85
    Funktioniet leider (gar) nicht

    MfG

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von Maxxtro
    Funktioniet leider (gar) nicht

    MfG
    Also keine Ausgabe auf dem Display?
    Wie sieht denn dein Code drumherum aus, dein 1. Beispiel ist ja bestimmt nicht komplett.
    Ich habe nur die Zeilen ersetzt, die T berechnen. Den Rest musst du wieder dabei tun.
    Durch die 1wire Befehle kann man das schlecht durch den Simulator laufen lassen. Ich muss die dann alle durch Pseudobefehle ersetzen.

    Gruß

    Rolf

  5. #15
    Benutzer Stammmitglied
    Registriert seit
    03.02.2007
    Ort
    Bayern
    Beiträge
    85
    Nein, keine Ausgabe auf dem Display...
    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    
    
    ' LCD konfigurieren Port auf Ausgabe setzten und Pin's entsprechend zuordnen
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    Config Lcd = 16 * 4
    Config Lcdbus = 4
    Config Portd.0 = Output                                     'bloß für meine displaybeleuchtung
    Portd.0 = 1
    
    
    ' Pin für 1wire Schnittstelle festlegen, Schnittstelle wird von Bascom durch Software realisiert
    Config 1wire = Portd.7
    
    
    Dim Dsid(24) As Byte
    ' Die Adresse meines DS1820 die ich vorher ermittelt habe
    Dsid(1) = &H10 : Dsid(2) = &H99 : Dsid(3) = &H4E : Dsid(4) = &H71 : Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H6D
    '^= 1
    Dsid(9) = &H10 : Dsid(10) = &H3D : Dsid(11) = &H48 : Dsid(12) = &H71 : Dsid(13) = &H01 : Dsid(14) = &H08 : Dsid(15) = &H00 : Dsid(16) = &H71
    '^= 2
    Dsid(17) = &H10 : Dsid(18) = &H4D : Dsid(19) = &H47 : Dsid(20) = &H71 : Dsid(21) = &H01 : Dsid(22) = &H08 : Dsid(23) = &H00 : Dsid(24) = &H86
    '^= 3
    Dim Sc(9) As Byte
    Dim Sc2(9) As Byte
    Dim T As Integer
    Dim T1 As Integer
    Dim I As Byte
    Dim Halb As Byte
    Dim Halb2 As Byte
    Dim Ds1820 As Byte
    Dim Ds1820_2 As Byte
    Cursor Off
    
    
    Do
       
    ' Alle angeschlossenen DS1820 zum Messen veranlassen
       1wreset
       1wwrite &HCC
       1wwrite &H44
       Waitms 750
       ' Den gewünschten Sensor auswählen
       1wverify Dsid(1)
       ' Kommando READ SCRATCHPAD
       1wwrite &HBE
       Sc(1) = 1wread(1)
       If Sc(9) = Crc8(sc(1) , 8) Then
          T = Sc(1)
          If Sc(2) > 0 Then
             Lcd "-";
            T = 256 - T
          End If
          T = T / 2
          Locate 1 , 1
          If Sc(2) > 0 Then Lcd "-";
          Lcd T ;
          If Sc(1).0 = 1 Then
             Lcd ".5°C"
          Else
             Lcd ".0°C"
          End If
       End If
       ' Ausgabe alle 0,75 Sekunden
       Waitms 750
    
    
      1wreset
      1wwrite &HCC
      1wwrite &H44
      Waitms 750
      1wreset
      1wverify Dsid(9)
      1wwrite &HBE
      Ds1820 = 1wread(9)
      Locate 4 , 1
      Lcd Ds1820
      1wreset
      Halb = Ds1820 And 1
      Shift Ds1820 , Right
    
      If Ds1820 > 127 Then
      Ds1820_2 = 256 - Ds1820
      Else
      Ds1820_2 = Ds1820
      End If
    
      If Halb = 1 Then
      Ds1820_2 = Ds1820_2 - 1
      End If
    
      Locate 3 , 1
      Lcd Ds1820_2 ; ".";
    
      If Halb = 1 Then
      Lcd "5"
      Else
      Lcd "0"
      End If
      Lcd "C "
      Waitms 700
    
    Loop
    
    
    End
    Mit dem 2. Teil des Codes habe ich wie gesagt das Problem unter 0°, aber wenigstens ne Anzeige...

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Wiese steht denn beim ersten Sensor
    Sc(1) = 1wread(1)
    da muss wie unten auch
    Sc(1) = 1wread(9)

    sonst liest der keine CRC ein und die Abfrage geht schief.

    Gruß

    Rolf

  7. #17
    Benutzer Stammmitglied
    Registriert seit
    03.02.2007
    Ort
    Bayern
    Beiträge
    85
    Gute Frage... wahrscheinlich dachte ich bei dem 9er unten dass oben wegen dem 1. Sensor ein 1er hin muss

    Nun, jetzt funktionierts! Sowohl im + als auch im - Bereich bekomme ich ne vernünftige Temperatur angezeigt! Danke! Mal schaun wie weit ich jetzt allein komme

    MfG

  8. #18
    Benutzer Stammmitglied
    Registriert seit
    03.02.2007
    Ort
    Bayern
    Beiträge
    85
    So, noch mal ned Frage zur Temperatrumessung

    Code:
    If T > H Then Set Flag
    If Flag = 1 Then
      If Sc(1).0 = 1 Then
        X = T + 1
        Else
        X = T
      End If
        Eram_h = X
        H = Eram_h
        Reset Flag
    End If
    
    
    If T2 > H Then Set Flag
    If Flag = 1 Then
      If Sc2(1).0 = 1 Then
       X = T2 + 1
       Else
       X = T2
      End If
       Eram_h = X
       H = Eram_h
       Reset Flag
    End If
    Diese beiden Dinger waren zum feststellen und speichern von Höchstwerten; passt so weit auch. (Je ein Abschnitt für einen Sensor)
    Jetzt habe ich bei beiden
    "If Sc2(1).0 = 1 Then
    X = T2 + 1
    Else
    X = T2
    End If"
    eingefügt, um bei ,5° aufzurunden.

    Komischer weise funktioniert das bei Sensor 2 bzw. T2, nicht aber bei Sensor 1! Beim ersten wird der höchstwert zwar nach wie vor gespeichert, aber nicht aufgerundet.
    Woran liegt das, wo beide male doch genau das selbe passiert (passieren soll)?

  9. #19
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Ist denn die Temperatur an Sensor T sicher größer als H?
    Ansonsten ist dein Flag nicht gesetzt und die Änderung von T wird nicht durchgeführt.
    Wie oft führt er diesen Teil eigentlich aus? Da ist ein Befehl drin, der nach EEProm schreiben aussieht. Das sollte sicherlich nicht jede Sekunde stattfinden, selbst bei einer Minute ist das EEProm nach 2 Monaten nicht mehr beschreibbar.

    Gruß

    Rolf

  10. #20
    Benutzer Stammmitglied
    Registriert seit
    03.02.2007
    Ort
    Bayern
    Beiträge
    85
    Der Befehl wird so zu sagen "jede Sekunde" ausgeführt und er schreibt in den EEPROM, allerdings nur, wenn die Temperatur größer als alle Temperaturen zuvor ist! Und das sollte ja nicht all zu oft vorkommen
    Und gelesen wird der Wert im EEPROM bei jedem einschalten, das sollte okay sein, oder?

    Aber T ist größer als H; das erkennen und speichern der Höchstwerte funktioniert ja sowieso, aber das mit ,5° haut nicht hin!
    Es wird bei ,5° also das ,5 einfach abgeschnitten und der Wert nicht aufgrundet!
    Mit T2 funktioniert das ja ganz genau so und ohne Probleme?!

Seite 2 von 4 ErsteErste 1234 LetzteLetzte

Berechtigungen

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

Labornetzteil AliExpress