Hallo Leute,

Habe aus dem RN-Wissen ein paar Codeschnipsel entnommen zum Lesen und schreiben von I2c-EEPROMs. Habe den EEPROM auch richtig angeschlossen, auch die Pull-Ups sind dran.

Aber es geht nicht. Als gelesenen Wert erhalte ich immer "255".
Hier mein Code:

Was mache ich falsch??
Bitte helft mir auf die Sprünge

Danke, Andreas
Code:
$regfile = "m8def.dat"                                      ' Chip auswählen
$crystal = 3686400                                          'hier Taktfrequenz eintragen
$baud = 9600                                                'Baudrate RS232
'
Config Lcd = 16 * 2                                         'LCD-Display configurieren
Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portd.7 , Db6 = Portd.6 , Db7 = Portd.5 , E = Portb.1 , Rs = Portb.2
'
Config Scl = Portc.5                                        'PINs für I2C Bus
Config Sda = Portc.4
I2cinit
'
Dim X As Byte
Dim A As Word                                               'der wert, welcher ins EEPROM geschrieben werden soll
Dim B As Word
Dim Schreiben As Byte
Dim Lesen As Byte

'Die Adresse muß als Word-Variable definiert werden (Word=16Bit=0...65535)
'Damit kann ein EEPROM mit 256KBit (24C256) angesprochen werden (Adressen von 0...32768)
'und auch einer mit 512KBit (24C512). Adressbereich hier 0...65535
Dim Adresse As Word At $160                                 'Die Adresse als Word-Variable
Dim Low_adresse As Byte At $160 Overlay                     'Zeiger auf das erste Byte
Dim High_adresse As Byte At $161 Overlay                    'Zeiger auf das zweite Byte
'
Config Adc = Single , Prescaler = Auto                      'AD-Wandler starten
Start Adc
'
Ddrb = &B00000000                                           'Ein-Ausgänge definieren
'Ddrc = &B00000000
Ddrd = &B00010000
'
Initlcd                                                     'LCD initialiesieren
Cursor Off
Cls
'
'
Upperline
Lcd " Hallo AVR"
Wait 2
Cls



'===================Hauptprogramm===============================================
'Do

'----schreiben----
For Adresse = 1 To 10                                       'Adresse geht über die Byte-Grenze
Incr X                                                      '1 bis Überlauf
'
'Disable Interrupts
I2cstart                                                    'Start
I2cwbyte &HA0                                               'Sende Slavadresse
I2cwbyte High_adresse                                       'Sende Speicheradresse High
I2cwbyte Low_adresse                                        'Sende Speicheradresse  LOW
I2cwbyte X                                                  'Sende Wert
I2cstop                                                     'stop
Waitms 10
'Enable Interrupts
'
Locate 1 , 1
Lcd "->Adr." ; Adresse ; "Wert=" ; X ; "  "                 'Anzeige vom schreiben
Waitms 500
Next Adresse

'---lesen----
'Disable Interrupts
For Adresse = 1 To 10
I2cstart                                                    'Start
I2cwbyte &HA0                                               'Sende Slavadresse +1 für Schreiben
I2cwbyte High_adresse                                       'Sende Speicheradresse High
I2cwbyte Low_adresse                                        'Sende Speicheradresse Low

I2cstart                                                    'Start
I2cwbyte &HA1                                               'Sende Slavadresse +1 für Lesen
I2crbyte Lesen , Nack                                       'Lese Adresse vom EEprom
I2cstop                                                     'Stop
'Enable Interrupts
'
Locate 2 , 1
Lcd "<-Adr." ; Adresse ; "Wert=" ; Lesen ; "  "             'Anzeige vom lesen
Waitms 500
Next Adresse

'loop
End