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


von Alex (Gast)


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:
1
void send_i2c(uint8_t device, uint8_t code) {
2
  error = 0;                      
3
  TWCR = 0b10100100;
4
5
  twiWait();
6
7
  if(twiStatus == 0x08 || twiStatus == 0x10) {
8
    TWDR = device<<1;
9
    TWCR = 0b10000100;
10
  }
11
}

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

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? :(

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.