Forum: Mikrocontroller und Digitale Elektronik Butterfly USI als TWI Master verwenden


von Daniel S. (danst0)


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

Das Header-File, benötigt die CPU-Taktfrequenz als F_OSC define.

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

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

von Daniel S. (danst0)


Lesenswert?

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

von Daniel S. (danst0)


Lesenswert?

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

von Εrnst B. (ernst)


Lesenswert?

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
Noch kein Account? Hier anmelden.