mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TWI zwischen Mega644P und Tiny2313 klappt nicht


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich bin gerade am Verzweifeln. Und zwar versuche ich eine Kommunikation 
zwischen einem Atmega 644P und einem Attiny 2313 per I2C hinzukriegen. 
Der 644P soll dabei Master Transmitter und der Tiny 2313 Slave Receiver 
sein. Den COde für den Tiny habe ich aus AVR312 übernommen, da der Tiny 
ja kein "echtes" TWI besitzt. Mein Problem ist nun, dass der Tiny zwar 
die START-Condition mitkrieg, danach aber einfach keine Daten erhält. 
Ich war davon ausgegangen, dass diese, ich sie auf dem Master in TWDR 
schreibe, auf dem Client in USIDR auftauchen. Da ich am Tiny ein LCD 
hängen habe kann ich aber sehen, dass USIDR fortlaufend den Wert 0xFF 
enthält. USICR wechselt zwischen 0xA8 (Standard) und 0xF8 (im 
Interrupt). USISR zählt im ersten Byte fortlaufend hoch und wechselt im 
zweiten Byte zwischen 0 und 4.

Wie kann ich nun auf dem Tiny an die übertragenen Daten kommen? Das 
Problem ist, dass ich so, wie es aktuell läuft überhaupt nicht damit 
arbeiten kann, da ich ja noch nichtmal prüfen kann, ob überhaupt die 
korrekte Adresse mitgesendet wurde :(

Die Funktion dafür sieht aktuell so aus:
void send_i2c(uint8_t device, uint8_t code) {
  error = 0;                      
  TWCR = 0b10100100;

  twiWait();

  if(twiStatus == 0x08 || twiStatus == 0x10) {
    TWDR = device<<1;
    TWCR = 0b10000100;
  }
}

Problematisch ist dieser Block:
if(twiStatus == 0x08 || twiStatus == 0x10) {
    TWDR = device<<1;
    TWCR = 0b10000100;
  }

Anhand von LED-Ausgaben am Board des Mega weiß ich, dass die Bedingung 
definitiv erfüllt ist, d.h. der Slave scheint korrekt zu reagieren. 
Setze ich aber TWDR und anschließend TWINT, so tauchen die Daten aus 
TWDR am Tiny einfach nicht auf.

SDA und SCL sind auf Seiten des Master mit 10k Ohm gegen VCC gezogen.

Oder ist es generell nicht möglich USI TWI mit "echtem" TWI zu 
verbinden? :(

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.