Liebe Experten,

seit ein paar Tagen mache ich erste Experimente mit externen EEPROMs, und habe mir hierzu einen 24C65 gekauft.

Um mit dieser neuen Materie vertraut zu werden, wollte ich als erstes einfach nur ein einziges Byte an einem bestimmten Speicherplatz ablegen, es anschließend wieder auslesen und auf einem LCD anzeigen.

Mein Code hierfür sieht so aus:

Code:
$regfile = "m8def.dat"
$crystal = 1000000

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.6 , Db5 = Portd.5 , Db6 = Portb.7 , Db7 = Portb.6 , E = Portd.7 , Rs = Portb.0
Initlcd
Cursor = Off
Cls

Config Sda = Portd.3
Config Scl = Portd.2
I2cinit

Dim Z As Byte

Do

Cls
Locate 1 , 1
Lcd "Schreiben:"
Waitms 500

I2cstart
I2cwbyte &B10100000                                         '24C65, A2-A0 = 0, Schreiben
I2cwbyte &B00000000                                         'H-byte Speicheradresse
I2cwbyte &B00000010                                         'L-Byte Speicheradresse
I2cwbyte 5
I2cstop

Locate 1 , 1
Lcd "Lesen:"
Waitms 500

I2cstart
I2cwbyte &B10100000                                         '24C65, A2-A0 = 0, Schreiben
I2cwbyte &B00000000                                         'H-byte Speicheradresse
I2cwbyte &B00000010                                         'L-Byte Speicheradresse
I2cstart
I2cwbyte 10100001                                           '24C65, A2-A0 = 0, Lesen
I2crbyte , Z , Nack
I2cstop

Cls
Locate 1 , 1
Lcd Z
Wait 1

Loop
Allerdings läuft alles in extremster Zeitlupe ab - Zwischen den LCD-Meldungen "Lesen" und "Schreiben" vergehen Minuten (!), und für die ausgelesene Variable Z wird 255 angezeigt (obwohl der Wert "5" in den Speicher geschrieben werden soll).

Die Taktfrequenz stimmt, ich habe versuchsweise mal eine LED-Blinksequenz mit 1Hz vor die Do-Loop-Schleife gesetzt, die läuft korrekt ab.

Beim 24C65 habe ich die Adresseingänge A2-A0 auf GND gelegt, und die SDA-Leitung über 2k2 auf +5V. Interessanterweise sehe ich mit dem Oszi keinerlei "Traffic" auf den SDA- und SCL-Leitungen. Ich habe SDA und SCL auch schon mal auf andere Ports des Mega8 gelegt - genau das gleiche. Das DDR-Register des SCL-Ausganges habe ich auch versuchsweise mal auf 1 gesetzt (obwohl das ja mit "I2CINIT" schon erledigt sein sollte) - ebenfalls ohne Erfolg.

Hat jemand irgendeine Idee, was ich falsch mache??