Hallo liebe Roboternetz Gemeinde.

Bevor ich mit meiner Frage loslege wollte ich nur mal loswerden, dass ich diesen Forum suuper finde und, dass ich jede Menge über Microcontroller und Roboter gelernt habe seit dem ich hier eure Beiträge lese......

So... nun zu meinem Problem....

Ich benutze einen ATMEGA16 Microcontroller und da mir die 10 Bit des onboard AD Wandlers für meinen Messaufbau nicht ausreichen habe ich mir einen externen 12 Bit AD Wandler von Analog Devices besorgt... AD7994. Dieser hat 4 Channels und eine I2C Schnittstelle... Normalerweise ist eine I2C Schnittstelle nicht schwierig zu programmieren... aber bei mir hackts glaube ich bei den Registern... jedenfalls bekomme ich keine Werte aus dem ADC ausgelesen... könnt ihr mir helfen?

Hier ist mein code... z.Z. läuft die Ansteuerung über die Tastatur aber später wollte ich den ADC entweder in der Do loop oder mit Interrupt (timer0) auslesen...
Code:
'AD Wandler am I²C AD7994

$regfile = "m16def.dat"
$crystal = 8000000
$baud = 57600
$hwstack = 40
$swstack = 10
$framesize = 40

Config Scl = Portc.0       'I2C Schnittstelle
Config Sda = Portc.1

Const Ad7994w = &B01000010       'Schreibadresse
Const Ad7994r = &B01000011       'Leseadresse
'Registerselect
Const Configregister = &B11110010       'config Register
Const Conversionregister = &B11110000       'conversion result register
Const Cycletimerregister = &B11110011       'cycle Timer Register
Const Datalowch1 = &B11110100       'Data Low Ch1
Const Datahighch1 = &B11110101       'Data High Ch1
Const Hysteresisch1 = &B11110110       'Hysteresis ch1
Const Datalowch2 = &B11110111       'Data low ch2
Const Datahighch2 = &B11111000       'Data High ch2
Const Hysteresisch2 = &B11111001       'Hysteresis Ch2
Const Datalowch3 = &B11111010       'Data Low Ch3
Const Datahighch3 = &B11111011       'Data High Ch3
Const Hysteresisch3 = &B11111100       'Hysteresis Ch3
Const Datalowch4 = &B11111101       'Datalow ch 4
Const Datahighch4 = &B11111110       'Datahigh ch 4
Const Hysteresisch4 = &B11111111       'Hysteresis ch4

Const Confbyte = &B11111000       'config Byte
Const Convresultreg = &B11110000       'wandlungsergebnisregister
Const Convresultregch1 = &B00010000

Dim Readvar1l As Byte , Readvar1h As Byte
Dim Readvar2l As Byte , Readvar2h As Byte
Dim Readvar3 As Byte
Dim Writevar1 As Byte
Dim Writevar2 As Byte
Dim I As Byte
'On Timer0 Oncount
'Config Timer0 = Timer , Prescale = 1
'Enable Timer0
'Enable Interrupts

Do

If Usr.rxc = 1 Then 'Wenn Byte empfangen...
    I = Udr         'Byte aus UART auslesen
    Select Case I
    Case "a"
    Print "schreibe configregister"       'for reading conversion register
    I2cstart
    I2cwbyte Ad7994w       'single byte write action
    I2cwbyte Configregister
    I2cwbyte Confbyte
    I2cstop
    I2cstart
    I2cwbyte Ad7994w
    I2cwbyte Configregister
    I2cstop
    I2cstart        'two byte read eather direct read or i have to
    I2cwbyte Ad7994r       ' point to register first... we'll see
    I2crbyte Readvar1h
    I2crbyte Readvar1l
    I2cstop
    Print "printing configsettings"
    Print Bin(readvar1h) ; "," ; Bin(readvar1l)
    Case "s"
    Print "ihalt des conversionregisters fuer ch1"
    I2cstart
    I2cwbyte Ad7994w
    I2cwbyte Convresultregch1
    I2cstop
    I2cstart
    I2cwbyte Ad7994r
    I2crbyte Readvar2h , Ack
    I2crbyte Readvar2l , Nack
    I2cstop
    Print Bin(readvar2h) ; "," ; Bin(readvar2l)       'es kommt 255,255 also im register ist etwas?
    Case "d"

    Case "f"

    Case "g"

    Case "h"

    Case Else
      Print "Unbekannter Befehl"
    End Select
  End If





Loop
End
Die I2C schnittstelle klappt, also die Pullup Widerstände habe ich an Vcc angeschlossen.
Ach ja und die Datasheet hätt ich gerne angefügt ist aber anscheinend zu groß also deswegen dann hier der Link:
http://www.farnell.com/datasheets/68190.pdf
... übrigens habe ich noch nie eine schlechteren Datasheet gelesen...

Danke

Boogyman