Forum: Mikrocontroller und Digitale Elektronik i2C Bus Adresse herausfinden


von Alex K. (bratkartoffel)


Lesenswert?

Hallo,
ich bin blutiger Anfänger wenn es um die Programmierung von Pic´s geht.
Kann mir bitte einer erklären wie man die Adresse für die I2C 
Kommunikation zischen einem Pic 18FXXX und einem Pic 16Fxxx 
herausfindet?
Es soll wohl einen festen Bereich geben der schon vom Hersteller 
festgelegt wurde - wo kann ich das nachlesen bzw. wie lautet diese feste 
Teil -Adresse.
Die Pic sind von Microchip.
P.S. Ich hab schon seit, mittlerweile, 4 Stunden gegoogelt!!
Vielen Dank schon mal im voraus.
Mfg Alex

von Mike R. (thesealion)


Lesenswert?

Mit PICs kenne ich mich gerade nicht aus, aber ich würde im Datenblatt 
von Microchip nachsehen. Dort ist die I2C Hardware auf jeden Fall 
beschrieben und auch jedes einzelnen Register.

Ich möchte fast wetten, das eins der Register für die Adresse da ist.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Bei einem I2C-Slave auf einem µC wird die Adresse vom Programm 
festgelegt, d.h. Du entscheidest selbst, welche Du verwenden willst.

Wenn am I2C-Bus mehrere I2C-Devices angeschlossen sind, sollten 
natürlich keine Adressen mehrfach verwendet werden.

von Alex K. (bratkartoffel)


Lesenswert?

Tja, dachte ich auch.
Wenn das Datenblättchen nur nicht ganz so gross wäre...
Aber danke für deine rasche Antwort.

von Alex K. (bratkartoffel)


Lesenswert?

Rufus t. Firefly schrieb:
> Bei einem I2C-Slave auf einem µC wird die Adresse vom Programm
> festgelegt, d.h. Du entscheidest selbst, welche Du verwenden willst.
>
> Wenn am I2C-Bus mehrere I2C-Devices angeschlossen sind, sollten
> natürlich keine Adressen mehrfach verwendet werden.

Und was ist dem festgelegten Adressbereich? Wie finde ich den heraus- 
ich meine ich sollte ja wissen wohin die Post gehen soll.Oder versteh 
ich da was nicht?

So wie ich die Sache verstanden habe ist es so das ein PIC16Fxxx eine 
Adresse wie ein PIC18Fxxx hat.Oder?

von Mike R. (thesealion)


Lesenswert?

Du du zwei Controller hast, dürftest du bei beiden die Adresse selber 
festlegen können.
Solange nur die beiden PICs kommunizieren sollen, müßtest du die Adresse 
völlig frei wählen können, bzw. das einfachste ist, einer ist Master, 
der hat keine Adresse und der andere wird Slave dem gibtst du dann eine 
Adresse, die dir gefällt :-)

von Alex K. (bratkartoffel)


Lesenswert?

Mike S. schrieb:
> Du du zwei Controller hast, dürftest du bei beiden die Adresse selber
> festlegen können.
> Solange nur die beiden PICs kommunizieren sollen, müßtest du die Adresse
> völlig frei wählen können, bzw. das einfachste ist, einer ist Master,
> der hat keine Adresse und der andere wird Slave dem gibtst du dann eine
> Adresse, die dir gefällt :-)

Wie komme ich an den festgelegten Bereich, ich meine den ersten Teil der 
Adresse?

von Mike R. (thesealion)


Lesenswert?

Bei den AVR und den Cortex-M3 µCs die ich bisher programmiert habe, 
konnte man immer alle 7 Bits der Adresse selber festlegen.

von Alex K. (bratkartoffel)


Lesenswert?

Mike S. schrieb:
> Bei den AVR und den Cortex-M3 µCs die ich bisher programmiert habe,
> konnte man immer alle 7 Bits der Adresse selber festlegen.

Ich glaube das ist (der) ein  Unterschied zu den Pic´s von Microchip.

von Jan R. (janra)


Lesenswert?

Hi Alex,
da Du zwei programmierbare Einheiten an Deinen Bus hängen willst, kannst 
Du die i2C-Adressen selbst festlegen. Sie müssen nur eindeutig sein und 
innerhalb der im Protokoll def. 7 Bit Breite.

Anders sähe es aus, wenn Du einen Sensor an den Bus kleben wolltest. Den 
kann man i.d.R. ja nicht frei programmieren, so daß der Hersteller hier 
Adressen werksseitig vergibt bzw. vergab und die ins Datenblatt 
geschrieben hat.

Das Du aber 2 programmierbare PICs nutzen willst, diese wahrscheinlich 
auch mit einer für die PICs implementierten I2C-Bibliothek nutzen 
willst, gibt es darin so Befehle wie
i2c.begin(address) o.ä., mit denen Du Adressen festlegen kannst. Zuvor 
solltest Du Dir aber überlegen, welcher Deiner beiden PICs den Master 
und welcher den Slave machen soll. Ausschließlich Master und bzw. Slaves 
an einem Bus bringen auch nichts Vernünftiges zustande.

Grüße, Jan.

von stephan_ (Gast)


Lesenswert?

Such im Datenblatt mal nach dem SSPADD-Register ...

von Alex K. (bratkartoffel)


Lesenswert?

stephan_ schrieb:
> Such im Datenblatt mal nach dem SSPADD-Register ...

Ich glaube das war DER entscheidende Hinweis....Besten Dank

von Besserwisser (Gast)


Lesenswert?

Hi,
die Adresse kannst Du im PIC selbst vergeben.
Denn nur Du weisst, was Dein Pic für ein Slave sein soll.
Von Phillips sind Adressen für Uhr, Speicher, Temperatursensor, etc fest 
definiert worden.
Wenn Dein Pic eine Slave-Uhr sein soll, dann müsstest Du in das 
I2C-Adressregister die Adresse einer Uhr vergeben, damit der Pic nur auf 
diese Adresse reagiert.
Wenn Dein Pic ein Sensor sein soll, dann eine andere Adresse.
Schau mal bei Phillips nach, was für Bausteintypen welche Adressen 
haben.

Einfach nach I2C-Bausteinen googeln und da nachschauen, welche Adressen 
die haben. Wenn ein Speicher oder ein Temperatursensor oder ein 
Digitales Poti Du realisieren willst, dann übernehme diese Adresse.
Es müssten aber auch noch freie Adressen geben, falls Du was exotisches 
machst.

von Alex K. (bratkartoffel)


Lesenswert?

Vielen Dank an alle !

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.