-
        

Ergebnis 1 bis 7 von 7

Thema: DS1621 auselse Probleme!

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    25.07.2006
    Beiträge
    53

    DS1621 auselse Probleme!

    Anzeige

    Hey,

    hab seit monaten meine MiniControl wieder rausgekrammt, da ich jetzt wieder Verwendung dafür habe.

    Ich hab mir kurz einen Code zum auslesen des DS1621 über I2C geladen und drauf geflasht! Komischer weiße sind bei mir aber low und high temp immer 255. Der DS1621 ging aufjeden fall damals, hab auch nichts an der Verlötung geändert, an was kann das liegen?

    Hier der Code :
    Code:
    $regfile = "m168def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    
    $lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
    
    Config Scl = Portc.5                                        ' we need to provide the SCL pin name
    Config Sda = Portc.4                                        ' we need to provide the SDA pin name
    
    I2cinit                                                     ' we need to set the pins in the proper state
    
    Config Twi = 100000                                         ' wanted clock frequency
    'will set TWBR and TWSR
    'Twbr = 12                                                   'bit rate register
    'Twsr = 0                                                    'pre scaler bits
    
    Dim T As Word
    Declare Sub Readtemp
    
    Do
    Call Readtemp()
    Loop
    End
    
    Sub Readtemp(byval Device As Byte)
    Local Deviceread As Byte
    Local Lowtemp As Byte
    Local Hightemp As Byte
    
    Deviceread = Device + 1
    
    'I2csend , Device , &HEE                     'kürzere Source, längerer Code
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HEE                                               'Temperaturmessung anstoßen
    I2cstop
    
    'I2csend , Device , &HAA                     'kürzere Source, längerer Code
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HAA                                               'Temperaturmessung Lesekommando
    I2cstop
    
    I2cstart
    I2cwbyte Deviceread
    I2crbyte Lowtemp , Ack                                      'LSByte holen
    I2crbyte Hightemp , Nack                                    'MSByte holen
    I2cstop
    
    Value = Lowtemp * 10
    If Hightemp = 128 Then
      Value = Value + 5
    End If
    Print Value
    
    End Sub
    Jetzt schon mal danke für eure Hilfe!

    MfG
    Placa

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    "FF" heisst auf "I2C" eigentlich "NIX".
    Überprüf mal, ob er überhaupt auf seine Adresse reagiert.


    EDIT: Wo definierst du denn überhaupt die Adresse ?


    Noch'n edit:
    Code:
    Call Readtemp() 
    Loop 
    End 
    
    Sub Readtemp(byval Device As Byte) 
    Local Deviceread As Byte
    Wenn du das so machst, ist ja garkeine adresse da

    Call Readtemp()

    sollte doch sein


    Call Readtemp( &Hxx )
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    25.07.2006
    Beiträge
    53
    Wie finde ich die Adresse heraus?

    MfG
    Placa

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    25.07.2006
    Beiträge
    53
    Kann mir niemand helfen?


    MfG
    Placa

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Adresse ist "&H90", wenn A0 = A1 = A2 = 0.
    I2C--> &H90 = schreiben &H91 = lesen

    Du kannst den DS1621 wie den LM75 behandeln.
    http://www.roboternetz.de/wissen/ind..._f.C3.BCr_LM75
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Hi, hab den DS1621 auch grad probiert, aber mir scheint daß die Temperatur irgendwie nich ganz stimmt. Wenn sonst keine äußeren Temperatureinflüsse da sind dann müßte er mir doch die Raumtemperatur anzeigen, er zeigt aber 255 an. Wenn ich jetzt den Finger draufdrücke, dann steigt die angezeigte Temperatur von 0 auf ca 30 an, wenn ich den Finger wieder weg nehme dann zeigts mir im Terminal wider 255 an. Kann es sein daß bei der Umrechnung etwas nich stimmt?

    Code:
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    $hwstack = 32
    $framesize = 32
    $swstack = 32
    
    $lib "i2c_twi.lbx"                                          ' we do not use software emulated I2C but the TWI
    
    Config Scl = Portc.5                                        ' we need to provide the SCL pin name
    Config Sda = Portc.4                                        ' we need to provide the SDA pin name
    
    I2cinit                                                     ' we need to set the pins in the proper state
    
    Config Twi = 100000                                         ' wanted clock frequency
    'will set TWBR and TWSR
    'Twbr = 12                                                   'bit rate register
    'Twsr = 0                                                    'pre scaler bits
    
    Dim T As Word
    Declare Sub Readtemp(byval Device As Byte)
    
    Do
    Call Readtemp(&H90)
    Wait 1
    Loop
    End
    
    Sub Readtemp(byval Device As Byte)
    Local Deviceread As Byte
    Local Lowtemp As Byte
    Local Hightemp As Byte
    Local Value As Byte
    Deviceread = Device + 1
    
    'I2csend , Device , &HEE                     'kürzere Source, längerer Code
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HEE                                               'Temperaturmessung anstoßen
    I2cstop
    
    'I2csend , Device , &HAA                     'kürzere Source, längerer Code
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HAA                                               'Temperaturmessung Lesekommando
    I2cstop
    
    I2cstart
    I2cwbyte Deviceread
    I2crbyte Lowtemp , Ack                                      'LSByte holen
    I2crbyte Hightemp , Nack                                    'MSByte holen
    I2cstop
    
    Print "Lowtemp " ; Lowtemp
    Print "Hightemp " ; Hightemp
    
    
    Value = Lowtemp * 10
    If Hightemp = 128 Then
      Value = Value + 5
    End If
    Print Value
    
    End Sub

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.02.2005
    Ort
    Südtirol
    Beiträge
    283
    Problem gelöst, nach 2-3mal ins datenblatt geschaut hab ich gemerkt, daß in der Variable Highbyte die Stelle nach dem Komma steht

Berechtigungen

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