ATtiny84 - USI - Port defnition

Gast #1895032
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 ?
Gast #1895068
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
Gast #1895175
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

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.