- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 6 von 6

Thema: Minusgrade beim LM75

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    12.08.2005
    Beiträge
    9

    Minusgrade beim LM75

    Guten Morgen =)

    Ich habe mir hier mit einem LM75 einem ATMega8 und einem Display versucht ein einfaches Thermometer aufzubauen. Dazu habe ich mir den folgenden Code zusammengeschnipselt:

    Code:
         I2cinit
    Start:
         Showtemperatur
         Wait 142
         Goto Start
    
    
     Sub Showtemperatur()
       I2cstart
       I2cwbyte Lm75slaveread
       I2crbyte Lm75high , Ack
       I2crbyte Lm75low , Nack
       I2cstop
    
    
       If Lm75high > 127 Then
          Temperatur = Lm75high And 127
          Temperatur = Not Temperatur
          Incr Temperatur
       Else
          Temperatur = Lm75high
       End If
       Lm75low = Lm75low And 128
       If Lm75low > 0 Then
           Nachkommastelle = ",5"
       Else
          Nachkommastelle = ",0"
       End If
    
    Locate 1 , 1
    Lcd "Temp.:" ;
    Locate 2 , 1
    Lcd Temperatur ; Nachkommastelle ; Chr(0) ;
    wenn dabei jedoch die Temperatur unter 0°C sinkt, zeigt mir das Display immer -127Grad an ?! Ich hab das schon x-mal versucht nachzuvollziehen oder es zu ändern... war aber leider nicht von Erfolg gekrönt

    kann mich da villeicht jemand auf den entscheidenden Fehler hinweisen ?

    vielen Dank schon einmal
    mfG
    Paul

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Ja,das kann ich.
    Das ist nur ne Sache mit "Den Wald vor lauter Bäumen......"

    Schau erstmal ins Datenblatt auf "Figure 2" wie die negativen Temperaturen dargestellt werden und dann schau auf deine Berechnung dann müßte dir der Denkfehler schon rektal ins Gesicht springen.

    PS:
    Es ist enorm Hilfreich die Eckwerte für Positiv,Negativ und einige Abschnitte Binär und Dezimal aufzuschreiben dann hat man das System leichter im Griff.
    Gruß
    Ratber

  3. #3
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  4. #4
    Neuer Benutzer Öfters hier
    Registriert seit
    12.08.2005
    Beiträge
    9
    So, jetzt habe ich es hinbekommen, wobei ich sagen muss, dass ich nicht genau verstanden habe warum \/

    Also Minusgrade werden dann übermittelt wenn das letzte Bit im Highbyte (also Bit 7) = 1 ist oder ?
    Und 0,5 werden dann nochmal dazugezählt wenn Bit 7 im LowByte = 1 ist ?

    Wenn das so richtig ist habe ich aber immernoch nicht verstanden warum mit diesesn Operatoren "and" das Ganze nochmal invertiert wird ?!
    Tut mir leid wenn ich mich schrecklich blöd anstellen sollte aber irgendwie habe ich da einen riesen Knoten im Hirn =)

    Hier ist noch mein Code, für den Fall es juckt jemand in den Fingern mir zu zeigen warum man mit so einem winzigen Code so viel Speicher verbraten kann... Ich bin gerne bereit zu lernen.

    Code:
    $regfile = "M8def.dat"
    $crystal = 4000000
    $baud = 9600
    
    
    Declare Sub Showtemperatur()
    
    
    Const Lm75slaveread = &B10010001
    Dim Lm75high As Byte
    Dim Lm75low As Byte
    Dim Temperatur As Integer
    Dim Nachkommastelle As String * 2
    Dim Eeadr As Byte
    Dim Temp As Integer
    Dim Speicher As Single
    Dim Tempsing As Single
    Dim Anzeige As String * 5
    
    Config Sda = Portc.4
    Config Scl = Portc.5
    
    Config Lcd = 16 * 1a
    Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.7 , Db6 = Portd.6 , Db7 = Portd.5 , E = Portb.2 , Rs = Portb.1
    
    Deflcdchar 0 , 28 , 20 , 28 , 32 , 32 , 32 , 32 , 32
    Cls
    Cursor Off
    
         I2cinit
    
    
    Do
    
    Showtemperatur
    Waitms 200
    Loop
    
    
    
     Sub Showtemperatur()
       I2cstart
       I2cwbyte Lm75slaveread
       I2crbyte Lm75high , Ack
       I2crbyte Lm75low , Nack
       I2cstop
    
    
       If Lm75high > 127 Then
          Temperatur = Makeint(lm75high , &HFF)
       Else
          Temperatur = Lm75high
       End If
    
       Lm75low = Lm75low And 128
    
       If Lm75low > 0 Then
           Nachkommastelle = ".5"
       Else
          Nachkommastelle = ".0"
       End If
    
       Speicher = Temperatur
       Tempsing = Val(nachkommastelle)
       Speicher = Speicher + Tempsing
       Anzeige = Fusing(speicher , " ##.&")
    
       'Print Tempsing ; "-_-" ;
    
       Locate 1 , 1
       Lcd "Temp.:" ;
    
       Locate 2 , 1
       Lcd Fusing(speicher , " ##.&") ; Chr(0) ;
    
     End Sub

    Ich hoffe ihr könnt jetzt noch gut schlafen
    MfG Paul

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.09.2004
    Ort
    Düsseldorf
    Beiträge
    3.948
    Wenn das so richtig ist habe ich aber immernoch nicht verstanden warum mit diesesn Operatoren "and" das Ganze nochmal invertiert wird ?!
    Tut mir leid wenn ich mich schrecklich blöd anstellen sollte aber irgendwie habe ich da einen riesen Knoten im Hirn =)
    Ich sagte ja schon das du dir mal die Ausgabe genauer anschaust um es zu verstehen

    Mach einfach mal so wie ich sagte.
    Kostet nur etwas Zeit.
    Gruß
    Ratber

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Code:
    dim singval as single
    dim Ival as integer
    dim Msb as byte
    dim Lsb as byte
    .....
    .....
               I2crbyte Msb , Ack
               I2crbyte Lsb , Nack
               I2cstop
               If Msb.7 = 1 Then
                  Ival = Makeint(msb , &HFF)   ' auffüllen mit den Vorzeichen bits
               Else
                  Ival = Makeint(msb , &H00)   ' positiv, also bleibt es so
               End If
               singval = Ival
               If Lsb.7 = 1 Then
                    singval = singval + 0.5
               End If
            End if
    Fusen und displayen kannst du selbst.
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

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

Labornetzteil AliExpress