- LiFePO4 Speicher Test         
Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte
Ergebnis 11 bis 20 von 55

Thema: DS1621 auslesen

  1. #11
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.04.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    336
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Das ist jetzt mein aktuelles Programm
    Code:
    $regfile = "M32def.dat"                                     ' chip
    $crystal = 16000000                                         ' frequenz
    $baud = 19200                                               ' baud rate
    
                                             ' we do not use software emulated I2C but the TWI
    
    Config Scl = Portc.0                                        ' we need to provide the SCL pin name
    Config Sda = Portc.1                                        ' we need to provide the SDA pin name
    
    
    Dim Lowtemp As Byte
    Dim Hightemp As Byte
    Dim Value As Word      '!!!!!!!
    I2cinit
    
    
    Do
    
    I2cstart
    I2cwbyte 144
    I2cwbyte &HEE                                'Temperaturmessung anstoßen
    I2cstop
    
    I2cstart
    I2cwbyte 144
    I2cwbyte &HAA                                'Temperaturmessung Lesekommando
    I2cstop
    
    I2cstart
    I2cwbyte 145
    I2crbyte Lowtemp , Ack                       'LSB holen
    I2crbyte Hightemp , Nack                     'MSB holen
    
    I2cstop
    
    Value = Lowtemp * 10
    If Hightemp = 128 Then
      Value = Value + 5
    End If
    
    Print value
    ' oder LCD value
    
    waitms 500                                         'kurze Pause
    Loop
    
    
    End
    Dieses Programm funktioniert glaub ich mal so weit. Die temperatur wir aber ohne Komma angezeigt.
    was bedeutet denn das rechnen mit value +5 oder *10?

    kann ich das ganze nicht mit hardware twi lösen?
    da sind doch die befehle auch kürzer.

  2. #12
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.04.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    336
    ich habe heute mal ausprobiert ob ich Minustemperaturen auch anzeigen lassen kann. Doch wenn die Temperatur unter 0 fällt, läuft er von 256 abwärtz.

  3. #13
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.12.2004
    Alter
    71
    Beiträge
    277
    Zitat Zitat von Zeroeightfifteen
    ich habe heute mal ausprobiert ob ich Minustemperaturen auch anzeigen lassen kann. Doch wenn die Temperatur unter 0 fällt, läuft er von 256 abwärtz.
    Och mann 0815,

    was hatte ich geschrieben? Richtig:
    Grundlagen und nochmal Grundlagen lernen, Datenblätter lesen, verstehen und dann variieren.

    Da fragst Du:

    Dieses Programm funktioniert glaub ich mal so weit. Die temperatur wir aber ohne Komma angezeigt.
    was bedeutet denn das rechnen mit value +5 oder *10?

    kann ich das ganze nicht mit hardware twi lösen?
    da sind doch die befehle auch kürzer.
    1) Wie man Zahlen ohne Komma in Zahlen mit Komma verwandelt. Das hattest Du bereits in einem anderen Thread gefragt und auch eine Methode genannt bekommen, wie das zu bewerkstelligen ist. In meinem komplettbeispiel, das ich unten nochmal einfüge, lernst Du noc eine Methode kennen. Was die Operation mit *10 und +5 darfst Du nun selbst herausfinden.

    2)Natürlich kannst Du das auch mit Hardware TWI lösen. Nur ändern sich die Befehle überhaupt nicht. Der einzige Unterschied ist der, daß die Bascom Library Hardware TWI anspricht und damit gerinfügig weniger Platz verbraucht.

    3)Minus kann das Programmbeisiel nicht, ich habe es bewußt einfach gehalten, für Dich aber wohl noch nicht einfach genug.

    Irgendwie scheinst Du die Funktion eines Forums falsch zu verstehen. Hier gibt es Hilfe zur Selbsthilfe, keine Rundum Sorglospakete für Denkfaule.

    Ein letztes Mal --- Komplettprogramm einfach:
    Code:
    '-------------------------------------------------------------------------------
    '-----  Beispiel für das Auslesen des Temperatursensors DS1621/1631 ------------
    '                                                                       HR 2006
    '
    'Anmerkung: Dieses Beispiel ist sowohl für den 1621 als auch für den 1631
    'geeignet. Der 1631 wird dabei im 1621 Kompatibilitätsmodus betrieben.
    'Auf die Auswertung negativer Temperaturen wird verzichtet.
    '-------------------------------------------------------------------------------
    
    $regfile = "m8def.dat"
    $crystal = 7372800
    $baud = 9600
    
    $hwstack = 32
    $swstack = 32
    $framesize = 32
    
    Config Scl = Portc.5
    Config Sda = Portc.4
    Portc.5 = 1                                  'Pullup Widerstand ein
    Portc.4 = 1                                  'Pullup Widerstand ein
    I2cinit                                      'entbehrlich
    '-------------------------------------------------------------------------------
    Declare Sub Readtemp(byval Device As Byte)
    Declare Sub Convertvalue_komma1()
    
    Dim Value As Word
    Dim Convert_strg As String * 10
    
    Const Ds1 = 150                              'ggf. anpassen
    '----------------------------- Hauptprogramm -----------------------------------
    
    Do
    Call Readtemp(ds1)
    Call Convertvalue_komma1()
    Print Convert_strg
    Waitms 500
    Loop
    
    End
    
    '----------------------------- Subroutinen -------------------------------------
    
    'Readtemp liest die Temperatur und stellt sie nach Aufruf in der Variable Value
    'in 10tel Grad zu Verfügung. Übergeben wird die Deviceadresse des Sensors.
    
    Sub Readtemp(byval Device As Byte)
    Local Deviceread As Byte
    Local Lowtemp As Byte
    Local Hightemp As Byte
    
    Deviceread = Device + 1
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HEE                                'Temperaturmessung anstoßen
    I2cstop
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HAA                                'Temperaturmessung Lesekommando
    I2cstop
    
    I2cstart
    I2cwbyte Deviceread
    I2crbyte Lowtemp , Ack                       'LSByte holen (Ganze Grad)
    I2crbyte Hightemp , Nack                     'MSByte holen (0,5 Grad Indikator)
    I2cstop
    
    Value = Lowtemp * 10
    If Hightemp = 128 Then
      Value = Value + 5
    End If
    
    End Sub
    
    '-------------------------------------------------------------------------------
    'Convertvalue_komma1 wandelt Value in einen String mit einer Nachkommastelle.
    'Es wird gezeigt wie ein Zahlenwert in ein String gewandelt wird und dieser
    'formatiert werden kann.
    'Alternativ kann natürlich auch die "/10, Mod 10 Methode" angewandt werden.
    
    Sub Convertvalue_komma1()
    
    Convert_strg = Str(value)
    Convert_strg = Format(convert_strg , " 0.0")
    
    End Sub
    '-------------------------------------------------------------------------------
    und eine Erweiterung auf negative Temperaturen:

    Code:
    Sub Readtemp(byval Device As Byte)
    
      Minusflag = 0
      Local Deviceread As Byte
      Local Lowtemp As Byte
      Local Hightemp As Byte
      Local Templow As Byte
      Deviceread = Device + 1
    
      I2csend , Device , &HEE                    'Temperaturmessung anstoßen
    
      I2csend , Device , &HAA                    'Temperaturmessung Lesekommando
    
      I2cstart
      I2cwbyte Deviceread
      I2crbyte Lowtemp , Ack                     'LSByte holen (ganze Grad)
    
      Templow = Lowtemp And &H80
      If Templow = 128 Then
        Minusflag = 1
        Lowtemp = 255 - Lowtemp
        Lowtemp = Lowtemp + 1
      End If
    
      I2crbyte Hightemp , Nack                   'MSByte holen (0,5 Indikator)
      I2cstop
    
      Value = Lowtemp * 10
      Value_x = Lowtemp                          'um das LSB für EEprom
                                                 'Ausgabe zu retten
      If Hightemp = 128 Then                     '+/- Auswertung
          If Minusflag = 0 Then Value = Value + 5
      '    If Minusflag = 1 Then Value = Value - 5
      End If
    
    End Sub
    Bevor Du Dich nun wieder mit Fragen meldest, wäre es schön, wenn Du endlich mal die Grundlagen von I2C lernen würdest und das Datenblatt liest. Dann wirst Du evtl. auch weitere Antworten erwarten können.

    Henrik

  4. #14
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    03.01.2005
    Ort
    hessen
    Alter
    35
    Beiträge
    1.101
    hallo


    es gab schonmal das problem einfach mal suchen dann findet man was.

    hier der link:
    https://www.roboternetz.de/phpBB2/ze...ghlight=ds1621

    gruß
    patrick

  5. #15
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    24.04.2005
    Ort
    Bayern
    Alter
    38
    Beiträge
    336
    Das mit den Grundlagen lernen ist schon richtig. Doch mit den englischen Datenblättern kann ich mir halt nicht so weit helfen.

    Ich stehe erst am Anfang mit der Programiererei.

  6. #16
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.07.2005
    Ort
    127.0.0.1
    Alter
    32
    Beiträge
    824
    Hallo

    Ich habe einmal dass oben von hrei, angepasst und probiert, jedoch spuckt er immer nur 255.0 aus, was mache ich falsch? Achja, ich benütze dass RN-Controll.

    Code:
    '-------------------------------------------------------------------------------
    '-----  Beispiel für das Auslesen des Temperatursensors DS1621/1631 ------------
    '                                                                       HR 2006
    '
    'Anmerkung: Dieses Beispiel ist sowohl für den 1621 als auch für den 1631
    'geeignet. Der 1631 wird dabei im 1621 Kompatibilitätsmodus betrieben.
    'Auf die Auswertung negativer Temperaturen wird verzichtet.
    '-------------------------------------------------------------------------------
    
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    
    $hwstack = 32
    $swstack = 32
    $framesize = 32
    
    Config Scl = Portc.0
    Config Sda = Portc.1
    
    
    I2cinit                                      'entbehrlich
    '-------------------------------------------------------------------------------
    Declare Sub Readtemp(byval Device As Byte)
    Declare Sub Convertvalue_komma1()
    
    Dim Value As Word
    Dim Convert_strg As String * 10
    
    Const Ds1 = 150                              'ggf. anpassen
    '----------------------------- Hauptprogramm -----------------------------------
    
    Do
    Call Readtemp(ds1)
    Call Convertvalue_komma1()
    Print Convert_strg
    Waitms 500
    Loop
    
    End
    
    '----------------------------- Subroutinen -------------------------------------
    
    'Readtemp liest die Temperatur und stellt sie nach Aufruf in der Variable Value
    'in 10tel Grad zu Verfügung. Übergeben wird die Deviceadresse des Sensors.
    
    Sub Readtemp(byval Device As Byte)
    Local Deviceread As Byte
    Local Lowtemp As Byte
    Local Hightemp As Byte
    
    Deviceread = Device + 1
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HEE                                'Temperaturmessung anstoßen
    I2cstop
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HAA                                'Temperaturmessung Lesekommando
    I2cstop
    
    I2cstart
    I2cwbyte Deviceread
    I2crbyte Lowtemp , Ack                       'LSByte holen (Ganze Grad)
    I2crbyte Hightemp , Nack                     'MSByte holen (0,5 Grad Indikator)
    I2cstop
    
    Value = Lowtemp * 10
    If Hightemp = 128 Then
      Value = Value + 5
    End If
    
    End Sub
    
    '-------------------------------------------------------------------------------
    'Convertvalue_komma1 wandelt Value in einen String mit einer Nachkommastelle.
    'Es wird gezeigt wie ein Zahlenwert in ein String gewandelt wird und dieser
    'formatiert werden kann.
    'Alternativ kann natürlich auch die "/10, Mod 10 Methode" angewandt werden.
    
    Sub Convertvalue_komma1()
    
    Convert_strg = Str(value)
    Convert_strg = Format(convert_strg , " 0.0")
    
    End Sub
    '---------------------------------
    mfg Luca
    Sollte ein Bild von mir nicht angezeigt werden, einfach eine PM schicken!

  7. #17
    Benutzer Stammmitglied Avatar von raidy
    Registriert seit
    26.09.2006
    Ort
    bei Stuttgart
    Beiträge
    52

    Bascom Beispiel DS1621 Temperaturabfrage

    So gehts bei mir


    '----------- Temperatur abfragen --------------------------------
    Sub Thermometer()
    Local Device As Byte
    Device = &H90
    Local Deviceread As Byte
    Local Lowtemp As Byte
    Local Hightemp As Byte

    Deviceread = Device + 1


    I2cstart
    I2cwbyte Device
    I2cwbyte &HEE 'Temperaturmessung anstoßen
    I2cstop


    I2cstart
    I2cwbyte Device
    I2cwbyte &HAA 'Temperaturmessung Lesekommando
    I2cstop

    I2cstart
    I2cwbyte Deviceread
    I2crbyte Lowtemp , Ack 'LSByte holen
    I2crbyte Hightemp , Nack 'MSByte holen
    I2cstop

    Temperatur = Lowtemp * 10
    If Hightemp = 128 Then
    Temperatur = Temperatur + 5
    End If
    Temperatur = Temperatur / 10
    End Sub
    'Ende -------------- Temperatur ----------------------------------------

  8. #18
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.07.2005
    Ort
    127.0.0.1
    Alter
    32
    Beiträge
    824
    Hallo
    Leider funktioniert dein Code bei mir nicht. So sieht dass ganze aus:

    Code:
    -------------------------------------------------------------------------------
    '-----  Beispiel für das Auslesen des Temperatursensors DS1621/1631 ------------
    '                                                                       HR 2006
    '
    'Anmerkung: Dieses Beispiel ist sowohl für den 1621 als auch für den 1631
    'geeignet. Der 1631 wird dabei im 1621 Kompatibilitätsmodus betrieben.
    'Auf die Auswertung negativer Temperaturen wird verzichtet.
    '-------------------------------------------------------------------------------
    
    $regfile = "m32def.dat"
    $crystal = 16000000
    $baud = 9600
    
    
    Declare Sub Thermometer()
    
    Dim Temperatur As Word
    Config Scl = Portc.0                                        'Ports fuer IIC-Bus
    Config Sda = Portc.1
    
    Do
    
    Call Thermometer()
    
    Print Temperatur
    Print
    Waitms 500
    
    
    Loop
    
    
    '----------- Temperatur abfragen --------------------------------
    Sub Thermometer()
    Local Device As Byte
    Device = &H90
    Local Deviceread As Byte
    Local Lowtemp As Byte
    Local Hightemp As Byte
    
    Deviceread = Device + 1
    
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HEE 'Temperaturmessung anstoßen
    I2cstop
    
    
    I2cstart
    I2cwbyte Device
    I2cwbyte &HAA 'Temperaturmessung Lesekommando
    I2cstop
    
    I2cstart
    I2cwbyte Deviceread
    I2crbyte Lowtemp , Ack 'LSByte holen
    I2crbyte Hightemp , Nack 'MSByte holen
    I2cstop
    
    Temperatur = Lowtemp * 10
    If Hightemp = 128 Then
    Temperatur = Temperatur + 5
    End If
    Temperatur = Temperatur / 10
    End Sub
    'Ende -------------- Temperatur ----------------------------------------
    Leider bekomme ich immer nur 0 zugeschickt. Was mache ich falsch?

    mfg Luca

    Edit: "Device = &H90" heisst das alle Ports nach GND gezogen sind, also Hex90?
    Sollte ein Bild von mir nicht angezeigt werden, einfach eine PM schicken!

  9. #19
    Benutzer Stammmitglied Avatar von raidy
    Registriert seit
    26.09.2006
    Ort
    bei Stuttgart
    Beiträge
    52

    Programm richtig, vermutlich falsch verlötet

    Hallo,

    Dein Programm ist richtig. Genau so läuft es bei mir auch.
    Wenn Du immer 255, 65535 oder 0 als Antwort bekommst, so liegt dies ziemlich sicher an deiner Verlötung oder einer falschen I2C-Adresse.

    Also prüfe nochmals folgende Punkte:

    1) Hast Du irgenwelche Pins vertauscht SCL mit SDA
    2) Hast Du 5V und GND auf dem Chip /I2C_Bus.
    Falls du RN-Control hast, ist der 5V Jumper und der I2C Jumper gesteckt?
    3) Ja HEX90 heisst alle A0-A2 auf GND

    Übrigens: 0,255,65535 (je nach I2C-Chip) heisst eigentlich immer, daß das Programm den Baustein nicht gefunden hat.

    Mehr Ferndiagnose geht leider nicht.
    Gruß

    Zur Sicherheit nochmals das Datenblatt
    http://pdfserv.maxim-ic.com/en/ds/DS1621.pdf

  10. #20
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    09.07.2005
    Ort
    127.0.0.1
    Alter
    32
    Beiträge
    824
    Hallo

    Ich habe Heute noch mal alles duchprobiert, aber ich fand keinen Fehler:
    VDD: 4.97V
    GND: Gnd
    A0: Gnd
    A1: Gnd
    A2: Gnd
    Scl: Mit Port b.0 verbunden, spannung 4.97 - 4.96
    Sda: Mit Port b.1 Verbunden, spannung 4.97 - 4.96
    Tout: Nichts angeschlossen, Spannung 4.97V (ist das Normal?)

    Was könnte falsch sein?

    mfg Luca

    Edit: Ich habe jetzt schnell umgelötet, jetzt habe ich auf A0-A2 +5V, die Hex habe ich auf 9E eingestellt (im prog.), funktioniert aber immer noch nicht.
    Sollte ein Bild von mir nicht angezeigt werden, einfach eine PM schicken!

Seite 2 von 6 ErsteErste 1234 ... LetzteLetzte

Berechtigungen

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

12V Akku bauen