www.mikrocontroller.net

Forum: Compiler & IDEs TWI interface


Autor: Mario Schmitt (freak75)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich verwende die TWI Library von Peter Fleury. Dabei ist mir folgendes 
aufgefallen, bei Verwendung des Orginalcodes bleibt der Controller in 
Zeile 20 hängen (Beispiel 1).Wenn ich den Code folgendermassen abändere 
lauft das Programm fehlerfrei weiter (beispiel 2). Kann mir jemand 
dieses Verhalten erklären ?

Controller: ATMEGA664P
win-AVR 20100110


Beispiel 1:

    /* send stop condition */
10  TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);

  // wait until stop condition is executed and bus released
20  while(TWCR & (1<<TWSTO));

Beispiel 2:

    /* send stop condition */
  //TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);
  TWCR =   (1<<TWEN) | (1<<TWSTO);
  TWCR = (1<<TWINT);
  // wait until stop condition is executed and bus released
  while(TWCR & (1<<TWSTO));

Danke

freak75

Autor: sebastians (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab mal ins Datenblatt (ATmega16, hatte ich halt gerade zur Hand) 
geschaut...

Writing the TWSTO bit to one in Master mode will generate a STOP 
condition on the Two-wire Serial Bus. When the STOP condition is 
executed on the bus, the TWSTO bit is cleared automatically. In Slave 
mode, setting the TWSTO bit can be used to recover from an error 
condition. This will not generate a STOP condition, but the TWI returns 
to a well-defined unaddressed Slave mode and releases the SCL and SDA 
lines to a high impedance state.

Da du in deinem Beispiel 2 das Bit hier löschst:
TWCR = (1<<TWINT);
wartet das wohl einfach nicht bis die STOP condition gesendet wurde.

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.