Forum: Compiler & IDEs Mega8 I2C-Slave Problem


von Joern (Gast)


Lesenswert?

Hi,

ich versuche gerade mein Beagleboard mit Linux drauf über I2C mit einem 
Mega8 kommunizieren zu lassen. Der Mega läuft als Slave und das 
Beagleboard als Master. Zum Testen möchte ich erstmal den Master ein 
Byte vom Slave lesen lassen. Jedoch bekomme ich vom Master immer eine 
Fehlermeldung, wenn ich ein Byte lesen möchte. Der Master funktioniert 
soweit, da ich einen Kompass CMPS03 problemlos auslesen kann. Also 
scheint das Problem der Slave zu sein.

Die ISR vom Slave:
1
SIGNAL(SIG_2WIRE_SERIAL){  
2
  
3
  char buffer[20];
4
  switch (TW_STATUS){ //TWI-Statusregister prüfen und nötige Aktion bestimmen 
5
  
6
    case TW_ST_SLA_ACK:
7
    case TW_ST_DATA_ACK:
8
      sprintf(buffer, "TW_STATUS1: %x\n", TW_STATUS);
9
      uart_puts(buffer);
10
      TWDR = 0x12;
11
      TWCR_ACK;
12
      break;
13
    
14
    default:
15
      sprintf(buffer, "TW_STATUS default: %x\n", TW_STATUS);
16
      uart_puts(buffer);
17
      TWCR_RESET;
18
      break;
19
  }
20
  
21
}

Die Defines:
1
#define TWCR_ACK TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA);  
2
3
#define TWCR_NACK TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT);
4
5
#define TWCR_RESET TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA);

Der USART gibt mit dem Programm folgendes aus:
1
TW_STATUS1: a8
2
TW_STATUS default: c0

Die Ausgabe wiederholt sich bei jedem Leseversuch. Wo könnte der Fehler 
sein?

MfG Jörn

von Joern (Gast)


Lesenswert?

Was mir noch aufgefallen ist: Bei jedem Versuch ein Byte vom Slave zu 
lesen, wird maximal einmal etwas vom Slave über den USART ausgegeben.
Dann sieht das ungefähr so aus:

Slave gibt Status aus - Beagleboard "Error"
Slave gibt Status aus - Beagleboard "Error"
Slave gibt nichts aus - Beagleboard "Error"

Und das wiederholt sich dann immer wieder. Dabei wechseln sich die 
Statuscodes 0xA8 und 0xC0 immer ab.

Hat jemand eine Idee wo das Problem liegen könnte?

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.