mikrocontroller.net

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


Autor: Daniel Stengel (danst0)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Εrnst B✶ (ernst)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Das Header-File, benötigt die CPU-Taktfrequenz als F_OSC define.

Autor: Εrnst B✶ (ernst)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Stengel (danst0)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Stengel (danst0)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.