mikrocontroller.net

Forum: Compiler & IDEs Mega8 I2C-Slave Problem


Autor: Joern (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
SIGNAL(SIG_2WIRE_SERIAL){  
  
  char buffer[20];
  switch (TW_STATUS){ //TWI-Statusregister prüfen und nötige Aktion bestimmen 
  
    case TW_ST_SLA_ACK:
    case TW_ST_DATA_ACK:
      sprintf(buffer, "TW_STATUS1: %x\n", TW_STATUS);
      uart_puts(buffer);
      TWDR = 0x12;
      TWCR_ACK;
      break;
    
    default:
      sprintf(buffer, "TW_STATUS default: %x\n", TW_STATUS);
      uart_puts(buffer);
      TWCR_RESET;
      break;
  }
  
}  

Die Defines:
#define TWCR_ACK TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA);  

#define TWCR_NACK TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT);

#define TWCR_RESET TWCR = (1<<TWEN)|(1<<TWIE)|(1<<TWINT)|(1<<TWEA);  

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

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

MfG Jörn

Autor: Joern (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.