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...
Die I2C schnittstelle klappt, also die Pullup Widerstände habe ich an Vcc angeschlossen.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
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







Zitieren

Lesezeichen