Hi
Ich muß mein gesagtes etwas revidieren! Mit der Software I2C LIB von Bascom kann sehr wohl ein Hauptprogramm nebenher laufen.

Es gibt da nur ein paar Dinge die man beachten muß. So müssen alle am Bus befindlichen I2C Teilnehmer auch das I2C Protokoll korrekt beherrschen. Und das ist leider bei selbst gebastelten Routinen nicht immer der Fall. Beispielsweise ist vielen (auch bis vor kurzem mir) nicht bekannt, das der SLAVE den Master bei der Übertragung anhalten kann indem er von sich aus das Clock Signal auf Masse hält. Der Master muß also immer kontrollieren ob das Clock Signal auch wirklich High ist wenn er es nicht auf Low zieht. Das wird von vielen Routinen offenbar nicht berücksichtigt weshalb es dann zu Problemen kommt. Das war auch der Grund warum das Hauptprogramm bei mir nicht weiter lief, es lag an einer I2C Routine für den Serbobaustein (wird inzwischen geändert). Dadurch ist die Bascom LIB nicht mehr aus dem Interrrupt raus gekommen.

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 muß 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).
Offenbar hat der Bascom Entwickler selbst nicht daran gedacht, was er später in der Libary dokumentiert hat.
Ich gehe mal davon aus das dies bald korrigiert wird.

Im Augenblick bleibt einem also nichts anders übrig als in der Funktion 'I2c_master_has_data' nicht so zeitaufwendige Dinge zu machen. Wenn man sich daran hält, dann gibts keine Probleme!

Gruß frank