Mega8 I2C-Slave Problem

Gast #1644234
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
Gast #1645234
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?

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.