pic16f887 I2C Slave

Gast #2516555
Lesenswert?

Hallo

Möchte gerne einen PIC 16f887 als I2C Slave ansteuern, er soll vom 
anderen Prozessor nur daten erhalten und keine senden. Nun habe ich den 
i2c Bus so

void vI2CInit (void)
  {
  // Pin RC3 und RC4 vom PORTC als Eingaenge konfigurieren
  TRISC=(TRISC|0b00011000);
  // Busgeschwindigkeit einstellen
  SSPADD=0x06;    // Adresse 0x06
  // Modus setzen
  SSPCON=0x3E;    // Slave mode, Takt freigeben, Schnittstelle ein
  }
initialisiert und das Interuptflag SSPIF mit SSPIE freigegeben.

Wenn der andere Prozessor nun ein Telegramm sendet, empfange ich die 
direkt die Adresse 0x06.
Muss ich das ACK nun selber setzen oder wieso habe ich die Adresse im 
I2C Buffer? Was habe ich falsch gemacht?

gruss daniel
#2516583
Lesenswert?

Es wird auf dem I2C Bus immer die Adresse gesendet. Das dient der 
Ansteuerung mehrerer Busteilnehemer.

Wenn Du also "Eine" Adresse empfängst, musst Du nun vergleichen ob es 
"Deine" Adresse ist und auch nur dann entsprechend reagieren.
Eine unschöne Aussnahme wäre, wenn Dein Master und Slave "alleine" am 
Bus hängen, dann könntest Du annehmen, dass der Slave immer gemeint ist.

Wie gesagt, unschön und bei einem 2. Slave am Bus tödlich.

Gruß,
avrGerd
Gast #2516609
Lesenswert?

Danke Gerd M. für die schnelle Antwort
Ich lege jedoch dem PIC die Adresse auf die er ansprechen soll ins 
SSPADD Register, sollte er dan nicht selbst erkennen wann er 
angesprochen wird und wann nicht? so müsste ich ja immer selbst das ACK 
setzen, damit er das gesammte Telegramm sendet.
#2516629
Lesenswert?

Sorry, kenne mich mit den Details bei den Pic's nicht aus.

Sieht aber wie ein Hardware I2C Interface aus, welches Du benutzt.

Eigentlich sollte im Datenblatt das exakte Verhalten beschrieben sein.

Wichtig ist auch die Art und Weise wie die I2C Adresse im PIC behandelt 
wird.
Ist die Info schreiben/lesen in der Adresse mit verheiratet?

Das ist oft ein Verständnissproblem und führt oft zu Fehlern.
Prüf das bitte mal nach.


Gruß,
avrGerd
Gast #2556460
Lesenswert?

Aber das ACK kommt trozdem von allein. Du musst nur die Daten (in diesem 
Fall die Adresse) abholen sonst gibt es stress mit overflow.

Hab das ganze gerade für 2 PIC 16F887 und einen 16F886 zum laufen 
gebracht.

Der 16F886 multiplext 4 LED Bargraph Zeilen mit 16LEDs und die beiden 
16F887 kümmern sich um je 4*4 Stellen 7 Segment LED Anzeigen.

mfG
Michael

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