So, wenn ich nochmal zusammenfassen darf:

Zitat Zitat von Frank
So noch eine Berichtigung: Das die I2C-Slave Lib nicht mit dem I2CSEND Befehl zurecht kam, lag auch an einem Bug in den normalen I2C-Befehlen von Bascom.
------
Bei der Bascom Lib ist es generell so das das Clock Signal vom Slave auf Low gelegt wird bis die Bearbeitung der Basic-Routine 'I2c_master_has_data' abgeschlossen ist. Wenn dies also zu lange dauert, dann muss der Master warten. Wenn das Protokoll richtig verwendet wird, ist das auch kein Problem. Das Hauptprogramm stoppt dann nur, während die Funktion 'I2c_master_has_data' abgearbeitet wird.
------
Aber wie gesagt, wenn der Master nicht wartet, dann gibt es ein Problem!
Das witzige daran ist, das selbst die I2C-bascom Funktionen sich offenbar nicht korrekt daran halten. Zwar kommt es hier nicht zu einem "hängenbleiben", aber es werden I2C-Übertragungen übergangen (kommen also nicht beim Slave an). .

so ich glaub das is mir auch passiert, wobei ich denke daß der master einfach nicht prüft ob der slave schon fertig ist:---->

For I = 1 To 101
adresse = I
sendebyte = 2*i
Gosub Schreibebytei2c:
Next I


Schreibebytei2c:
I2cstart
Waitms 10
I2cwbyte i2cadresse
Waitms 10
I2cwbyte adresse
Waitms 10
I2cwbyte sendebyte
Waitms 10
I2cstop
Waitms 10
Return

----------->
hier speichert er nur jeden 4 ten wert bzw wenn ich das i2cdelay auf 10 stelle jeden 2ten wert wenn man die waitms entfernt. ich denke das liegt an dem fehler in der i2clib?? er wartet wohl nicht auf meinen eeprom baustein bis er fertig ist und sendet immer weiter obwohl der I2C slave noch garnicht empfangsbereit ist. (der slave braucht 5-20ms um einen wert zu verarbeiten). ich weiß auch nicht genau ob alle waitms benötigt werden aber so funktionierts auf jedenfall.