Forum: Mikrocontroller und Digitale Elektronik 2 PIC über i2c verbinden - welche Adresse?


von Manfred (Gast)


Lesenswert?

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.

von Dr. Sommer (Gast)


Lesenswert?

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.

von A. S. (Gast)


Lesenswert?

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.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

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

von Manfred (Gast)


Lesenswert?

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.

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

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
von Christian M. (Gast)


Lesenswert?

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

von Klaus (Gast)


Lesenswert?

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

von A. S. (Gast)


Lesenswert?

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.

von TK (Gast)


Lesenswert?

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

von Thomas E. (picalic)


Lesenswert?

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.

von X4U (Gast)


Lesenswert?

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 ;-)

von Klaus (Gast)


Lesenswert?

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

von bingo (Gast)


Lesenswert?

es gibt doch PICs mit I2C-Slave-Funktion ...

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
Noch kein Account? Hier anmelden.