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

Thema: Ansteuerung DA-Wandler Max5812 über I2C

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272

    Ansteuerung DA-Wandler Max5812 über I2C

    Anzeige

    E-Bike
    Hallo,

    ich habe ein kleines Problem mit der Ansteuerung des Max5812.

    Dazu habe ich natürlich das Datenblatt runtergeladen runtergeladen.
    Aber ein paar Verständnissprobleme habe ich dabei.

    Erstmal mein bisheriger Code. Er spricht den Max an aber beim auslesen des IC'snbekomme ich immer 255 zurück.

    Code:
    '============I2C DAC lesen/schreiben ==================================
    
    '=========== Für Max5812 Digital/Analo Wandler ========================
    '8MHz intern
    
    
    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 9600
    
    
    'SDA und SCL definieren
    Config Sda = Portc.1
    Config Scl = Portc.0
    
    
    Dim X As Word
    Dim A As Byte
    Dim B As Byte
    Dim Lesen As Byte
    
    X = 0
    
    '---- schreibe in Max5812M ----
    
    Print "**********************"
    
    'Do
    
    Print "Power Up Max5812"
    
    I2cstart
       I2cwbyte &H12                                            'Slave Adresse
       I2cwbyte &H01110011                                      'Power Up Device
    I2cstop                                                     'Stop I2C
    
    Print "sende Daten an Max5812"
    
    I2cstart                                                    'Start I2C
       I2cwbyte &H12                                            'Sende Slave Adresse (18,&H12)
       I2cwbyte &B11001001                                      'lade DAC mit Befehl und 4bit Daten
       I2cwbyte &B11111111                                      'nächsten 8bit?
    I2cstop                                                     'Stop I2C
    
    Wait 10
    
    '---- lese Daten aus Max5812 ----
    
    Print "lese Daten aus Max5812"
    
    I2cstart
       I2cwbyte &H13                                            'Leseadresse vom MAX
       I2cwbyte &B10000000 , Nack
       I2crbyte X , Nack                                        'lese Daten vom Max
    I2cstop
    
    Waitms 500
    
    Print "Wert " ; X ; " an Max5812 gesendet "                 'Ausgabe der geschriebenen Werte
    
    'Loop
    
    End
    Laut Datenblatt muss ich erst den Chip aus dem PowerDownModus holen. Danach spreche ich ihn wieder an und sende das Komando (Datenblatt S.10) das der DAc geladen werden soll und die Werte gleich umsetzen soll.
    Dabei habe ich gleich die erste Frage. Ich sende die ersten 4Bit und danach die zweiten 4Bit sind die Werte. Aber das ist ein 12bit DAC. Also müsste ich ja noch die restlichen 8bit senden.
    Leider passiert da nicht viel. Am Ausgang kommen aber trotzdem nur 0V raus. Deswegen wollte ich mal auslesen welchen wert ich da zurück bekomme. Aber ich bekomme immer 255 zurück. Das kann auch nicht sein, schließlich ist es ja auch eine Word Variable also müssten das 65535 sein.

    Irgendwie versteht der Chip nicht was ich will^^

    Hat jemand nen Tip wo mein Denkfehler liegt.

    Thx for help

    cu Arno
    Unser Wissen ist ein Tropfen, unser Unwissen ist wie ein Ozean.
    Sir Isaac Newton

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    06.11.2006
    Ort
    Lörrach
    Alter
    56
    Beiträge
    24
    Hallo Arno,

    ich hab eben in das Datenblatt geschaut. Du hast als Power-Up Byte "I2cwbyte &H01110011" - lt. Datenblatt (Tabelle 1 Seite 7 und Tabelle 3 Seite 10 - Power-Up) sollten für Power up die Bits PD0 und PD1 auf 0 sein, Dir beiden 1er bei Dir bewirken dass der AD-Wandler in Power-Down-Mode 2 schaltet.

    Gruß
    Udo

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    17.11.2005
    Beiträge
    272
    Hallo,

    also der DA-Wandler läuft. War mein Fehler. Habe die falsche Slave Adresse verwendet.

    Hier mal mein Testprogramm:
    Code:
    $regfile = "m16def.dat"
    $crystal = 8000000
    $baud = 9600
    Config I2cdelay = 10
    
    
    'SDA und SCL definieren
    Config Sda = Portc.1
    Config Scl = Portc.0
    
    
    
    Const Max5812wr = 36                                       'Max5812 Write Adress
    Const Max5812rd = 37                                       'Max5812 Read Adress
    Const Power_up = 64                                         'Power UP
    
    Dim Wert As Byte
    
    
    '---- schreibe in Max5812M ----
    
    Do
    
    Input "Wert für DA (0 - 255):" , Wert
    
    
    I2cstart                                                    'Start I2C
       I2cwbyte Max5812wr                                       'Adresse Slave
       I2cwbyte Power_up                                        'Power_Up Device
       I2cwbyte &B11001100                                      '4bit Befehl und 4bit wert
       I2cwbyte Wert
    I2cstop
    
       Wait 1                                                   'warten
    
    Print "Wert" ; B
    Print "Error : " ; Err                                      'show error
    
    Loop
    
    End
    Jetzt habe ich nur noch ein Problem. Ich möchte gern eine Zahl von 0 bis 4095 eingeben und der DA-Wandler soll dann den entsprechenden Wert ausgeben.

    Aber ich muss den Wert ja verteilt auf zweimal senden. Einmal die oberen 4bit und anschließend die unteren 8Bit. Wie kann ich die Word Variable teilen um es in zwei Byte Variablen umzuwandeln.

    habe mir überlegt das ich die Teilung mit Hilfe einer Schleife und eines Strings mache. Aber wie kann ich den zerteilten String wieder zusammenfügen. Weil durch die Schleife habe ich ja dann 12 einzelne Wert. Ich brauche aber 4 und 8 bit Zahlen.

    oder gibt es andere Möglichkeiten?

    thx Arno
    Unser Wissen ist ein Tropfen, unser Unwissen ist wie ein Ozean.
    Sir Isaac Newton

Berechtigungen

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

LiFePO4 Speicher Test