www.mikrocontroller.net

Forum: Compiler & IDEs Kann mir bitte wer beim USI-TWI helfen?


Autor: AVR-Anfänger (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe schon einen Beitrag im uC Bereich geschrieben.
( Beitrag "Ich komme mit dem USI/TWI nicht klar" )
Aber wie es aussieht, hatte ich den falschen Bereich erwischt.
Kann mir bitte jemand unter die Arme greifen?
Ich bekomme den ATtiny24 einfach nicht dazu, über TWI mit dem Master zu 
reden.

Der Master ist ein ATmega32L und der Slave ein ATtiny24.
Beide laufen bei 8MHz internem Takt.
Ich verwende 4,7 Kilo Ohm Widerstände als Pull Up.
Die Leitungen von SDA und SCL sind ca. 15cm lang.
Der ATtiny24 hat 100 Ohm Schutzwiderstände seriell in SDA und SDL.

Für den Anfang habe ich vor, Beispiele aus der Codesammlung zu
verwenden.
Für den Master verwende ich folgendes Beispiel:
 http://www.mikrocontroller.net/topic/goto_post/742070
(TWI_Master-Slave_C_Functions.zip vom 04.01.2008 21:51)

Für den Slave:
 http://www.mikrocontroller.net/topic/goto_post/287917
(usi-slave.zip vom 4.06.2006 21:29)

Leider bekomme ich keine Komunikation zustande.
Wie es aussieht kommt die Sendeanforderung beim Slave an und er sendet
auch die Daten an den Master.
Doch der Master meldet mir "Could not start TWI Bus for READ" und "Could
not start TWI Bus for WRITE"

Ich habe nur ein paar Anpassungen beim Quellcode gemacht.
Und zwar folgende:

Ich habe bei beiden Programmen die gleiche Adresse vergeben.
Bei beiden Programmen werden 3 Bytes gesendet / empfangen
Ich habe das USI-Beispiel auf ATtiny24 erweitert.


Ich weis leider nicht was ich bei der Umsetzung falsch gemacht habe.
Ich brauche eure Hilfe damit ich weiterkomme.
Ich habe die Projekte angehängt.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt 2 Konventionen, wie man eine I2C-Adresse verstehen und angeben 
kann:

* Als 7-Bit-Adresse 0x00-0x7F, an die intern das R/W-Bit angefügt wird. 
Nach dieser Konvention arbeitet der Master-Code.

* Als gerade 8-Bit-Adresse 0x00-0xFE, deren unterstes Bit intern durch 
das R/W-Bit ersetzt wird. Nach dieser Konvention arbeitet der 
Slave-Code.

Wenn also der Master gemäss 7+1-Bit Konvention die Adresse 0x10 sendet, 
dann ist das entsprechend der 8-Bit Konvention die Adresse 0x20. 
Folglich reagiert ein auf 0x10 konfigurierter Slave nicht.

Autor: AVR-Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für den Hinweis.
Die Komunikation läuft jetzt Problemlos.

Autor: AVR-Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Frage hätte ich noch.

Wenn ich andere Interupts nicht behindern will, kann ich dann Sei() und 
Cli() aus den USI-TWI Slave Funktionen entfernen indem ich stattdessen 
die TWI-Ereignisse über die Register gezielt deaktiviere / aktiviere?
Also anstatt Cli() USISIE und USIOIE im Register USICR auf Null und 
anstatt Sei() auf 1 setzen.
Oder gibt es einen besseren Weg?

Autor: AVR-Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe jetzt versuchsweise sei und cli in den TWI-Funktionen mit
USICR |= ((1<< USISIE)|(1<<USIOIE));/*sei();*/
und
USICR &= ~((1<< USISIE)|(1<<USIOIE));/*cli();*/
ersetzt.

Jetzt werden zwar keine Interrupt's beeinträchtigt, aber es gibt immer 
wieder das Problem, dass der Master keine Daten an den Slave schicken 
kann.
(Ca. bei 10% der Sende-Versuche bekomme ich einen Fehler.)
Das Senden der Daten vom Slave an den Master hingegen funktioniert ohne 
größere Probleme.

Weis jemand woran das liegen könnte?

Autor: AVR-Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach kommt schon, so ungewöhnlich kann meine Frage doch nicht sein.

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.