Forum: Mikrocontroller und Digitale Elektronik TWI mit AVR311 betreiben


von Christian S. (mueke)


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

von Jörg X. (Gast)


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

von Christian S. (mueke)


Lesenswert?

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

von Christian S. (mueke)


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

von Jörg X. (Gast)


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

von Christian S. (mueke)


Lesenswert?

Nutze das AVR-Studio. Danke für deine Hilfe

von Christian S. (mueke)


Lesenswert?

Wo finde ich denn diese "External Source Files"???

von Jörg X. (Gast)


Angehängte Dateien:

Lesenswert?

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

hth. Jörg

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.