www.mikrocontroller.net

Forum: Codesammlung [ASM] Hardware TWI-MASTER Interrupt basierend für Mega AVR


Autor: Steffen H. (avrsteffen)
Datum:
Angehängte Dateien:

Während meines momentan laufenden Projektes ist dieses TWI Modul
entstanden, welches ich euch nicht vorenthalten möchte.

Natürlich wieder in ASM. Vielleicht kann es irgendjemand gebrauchen und
ich konnte damit weiter helfen.

Ich habe mal noch ein Beispiel mit angehangen, damit man weiß wie das
Modul benutzt werden kann.

Grüße Steffen
Autor: Steffen H. (avrsteffen)
Datum:
Angehängte Dateien:

Ich habe jetzt gerade ein Problem erkannt:

Wenn der TWI Interrupt durch irgend einen anderen Interrupt aufgehalten
wird, dann verzögert sich komischerweise auch die Stop-Bedingung. Dieses
Verhalten ist allerdings in keinem Datasheet nachzulesen.

Das TWI_busy Flag wird schon dann gelöscht, wenn die TWI-Hardware als
nächste Aktion ein STOP ausführen soll.
 Dadurch weiß man natürlich nicht, ob die TWI-Hardware die
STOP-Bedingung auch schon auf den BUS gebracht hat. Wenn man dann im
ungünstigsten Fall sofort auf ein gelöschtes TWI_busy Flag reagiert und
eine neue Datenübertragung per START einleitet, ist die Zeit zwischen
STOP und START auf dem I2C Bus sehr kurz. Und wahrscheinlich so kurz,
dass der Slave dies nicht mehr verarbeiten kann und ein NACK auf die
gültige Adresse sendet!

Hab das Problem mal im Anhang grün eingekreiselt.

In welcher Specs/Appnote von Atmel findet man die TWI Hardware Timings?
Oder wie könnte man dieses Problem lösen?

Steffen
Autor: Steffen H. (avrsteffen)
Datum:

Hallo,

Ich suche immer noch nach Spezifikationen/Timings der AVR Controller.

Hat jemand einen Tip? Wo hat ATMEL sowas versteckt?
Autor: Bernhard S. (bernhard)
Datum:

@Steffen

>Wenn der TWI Interrupt durch irgend einen anderen Interrupt aufgehalten
>wird, dann verzögert sich komischerweise auch die Stop-Bedingung.

Das muss auch so sein, denn der µC kann nur einen Interrupt zur gleichen
Zeit abarbeiten. Natürlich kann man "verschachtelte" Interrupts zulassen
durch "SEI" in der Interrupt-Routine.

Ich füge gern eine angemessene Pause nach einem STOP ein, damit die
SLAVES
auf STOP regaieren könnnen, es kann vorkommen, dass nach einem Stop
der SLAVE noch Daten verarbeiten muss. Gib ihnen die Zeit ;-)

Gruß

Bernhard
Autor: Steffen H. (avrsteffen)
Datum:
Angehängte Dateien:

Hab's gefunden. TWI Characteristics steht in jedem AVR Datasheet unter
Electrical Characteristics.

Übrigens, die Zeit zwischen STOP -> START nennt sich laut Datasheet
tBuf und sollte mindestens _1.3µs_ lang sein.
Autor: Steffen H. (avrsteffen)
Datum:

Hmm, ich muss jetzt zusehen dass mein TWI_busy erst durch einem realen
"STOP" auf dem Bus zurückgesetzt wird. Da Hardwareseitig ja kein
Interrupt durch beendeter Aktion "STOP" auf dem Bus ausgeführt wird muss
man das irgendwie anders detektieren. Mal sehen wie ich das machen kann.
Ich denke dabei an einen wait to PIN CHANGE INTERRUPT auf SDA wenn die
Aktion "twi_stop" in das TWCR eingetragen wird.

Na mal sehen, ob das klappt
Autor: Steffen H. (avrsteffen)
Datum:
Angehängte Dateien:

Hallo,

So geht es. Mittels Pin_Change Interrupt auf den SDA Pin.
Das TWI_busy Flag wird jetzt erst bei einer STOP-Bedingung auf dem Bus
gelöscht.
Somit kann man nun gleich nachdem das TWI_busy Flag wieder '0' ist einen
neuen TWI-Start auslösen.

LG
Steffen
Beitrag #2398752 wurde vom Autor gelöscht.

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




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net