Olle_Filzlaus
03.05.2007, 21:38
Hallo,
ich habe ein kleines Problem mit der Ansteuerung des Max5812.
Dazu habe ich natürlich das Datenblatt runtergeladen (http://datasheets.maxim-ic.com/en/ds/MAX5812.pdf) 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.
'============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
ich habe ein kleines Problem mit der Ansteuerung des Max5812.
Dazu habe ich natürlich das Datenblatt runtergeladen (http://datasheets.maxim-ic.com/en/ds/MAX5812.pdf) 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.
'============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