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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.