OK, mein Beitrag über dedizierte I2C-Slave-ICs war schon am Thema vorbei.
Aber jetzt klinke ich mich besser aus, weil ich aus dem Code nichtmal rauslesen kann, ob es sich um TWI-Hardware oder eine Emulation in den Slaves handelt.
Werbung
OK, mein Beitrag über dedizierte I2C-Slave-ICs war schon am Thema vorbei.
Aber jetzt klinke ich mich besser aus, weil ich aus dem Code nichtmal rauslesen kann, ob es sich um TWI-Hardware oder eine Emulation in den Slaves handelt.
Ich würd´s Dir gerne verraten - wenn ich es selber wüssteAber jetzt klinke ich mich besser aus, weil ich aus dem Code nichtmal rauslesen kann, ob es sich um TWI-Hardware oder eine Emulation in den Slaves handelt.![]()
Mal sehen ob mich die I2c-Lib weiterbringt, ich werde jetzt noch ein wenig weiterpuzzeln!
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 Feuerring,
ja, nach längerem herumpuzzeln mit dem LIB-Paket, das ich für ein paar Euros gekauft hatte, funktioniert es einwandfrei!
Lesezeichen