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

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.

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.