mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI mit AVR311 betreiben


Autor: Christian S. (mueke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,
hat einer von euch evtl Erfahrung mit der AppNote "AVR311: Using the TWI 
module as I2C slave" von Atmel?
Ich habe mir die Dokumentation angesehen und nach ein bisschen 
Einarbeitungszeit, steige ich dahinter wie das ganze funktioniert. Einen 
Problem habe ich aber noch, was ich nicht verstehe:

Mein Slave soll mehrere Datenbytes an einem Stück empfangen (Menge wird 
bestimm aus dem ersten Datenbyte). Maximal sind es 10Byte inklusive 
Adresse.

Wenn ich jetzt das TWI-Modul richtig verstanden habe, springt er bei 
jeder aktion des TWI in die ISR. Wie weiß ich aber nun in meinem 
Hauptprogramm, wann die Datenbytes alle vollständig empfangen wurden? 
Ich möchte ja nicht schon das 3.Byte abfrage, obwohl dieses eigentlich 
noch garnicht empfangen wurde, also noch ein alter Wert darin steht?

MfG
Muecke

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst die Funktion " TWI_Transceiver_Busy" benutzen -- die liefert 
True (d.h. !=0) zurück, sobald sich die ISR abgeschaltet hat, d.h. eine 
Stop-condion auf dem Bus war. Diese Funktion return'ed gleich, muss also 
regelmäßig aufgerufen werden (z.B. in der Mainloop).

hth. Jörg

Autor: Christian S. (mueke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so,
also wird erst aus der ISR gesprungen, sobald eine STOP-.Condition auf 
den BUS  gegeben wird?

Autor: Christian S. (mueke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK. Habe mir die Funktion nochmal genau angeschaut... Mit dem 
Zusammspiel der anderen Funktionen. Verstehe das jetzt auch soweit.

Jetzt habe ich nur ein #include problem.
Ich habe die Files TWI_slave.c und TWI_slave.h in meinem Projektordner 
(AVR Studio4). Jetzt mache ich den Befehl #include "TWI_slave.h" wie in 
der Beschreibung Implementation beschrieben. Wenn ich jetzt aber eine 
Funktion aufrufe bekomme ich einen Error: undefined reference to 
<Funktionsname>.

Wenn ich die TWI_slave.c zusätzölich includiere bekopmme ich auch wieder 
errors mit dem Inhalt, dass ich zwei Definitionen der selben Funktion 
habe.
Aber in dem Besipielprogramm, was debei ist, wird doch auch nur die 
TWI_slave.h includiert...

Wie löse ich diese Problem?

MfG
Muecke

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst die C-Datei zu deinem Projekt hinzufügen. Ich weiß aber nicht 
welchen Compiler/IDE du nutzt (IAR wahrscheinlich?), aber irgendwo kann 
man zusätzliche C-Dateien einbinden - include't werden normalerweise 
nicht. Beim GCC kommen die ins Makefile, bei AVR-Studio unter "external 
source files".

hth. Jörg

Autor: Christian S. (mueke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nutze das AVR-Studio. Danke für deine Hilfe

Autor: Christian S. (mueke)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo finde ich denn diese "External Source Files"???

Autor: Jörg X. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt ein(-e,-en ?) AVR-GCC-Toolbar, siehe Anhang ;)

hth. Jörg

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.