www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATtiny84 - USI - Port defnition


Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
in der Atmel APP Note AVR312 wird vorgestellt wie das USI IF als I2C 
slave konfiguriert wird. Der Demo Code läuft einwandfrei auf einem 
ATtiny84. Laut Demo Code werden die Port Pins wie folgt initialisiert:

PORT_USI |=  (1<<PORT_USI_SCL);  // Set SCL high
PORT_USI |=  (1<<PORT_USI_SDA);  // Set SDA high
DDR_USI  |=  (1<<PORT_USI_SCL);  // Set SCL as output
DDR_USI  &= ~(1<<PORT_USI_SDA);  // Set SDA as input

An der Stelle ist mir nicht klar:
1.) Warum der SCL Pin des slave (!) als output konfiguriert wird. ( Wenn 
ich die SCL Konfiguration auskommentiere klappt die Kommunikation nicht 
)

2.) Trotz externer Pull Up Widerstände der interne SDA Pull Up aktiviert 
werden muss. ( Wenn ich die PORT_USI |=  (1<<PORT_USI_SDA); Zeile 
auskommentiere klappt die Kommunikation nicht )


Hat jemand eine Idee ?

Autor: Mobius (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Weil SCL low gezogen wird, wenn ein a) Start-Condition erkannt wird 
und b) wenn ein Counter overflow passiert. Damit verzögert der Slave die 
Kommunikation mit dem Master bis die Daten im USIDR drin stehen (und die 
betreffende Interrupt-Flag gelöscht wurde).

2) Sobald USI als TWI konfiguriert wird, sind die Pins Open-Drain. 
Folglich reagiert der Ausgang nur auf ein 0 im Port.

Steht alles im Datenblatt ;)
lg
Mobius

Autor: Bernd (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verstehe ich noch nicht...

1.) Ab wann übernimmt die USI HW die Kontrolle über die Pins ?
    Der Slave zieht SCL in den genannten Conditions low. Warum wird der 
SCL Pin dann mit high initialisiert ?

2.) D.h. die USI hardware toggelt intern das Port Bit und ich gebe nur 
den initalen Zustand vor ?

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.