www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik USI TWI TwoWireMode beim ATTiny24 macht(e) Probleme


Autor: M.B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

heute habe ich keine Frage, sondern eine Lösung für ein Problem, dass 
mich seit Tagen verfolgt hat.

Ich habe einen ATTiny 24, mit dem ich über das USI - Universal Serial 
Interface eine TWI (I^2C) Verbindung zu einem DAC hergestellt habe. Ich 
habe die Atmel AppNote AVR310 (Using USI Module as a I^2C master) zu 
Hilfe genommen und meinen Code eingearbeitet.
Folgendes Problem kam zu tage: Die Clockleitung (SCL) ging nicht wie 
erwartet auf +5V und das Programm hing sich in folgender Subroutine in 
der gezeigten Codezeile auf:
unsigned char USI_TWI_Master_Transfer(unsigned char temp) 
{
  USISR = temp;
...
do
{
...
while(!(PIN_USI & (1<<PIN_USI_SCL)) ); // hier hing das Programm und SCL blieb Low
...
}while(!(USISR & (1<<USIIOIF)) );
...
}

Nach zig Versuchen und Nachforschungen im Internet und auch hier im 
Forum konnte ich keinen Fehler finden.

Ich habe mir dann einen Auszug aus dem Datenblatt ausgedruckt und 
intensiv nach überlesenen Informationen gesucht und letztlich auch 
gefunden.

Alles hing am fehlenden Pull-Up Widerstand an der SCL und der SDA 
Leitung.

Da muss man erstmal darauf kommen, weil im Beispielcode von Atmel steht 
bei der Initialisierung ganz am Anfang PullUp Enable:

void USI_TWI_Master_Initialise( void )
{
  PORT_USI |= (1<<PIN_USI_SDA);           // Enable pullup on SDA, to set high as released state.
  PORT_USI |= (1<<PIN_USI_SCL);           // Enable pullup on SCL, to set high as released state.
  
  DDR_USI  |= (1<<PIN_USI_SCL);           // Enable SCL as output.
  DDR_USI  |= (1<<PIN_USI_SDA);           // Enable SDA as output.
  
  USIDR    =  0xFF;                       // Preload dataregister with "released level" data.
  USICR    =  (0<<USISIE)|(0<<USIOIE)|                            // Disable Interrupts.
              (1<<USIWM1)|(0<<USIWM0)|                            // Set USI in Two-wire mode.
              (1<<USICS1)|(0<<USICS0)|(1<<USICLK)|                // Software stobe as counter clock source
              (0<<USITC);
  USISR   =   (1<<USISIF)|(1<<USIOIF)|(1<<USIPF)|(1<<USIDC)|      // Clear flags,
              (0x0<<USICNT0);                                     // and reset counter.

}

Doch im Datenblatt des ATTiny24 steht "im Kleingedruckten":
- Kapitel 14 (USI),
- Abschnitt 5 (Register Description)
- 14.5.1 USICR - USI Control Register,
- WireMode Einstellung (USIWM1:0),
  in der Tabelle letzter Satz bei USIWM1=1 und USIWM0=0:
"Pull-ups on the SDA and SCL port pin are disabled in Two-wire mode."

Nachdem ich dann externe PullUps eingelötet habe, funktionierte alles 
tadellos!

Falls jemand also das Problem hat, bitte mal nachschauen.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Die internen Pull-Ups wären sowieso viel zu gross (ca.50K). Für TWI 
sollten die im Bereich von 5k liegen.

MfG Spess

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.