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.
Das nennt sich inhaltsadressierung. Passiert zB im auto per can. Wie lang werden denn die Verbindungen..?
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, ...
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.
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
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
Paul Panzer schrieb: > Hauptsächlich wird über 1-2 Eingängen > die Temp gemessen (alle 10s) Nicht zufällig mit DS18x20? Da wär das ID-Device gleich mit dabei.
Paul Panzer schrieb: > Wenn mäglich sollen alle Slaves gleich programmiert sein. Ohne Adresse. i2c hab ich mir auch als Erstes gedacht - aber ohne die Länge der Leitung zu wissen ... ;) aber: alle slaves mit selber Adresse ergibt bei i2c eine Art "Kaffeehaus-Atmosphäre" ^^
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..
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.