Hallo zusammen, ich versuche im Moment die Application Note von ATMEL zum Thema USI als TWI Master auf den GCC zu portieren. Leider ist dieses Unterfangen nicht wirklich von Erfolg gekrönt. Die Hauptroutine zum Datensenden scheint in irgendeiner Schleife festzustecken. Hat irgendwer eine funktionierende Bibiliothek für den AVR-GCC geschrieben oder gesehen? Vielen Dank, Daniel
Ich könnte nen TWI/I²C Master mit dem USI von nem Tiny2313 bieten... (auch die Atmel AN auf AVR-GCC umgesetzt) Sind die USIs halbwegs kompatibel? /Ernst
Das Header-File, benötigt die CPU-Taktfrequenz als F_OSC define.
Und das Source-File. Hat bei mir aber nicht 100%ig sauber funktioniert, ab und zu hat sich der Bus "weggehängt", war aber auch eine viel zu lange Leitung für I²C... Evtl. mit Watchdog einsetzen. /Ernst
Vielen Dank für die Antworten! Kann es sein, dass mein Compiler irgendwelche komischen Probleme mit Unions hat? Zeile 46 ist das Ende der "struct". usii2c/USI_TWI_Master.c:46: warning: declaration does not declare anything usii2c/USI_TWI_Master.c: In function 'USI_TWI_Start_Transceiver_With_Data': usii2c/USI_TWI_Master.c:96: error: 'union USI_TWI_state' has no member named 'addressMode' usii2c/USI_TWI_Master.c:131: error: 'union USI_TWI_state' has no member named 'masterWriteDataMode' usii2c/USI_TWI_Master.c:161: error: 'union USI_TWI_state' has no member named 'addressMode' usii2c/USI_TWI_Master.c:161: error: 'union USI_TWI_state' has no member named 'masterWriteDataMode' usii2c/USI_TWI_Master.c:172: error: 'union USI_TWI_state' has no member named 'addressMode' usii2c/USI_TWI_Master.c:178: error: 'union USI_TWI_state' has no member named 'addressMode' Hätte jemand eine Idee? Viele Grüße, Daniel
Das Problem hat sich erledigt. Ich musste die Union etwas umschreiben. Jetzt hab ich nur die folgende Frage: Für den Fall, dass der Bus leer ist, also keine Slaves dranhängen, dürfte doch die Routine nicht hängen bleiben, sondern mit irgendeinem Fehler durchlaufen? Bei mir bleibt sie nämlich noch immer irgendwo hängen. Beste Grüße, Daniel
Wie gesagt, bei mir hats auch nicht sauber funktioniert. Wenn die Slave-Antwort irgendwie verloren ging (Langes Kabel...) hing das ganze. Entweder in die Routinen nen Timeout einbauen, oder den AVR-Watchdog dafür verwenden.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.