Forum: Mikrocontroller und Digitale Elektronik Master_Slave I2C


von Tomie (Gast)


Lesenswert?

Hallo

Ich versuche über Master die voradressierte Slaves, neu zu adressieren.
Bevor ich irgend etwas mache und ahnungslos herumtreibe, wollte ich euch 
fragen, ob es ohne weiteres möglich ist.

Ausgangspunkt: Die Slaves(4x Atmega 168)sind voradressiert.wenn Master
(1x Atmega168) die Slaves erkannt hat, soll er die reihenfolge nach die 
Slaves neu adressieren.

danke

von Karl H. (kbuchegg)


Lesenswert?

Ich werf da mal ein

Hä?


in die Runde.
Vielleicht stehe ich ja heute auch auf der Leitung, ich denke allerdings 
ernsthaft, dass du noch einen Versuch machen solltest, dein Problem zu 
beschreiben, diesmal aber auf eine verständliche Problembeschreibung 
Wert legen solltest.

von Tomie (Gast)


Lesenswert?

Nochmal:

Kontrolpanel = Atmega 168 als Master

LED Panel = Atmega 168 als Slave --> davon habe ich 4

Idee = LED Tisch zu bauen, der aus 4 x LED Panels besteht.

Istallations LED Panel:
1
                ________   _________   _________  _________
2
                |       |  |        |  |        | |        |
3
                |1      |- |2       |- |3       |-|4       |
4
                |       |  |        |  |        | |        |
5
                --------    --------    --------   --------
6
                                 |
7
                              --------
8
                              |       |
9
                              |  Mast |
10
                              --------

Mit Master habe ich die Möglichkeit, die Panels einzeln anzupsprechen 
und einzel zu dimmen.

Problem: Die Panels sind austauschbar. D.h. wenn ich statt Panel 1, 
Panel 4 vorne habe will ich, dass der Master sich das merkt und die 
Panels neu adressiert. In dem Fall, soll Panel 4 --> adresse Panel 1 
haben und Panel 1 --> die adresse Panel 4 haben.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Tomie schrieb:

> Problem: Die Panels sind austauschbar. D.h. wenn ich statt Panel 1,
> Panel 4 vorne habe will ich, dass der Master sich das merkt und die
> Panels neu adressiert. In dem Fall, soll Panel 4 --> adresse Panel 1
> haben und Panel 1 --> die adresse Panel 4 haben.

Dann versteh ich aber das Problem noch nicht.

Anstatt
1
   send_data_to_panel( 1, data );

steht dann eben im Code
1
uint8_t pannelAddr[4] = { 1, 2, 3, 4 };
2
3
4
...
5
6
  send_data_to_panel( pannelAddr[0], data );

also einfach nur ein Array, aus dem die Adresse des ersten, zweiten, 
dritten, ... Pannels kommt. Im Array wird die tatsächliche Adresse 
eingetragen.
Ob die Umsetzung der internen Nummerierung auf die tatsächliche Adresse 
beim Aufrufer erfolgt, oder ob das in der jeweiligen Send Funktion 
passiert, darüber kann man diskutieren. Aber das ändert am Grundprinzip 
ja nicht viel, dass man intern mit logischen Pannelnummern arbeitet, die 
auf der Ebene der tatsächlichen Ausgabe auf die physikalischen Pannels 
dann auf die physikalisch richtigen Pannelnummern umgesetzt werden.

> D.h. wenn ich statt Panel 1, Panel 4 vorne habe

dann änderst du (zb über ein Benutzermenü)
1
uint8_t pannelAddr[4] = { 4, 2, 3, 1 };

und wenn alles andere richtig programmiert ist, dann ist das auch schon 
die ganze Änderung, die in den Daten notwendig ist.

Oder versteh ich dich, bzw. das Problem, jetzt falsch?

: Bearbeitet durch User
von Tomie (Gast)


Lesenswert?

Hallo Karl Heinz,

Du hast das Problem richtig verstanden. Gestern abend ist mir die Idee 
mit Array auch gekommen.

vielen Dank für die erklärung

mfg

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.