Bussystem avr-gcc mehrere AVRs in Reihe

Gast #4049358
Lesenswert?
• ▲
▼
Hallo ich suche eine Möglichkeit,

mehrere AVRs mit einander zu verbinden.
Hier bei ist die Verbindung im Ring oder mit offenen Ende erwünscht. 
Also ein Master sendet alle Daten und die Slaves picken sich ihre Werte 
heraus.

Wenn mäglich sollen alle Slaves gleich programmiert sein. Ohne Adresse. 
Wie gehe ich da am besten vor, hat jemand dazu vielleicht ein effizentes 
Code Schnippsel?

Übertragungsrate < 2kb/s. Zur Verfügung steht 1x SPI, oder 2x UARTs mit 
zusäztlichen CLK. (synchron UART?!?). Am besten würde ich etwas in 
Hardware machen um den Code möglich einfach zu halten.

Die Avrs müssen nicht viel machen. Hauptsächlich wird über 1-2 Eingängen 
die Temp gemessen (alle 10s) und dauerhaft FastPWM auf 4 Pins erzeugt 
mit einem 15kHz Signal.
#4049361
Lesenswert?
• ▲
▼
Gleich programmiert bedeutet wörtlich verstanden nicht, dass sie keine 
Adresse haben können. Man kann Adressen auch anderswo unterbringen als 
im Programm. Beispielsweise im EEPROM. Aber man kann Adressen auch 
extern anbringen, mit Schaltern, individuell eingestelltem 
Spannungsteiler (ADC), ID-Device, ...
#4049362
Lesenswert?
• ▲
▼
dunno.. schrieb:
> Das nennt sich inhaltsadressierung. Passiert zB im auto per can.

Gibt es im Auto CAN Devices, die in Programm und Hardware 
ununterscheidbar sind und bei denen beim Start ausgewürfelt wird, wer 
heute die Rolle des linken und des rechten Blinkers übernimmt, 
bildhaft gesprochen?

Ich verstehe unter Inhaltsadressierung, dass jede Node ihre Rolle kennt. 
Ob diese Selbsterkenntnis nun als Adresse bezeichnet wird, oder anders, 
halte ich für sekundär.
Gast #4049375
Lesenswert?
• ▲
▼
Paul Panzer schrieb:
> Wenn mäglich sollen alle Slaves gleich programmiert sein. Ohne Adresse.
> Wie gehe ich da am besten vor, hat jemand dazu vielleicht ein effizentes
> Code Schnippsel?

Das koennte man realisieren, indem die Daten immer ausgewertet und zum 
naechsten uP geschickt werden, vor dem Weiterschicken wird ein Byte 
inkrementiert. Vom letzten uP geht es dann wieder zum Master, der das 
Byte auf korrekte Anzahl der Slaves kontrolliert.

wendelsberg
#4050003
Lesenswert?
• ▲
▼
Hallo,

angenommen die Slaves sind nicht nur vom Programm, sondern auch von der 
Aufgabe ununterscheidbar. Sie haben also alle die gleiche Aufgabe, z.B. 
Lüftersteuerung nur auf Grund lokaler Temperaturen mit zentraler 
Überwachung der Lüfterdrehzahl und der Temperaturen, aber ohne sagen zu 
können, welche physikalische Temperatur bzw. Lüfter nicht mehr o.k. ist.

Dann kann man tatsächlich die Adresse jedesmal auswürfeln, z.B. indem 
per (echter) Zufallszahl nach Power-On eine bestimmte Zeit gewartet 
wird, bevor sich ein Slave am Bus anmeldet. Diesem wird dann vom Master 
eine Adresse zugewiesen, die bis zum nächsten Power-Off Gültigkeit hat. 
Dazu braucht man entweder ein Bus, der Kollisionen erkennt und behandelt 
oder aber eine ziemlich ausgefuchste Buserkennungsphase die recht lange 
dauern könnte.

Eine weitere Alternative besteht darin, dass die Slaves beim erstmaligen 
Anmelden (gekennzeichnet z.B. durch eine Anmeldeadresse) oder während 
einer Konfigurationsphase eine eindeutige Adresse zugeordnet bekommen 
und diese z.B. im EEprom abspeichern. Dies funktioniert natürlich nur 
dann, wenn der Bus Schritt-Für-Schritt in der im Master hinterlegten 
Reihenfolge in Betrieb genommen wird (funktioniert bei Hausbussen sehr 
gut, so wird es z.B. bei KNX gelöst).

Ist dies nicht möglich und müssen die Slaves trotzdem eindeutig 
zugeordnet werden, bleibt nur eine Art von Dasy-Chain (z.B. wie oben 
schon beschrieben, geht auch mit durchgereichten Select-Leitungen oder 
durchgereichten Datenleitungen wie bei den WS2812-LEDs) oder eine 
"mechanische" Kodierung durch 
Mikroschalter/Lötbrücken/Jumper/Widerstand, wie sie z.B. bei I2C gerne 
gemacht wird. Dies könnte natürlich auch außerhalb des Slave-Bords 
realisiert werden (z.B. bei einem Lüfter-Tachosignal den Pullup am 
Lüfter anbauen und je nach Bauort variieren. Benötigt dann aber 
zusätzlich noch eine A-D-Auswertung des Signals)

Irgendwie muss man in diesen Fällen ja dem Slave seinen Einbauort 
mitteilen.

Schöne Grüße,
Martin
Gast #4050189
Lesenswert?
• ▲
▼
A. K. schrieb:
> dunno.. schrieb:
> Das nennt sich inhaltsadressierung. Passiert zB im auto per can.
>
> Gibt es im Auto CAN Devices, die in Programm und Hardware
> ununterscheidbar sind und bei denen beim Start ausgewürfelt wird, wer
> heute die Rolle des linken und des rechten Blinkers übernimmt, bildhaft
> gesprochen?
>
> Ich verstehe unter Inhaltsadressierung, dass jede Node ihre Rolle kennt.
> Ob diese Selbsterkenntnis nun als Adresse bezeichnet wird, oder anders,
> halte ich für sekundär.

Wenn Hardware und Software genau gleich sind, gibts keinen linken und 
rechten Blinker. Dann gibts nur Blinker, und alle Blinken, wenn der 
Befehl zum blinken kommt. Wenn dich der verbauort des blinkers 
interessiert, muss das schon codiert sein, in irgendeiner Form.

Der to muss mal genau sagen was für Daten von wo nach wo über welche 
Distanz übertragen werden sollen. Selbst temperaturdaten sind ohne info 
über den verbauort doof..

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