-
Ich kenne mich mit Bascom nicht aus, aber du verwendest TWAR und TWCR. Somit verwendest du Hardware I2C (TWI). TWAR ist das Adressregister (Two Wire Adress Register) und TWCR ist das Control Register (Two Wire Control Register). Wie du den Atmega als I2C Slave verwendest steht ab S177 im Datenblatt. Dort steht z.B. das das TWEA und TWEN Bit in TWCR "1" sein müssen. Bei dir ist das TWEA Bit aber nicht gesetzt (ist das 6te Bit). TWSTA und TWSTO dürfen nicht gesetzt werden.
MfG Hannes
-
So, jetzt habe ich mir das LIB-Paket von MCS Electronics gekauft und mich entschieden, für erste Versuche zwei Mega8 und Hardware-I2C zu verwenden, um es so unkompliziert wie möglich zu machen.
Trotzdem wirft das Ganze bei mir immer wieder neue Fragen auf, auf die vielleicht hier jemand die Antwort weiß:
1. Wenn I2C und TWI tatsächlich das gleiche sind, wie in der Bascom-Hilfe ja imer wieder mantrahaft wiederholt wird, weshalb gibt es dann für beides Befehle zur Konfiguration eines Slaves (CONFIG I2CSLAVE und CONFIG TWISLAVE)?
2. ist mir bei ersten Versuchen aufgefallen, dass der Befehl CONFIG I2CSLAVE lediglich zwei Labels benötigt (I2c_master_needs_data und I2c_master_has_data), während die Verwendung von CONFIG TWISLAVE gleich ein halbes Dutzend Labels verlangt (twi_addressed_goread, twi_gotdata, twi_stop_rstart_received, twi_addressed_gowrite, twi_master_needs_byte und twi_master_need_nomore_byte).
Wenn der Slave eine variable Anzahl an bytes empfangen soll wäre es doch sinnvoll, nach der korrekten Read-Addressierung eine Zählvariable auf 1 zu setzen, sie nach jedem empfangenen Byte um 1 zu inkrementieren, und damit ein Array zu füllen. Wie kann man so etwas denn lösen, wenn man den CONFIG I2CSLAVE-Befehl nutzt, und dementsprechend nur die Labels I2c_master_has_data und I2c_master_needs_data hat?
3. Mit dem Befehl CONFIG TWISLAVE kann ich bisher leider gar nicht rumexperimentieren, weil beim Kompilieren stets die Fehlermeldung "Illegal character [expected(, got "[TWI_CBTR]]" erscheint. Weiß jemand damit etwas anzufangen? (Habe die Bascom-Version 2.0.7.3)
-
Ja, so kenne ich es auch: TWI ist I2C; und das hat angeblich mit der Vermeidung von Lizenzgebühren zu tun.
Hast du mit der LIB nicht auch den Quellcode verfügbar? Besser noch: Dokumentation und Beispielprogramme ???
CONFIG TWISLAVE scheint die I2C-Spezifikation abzubilden (START, REPEATED START, ACK, NACK etc.).
CONFIG I2CSLAVE könnte eine höhere Abstraktionsebene sein, wo Daten per programmtechnischem Handshake ausgetauscht werden. (Es gibt da mit Sicherheit auch noch ein/zwei Datenregister, vllt. sogar die regulären physischen Register / deren Namen aus dem Controller-Manual !?)
-
Hallo,
auch ich möchte gerne mehrere Arduino_Nano (ATmega328P) über I2C verbinden ... 1 x Master 2-3 x Slave
möchte mit Bascom arbeiten ... als Master ja kein Problem aber als Slave ?
@Sauerbruch
bist Du zu einer Lösung gekommen ?
-
Hallo Feuerring,
ja, nach längerem herumpuzzeln mit dem LIB-Paket, das ich für ein paar Euros gekauft hatte, funktioniert es einwandfrei!
-
Hallo Sauerbruch,
kannst Du mir auch Details nennen, wo es gehangen hat und wie Du die LIB eingebunden und verwendest hast ...
Programm-Teile die die LIB verwenden wären glaube ganz hilfreich ...