Master_Slave I2C

Gast #3600472
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
Gast #3600512
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.
#3600559
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren