I2C mit Interrupt als Slave

Gast #3218863
Lesenswert?

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
Lesenswert?

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
Lesenswert?

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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren