- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 11

Thema: I2C und DS1631 allgemeine Grundlagen

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Hallo Klebwax!


    Vielen Dank für deine Antwort.
    Nach nochmaligen Durchlesen des entsprechenden Absatzes im Datenblatt habe ich jetzt auch gesehen, dass das R/W-Bit beim ersten Mal 0 sein muss.

    Hier mein erster Versuch:
    Code:
    Do
    
       If S2 = 0 Then
    
          Led = 0
    
          Waitms 500
    
          Incr Count
    
          I2cstart
          I2cwbyte &H90
          I2cwbyte &HAA
          I2crepstart
          I2cwbyte &H91
          I2crbyte Var1 , Nack
          I2crbyte Var2 , Ack
          I2cstop
          Waitms 10
    
          Cls
          Lcd "Gelesen:"
          Locate 2 , 1
          Lcd "Var1=" ; Var1
          Lcd "  "
          Lcd "Var2=" ; Var2
          Lcd "  "
          Lcd Count
    
          Waitms 100
    
          Led = 1
    
       End If
    
    Loop
    Als Var1 bekomme ich 22, wenn ich die Platine mit dem Föhn "anföhne" steit dieser Wert kontinuierlich auf etwa 38. Var2 bleibt immer bei 255. Ich nehme an, dass der DS1631 standardmäßig im 8-bit Modus arbeitet?
    Grüße
    Thomas

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Zitat Zitat von Thomas E. Beitrag anzeigen
    I2cwbyte &H91
    I2crbyte Var1 , Nack
    I2crbyte Var2 , Ack
    Nack und Ack müssen genau anders herum.

  3. #3
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Zitat Zitat von for_ro Beitrag anzeigen
    Nack und Ack müssen genau anders herum.
    Danke. Hätte ich die Bascom-Hilfe besser gelesen wäre mir dieser Fehler erspart geblieben:
    Specify ACK if there are more bytes to read.
    Specify NACK if it is the last byte to read.

    Jetzt bekomme ich die zwei Werte. Der erste scheint relativ konstant zu sein, der zweite springt bei Änderung der Temperatur. Interessant wird jetzt die Umrechung. Ich versuche, einen Lösungsansatz zu finden.
    Grüße
    Thomas

  4. #4
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Ich habe mich jetzt stundenlang an der Berechnung versucht, bin aber nicht wirklich zufrieden damit:
    Das erste Byte ergibt die Ganzzahl für die Temperatur, zusätzlich bestimmt Bit 7 das Vorzeichen. Das zweite Byte besteht eigentlich nur aus vier Bits, weil die letzten vier Bits immer null sind.
    Somit:
    Byte1 = Ganzzahl
    Byte2 viermal nach rechts shiften und das Ergebnis mit 0,0625 multiplizieren ergibt jenen Wert, der zur Ganzzahl addiert werden muss.

    Am Papier sowie am µC funktioniert es, aber durch die notwendige Single-Variable frisst es einiges an Speicherplatz.

    Später möchte ich die Werte in einem EEPROM ablegen, ich nehme an das es einfacher ist, die beiden Bytes alleine nacheinander abzuspeichern (Zelle 1: Byte1, Zelle2: Byte2) und erst vor der Ausgabe umzuwandeln. Das Abspeichern einer Single-Variable wäre mit großem Aufwand verbunden, oder sehe ich das falsch?
    Grüße
    Thomas

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    16.02.2006
    Beiträge
    1.113
    Hallo Thomas,
    für eine Single müsstest du halt 4 Byte abspeichern. Halte ich hier aber sowieso für unsinnig, da du nur 16 verschiedene Werte hinter dem Komma hast.
    Ich habe es bei mir so gemacht, dass ich die 16 berechneten Werte in Data Befehlen abgespeichert habe. Die legst du einmal fest und gibst sie dann nur noch nach dem Komma aus. Das Addieren habe ich also auch nicht gemacht. Warum erst eine Single verwenden um sie dann für die Ausgabe wieder umzuwandeln.
    Bei Vergleichen habe ich dann nur den Ganzzahlanteil genommen. Damit hast du dann auch gleich eine Hystere mit eingebaut.

  6. #6
    Erfahrener Benutzer Roboter Experte Avatar von Thomas E.
    Registriert seit
    29.12.2011
    Beiträge
    638
    Hallo For_ro!


    Danke für deine Antwort.
    Du verwendest eine interessante Variante, aber ich habe mich bereits mit der Single-Methode abgefunden. Es ist einfacher und geht relativ schnell. Ausserdem benötige ich in meiner Anwendung sowieso weitere Single-Berechnungen. Interresanterweise steigt der Verbrauch an Flash-Speicher zwar mit der ersten Deklaration einer Single-Variablen stark an, bei der Deklaration von weiteren Single-Variablen wird allerdings nur wenig mehr Speicherplatz verbraucht.
    Grüße
    Thomas

Ähnliche Themen

  1. DS1631 unter Bascom
    Von tobuc0 im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 26.02.2010, 17:45
  2. IIC-Temp.-sensor DS1631 Ausleseproblem
    Von Imrahil im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 4
    Letzter Beitrag: 25.09.2008, 21:38
  3. M-Unit und DS1631-Aufloesung
    Von Kauz im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 2
    Letzter Beitrag: 10.03.2007, 05:47
  4. DS1631 + Pullup
    Von philiph im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 25.09.2006, 18:17
  5. DS1631 Problem
    Von philiph im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 17.09.2006, 12:28

Berechtigungen

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

12V Akku bauen