I2C mit Interrupt als Slave

Gast #3218863
Hallo an alle

bin gerade dabei, eine I2C-KommunikationInterrupt-gesteuert zu 
programmieren. Der Master funktioniert auch, nur der Slave will nicht so 
ganz.
Ich möchte ihn mit I2C-Tools testen. Dort kann ich einstellen, ob der 
Slave senden oder empfangen soll und welche Adresse er hat. Leider will 
mein Slave noch nich einmal eine Start Condition empfangen.
Hat jemand ein Tipp an was das liegt?
Oder kennt jemand ein gutes Beispiel, bei dem sich Anfänger auch zurecht 
finden?

Danke schon mal im Voraus
Angehängte Dateien:
#3218925
Hallo,

also was mir zunächst auffällt, das ...
1
  if (master == 1)
2
  {
3
    if (transmit == 1)
4
    {
5
      sendeDaten_Master(0x00);
6
    }
7
    else
8
    {
9
      empfangeDaten_Master();
10
    }
11
  }
12
  else if (master == 0)
13
  {
14
    //Slave-Adresse in Address-Register
15
    TWAR = SLA;
16
    TWCR = (1<<TWEA)|(1<<TWEN)|(1<<TWIE);
17

18
    
19
  }
wird genau 1x beim Start durchlaufen, denn danach kommt die 
Endlosschleife

in deiner ISR sehe ich mehrere cli's, aber wo wird der Interrupt 
anschließend wieder frei gegeben?

Sascha
Gast #3218938
Bisher habe ich es so gelöst, dass man nur 1 x 1 Byte senden / empfangen 
kann, da es hier erst mal eine Übung ist. die cli´s werden nur im 
Fehlerfall aufgerufen, d.h. wenn ein NACK erhalten wird, da ich nicht 
weiß, wie ich eine Fehlermeldung ausgeben soll.

Ich möchte ja von meinem I2C-Tools eine StartCondition senden, meinen 
Controller als Slave auswählen und ihm 1 Byte senden, bzw später auch 1 
Byte von ihm empfangen.
Leider springt das Programm gar nicht in die ISR um Daten zu senden / 
empfangen.
Habe ich etwas vor der Kommunikation nicht beachtet?
#3218968
sendest du von deinem Master mit SLA=0x00? Wenn der Slave auf jede 
Adresse regieren soll, dann muss bit0 in TWAR gesetzt sein! Pobier 
lieber erst mal mit einer festen Adresse, 0x00 ist immer ein Sonderfall.

PS: hättest mal noch deinen Controllertyp nennen können

Sascha

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 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.