Hallo werte Experten, Ich möchte 2 PIC über i2c miteinander verbinden, einer als Master der andere als Slave. Nun haben ja MC keine eigene Adresse. Kann man ohne Adresse kommunizieren, wenn nichts anderes am Bus hängt. Oder kann der Master eine frei gewählte Adresse senden, nur wie bringe ich dem Slave bei, auf welche er reagieren soll. Wer kann mir einfach erklären wie das gemacht wird.
Wie bei allen anderen Mikrocontrollern auch wirst du wohl beim PIC I2C Slave eine Adresse einstellen können, auf die er reagiert. Die musst du dann auch beim Master angeben.
I2C als Master ist einfach. Ist in vielen Pics vorhanden, kann man auch ohne Hardware so programmieren. I2C-Slave sollte in Hardware explizit vorhanden sein, sonst brichst Du Dir einen ab. Wenn I2C-Slave vorhanden ist, dann lies die Kapitel dort, wenn nicht, nimm einen anderen Prozessor.
Hi - warte auf Idle - warte auf Start - empfange Adresse - empfange Datenrichtung - (N)ACK dann: - empfange Byte +ACK oder: - sende Byte - warte auf ACK sobald ein STOP oder START (=ReStart) kommt, goto 'empfange Adresse' Ungetestet, soll aber so in meine Steinchen rein I2C-Addy: Sofern Du nicht diese Geräte im großen Stil verkaufen willst, wirst Du keine eigene Adresse bei Philips beantragen müssen - dann nimmst Du, was Dir gerade an Zahl gefällt und Deine anderen I2C-Komponenten nicht stört. MfG
Erst mal Danke für die Antworten. Ich nutze zum Programmieren GCGBasic. Damit komme ich nach längerer Einarbeitungszeit ser gut zurecht. Nur finde ich bei i2c Modus Slave keine Option für die Adresse. Ok, wenn ich das nicht hinbekomme, benutze ich die serielle Verbindung.
Hi http://gcbasic.sourceforge.net/help/_hi2csetaddress.html Schaut interessant aus, die Sprache Scheint sich an PIC-Assembler zu orientieren, oder? MfG
:
Bearbeitet durch User
Welche PICs verwendest Du? Ich hab mir mal nen Krampf programmiert auf'm 16F876 und lief trotzdem nicht! Du brauchst eine ISR mit 4 Verzweigungen. Bei Microchip ist ein Beispiel in Assembler. Und hier habe ich mich orientiert: http://www.stefan-buchgeher.info/elektronik/i2c_pic_slave/i2c_slave_pic_kap5.html Gruss Chregu
Hier gibts ein Beispiel für PIC12. Das wird auch mit den PIC16, ist ja meist die gleiche MSSP drin, ähnlich sein. http://www.embeddedcodesource.com/codesnippet/pic12-i2c-master-slave-pwm-demo MfG Klaus
Manfred schrieb: > Ok, wenn ich das nicht hinbekomme, benutze > ich die serielle Verbindung. Die serielle Verbindung ist um Größenordnungen einfacher und schneller. Zudem lässt sie sich bei Bedarf über beliebig lange Entfernungen tunneln.
Christian schrieb: >Welche PICs verwendest Du? Ich hab mir mal nen Krampf programmiert auf'm >16F876 und lief trotzdem nicht! Du brauchst eine ISR mit 4 >Verzweigungen. Mein allererstes Projekt vor über 15 Jahren war eine Implementierung einer MASTER-SLAVE Anwendung auf IIC Basis. Es gab jedoch bis zu 31 SLAVES am Bus und damals gabs noch keinen 16F876 oder so. Der MASTER wurde mit einem 16C63 und die SLAVES mit je einem 16C54 in Assembler programmiert OHNE Interrupts! FAZIT: es geht heute noch. Die Teile werden immer noch in Aufzugsanlagen als Etagenanzeigen oder Informationsanzeigen eingesetzt. In der Zwischenzeit ist jedoch aus dem 16C54 ein 16F54 geworden und der 16C63 wurde zu einem 16F76. Was ich damit sagen möchte ist: Man sollte sich einfach mal mit der Materie (IIC Bus Protokoll usw) vertraut machen und nicht immer auf irgendwelche Fremd-LIBs zurückgreifen. Das hat nämlich einen erheblichen Lerneffekt. Und noch was: Ich habe bis heute noch keine gute Hardwareimplementierung für IIC gesehen. Gruß TK
Achim S. schrieb: > Manfred schrieb: >> Ok, wenn ich das nicht hinbekomme, benutze >> ich die serielle Verbindung. > > Die serielle Verbindung ist um Größenordnungen einfacher und schneller. > Zudem lässt sie sich bei Bedarf über beliebig lange Entfernungen > tunneln. Und wenn das Ganze nur eine Punkt-zu-Punkt-Verbindung zwischen zwei Controllern sein soll, wofür sowieso überhaupt kein Bus benötigt wird, ist I2C eine - sagen wir mal - "suboptimale" Schnittstellenwahl.
Manfred schrieb: > Ich möchte 2 PIC über i2c miteinander verbinden, Ok, welche? > einer als Master der andere als Slave. Soweit so normal. > Nun haben ja MC keine eigene Adresse. Doch, jede du du vorgibst > Kann man ohne Adresse kommunizieren, wenn nichts anderes am Bus hängt. Wenn es der I²C Standard vorsieht ja, sonst nein. Also nein. > Oder kann der Master eine frei gewählte Adresse senden Ja > nur wie bringe ich dem Slave bei, auf welche er reagieren soll. Indem du dir den I²C Teil des Datenblattes durchliest und verstehen lernst > Wer kann mir einfach erklären wie das gemacht wird. Bei beiden: Du schreibst die richtigen Werte in die Konfigurationsregister Sender: schreibst die Daten ins Senderegister Empfänger: liest Sie aus dem Empfangsregister und schon geht's ;-)
Thomas E. schrieb: > Und wenn das Ganze nur eine Punkt-zu-Punkt-Verbindung zwischen zwei > Controllern sein soll, wofür sowieso überhaupt kein Bus benötigt wird, > ist I2C eine - sagen wir mal - "suboptimale" Schnittstellenwahl. Da muß ich aber widersprechen und will nur mal zwei Aspekte anführen: die Übertragung ist synchron und benötigt daher auf beiden Seiten keinen genauen Takt. Und sie ist geframet, der Anfang und das Ende einer Message ist vom Protokoll vorgegeben und muß nicht extra in die Daten kodiert werden. Trotzdem werden nur zwei Datenleitungen gebraucht. MfG Klaus
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.