mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR-USART zum 1-Draht-Bus umbauen!?


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich baue gerade an einem Projekt, bei dem mehrere AVR ATmega8 
Mikrocontroller über eine Leitung Daten austauschen. Dabei sollen in 
einem dreiadrigen Kabel zwei Leitungen für die Versorgung zuständig sein 
und auf der Dritten die Daten hin- und herflitzen. Es ist also kein 
typischer 1-Draht-Bus mit einem auf die Versorgungsspannung 
aufmodulierten Datensignal.
Während V+ und V- durchgeschleift werden, soll die Datenleitung DL 
zerstückelt von einem Client zum nächsten gehen und von dem wieder zum 
nächsten, also keine durchgehende Leitung.
Ich hoffe meine ASCII-Zeichnungen sind verständlich!

      |----------|          |----------|          |----------|
      | Client 1 |~~~ DL ~~~| Client 2 |~~~ DL ~~~| Client 3 |
V+ ~~~+~~~~~~~~~~+~~~ V+ ~~~+~~~~~~~~~~+~~~ V+ ~~~+~~~~~~~~~~+
V- ~~~+~~~~~~~~~~+~~~ V- ~~~+~~~~~~~~~~+~~~ V- ~~~+~~~~~~~~~~+
      |----------|          |----------|          |----------|

Das Prinzip soll wie "Stille Post" funktionieren, jeder gibt die von der 
einen Seite erhaltene Daten an die Andere Seite weiter und dichtet ggf. 
Daten dazu, die für die Anderen interessant sind.

Client 1 ist fest definiert und fängt an. Er gibt Daten an Client 2 
weiter:

|----------|          |----------|
| Client 1 |Tx ~~~~ Rx| Client 2 |
|----------|          |----------|

Client 2 verarbeitet die Daten und reicht sie an Client 3 weiter bis zum 
Client n. Client n weiß, dass er der Letzte ist und reicht die 
verarbeiteten Daten wieder zurück -> Client 3 -> Client 2 -> Client 1.
Nun haben alle die aktuellen Daten erhalten und der Vorgang beginnt von 
vorne.

Die Clienten 1 und n spielen eine gewisse Sonderrolle. Sie erkennen, 
dass vor bzw. hinter ihnen kein weiterer Client vorhanden ist.

##################################################

So, ich denke ich habe das Prinzip nun genug (versucht) zu erklären, nun 
meine eigentliche Frage.
Die meisten AVR-Mikrocontroller besitzen ja einen USART, so auch der 
mega8.
Könnte man diesen nicht zu einem 1-Draht-Bus umbauen?
Bzw., da ja meist nur ein USART vorhanden ist, wie setzt man 
softwaretechnisch soetwas in C um?
Gibt es da ggf. bereits Lösungen, die ich nicht gefunden habe?
Alles, was ich bisher gefunden habe, war viel zu komplex, es muss 
wirklich nur der Datenstrom wie ein Lauflicht hin- und herwandern, es 
geht nicht um Geschwindigkeit und Effektivität... ;)

Danke für eure Antworten und Ideen!

Gruß
Flo

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
Warum nicht eher sowas wie ein "unipolarer" RS485-Bus?

Also so, dass alle Teilnehmer an der einen Strippe hängen und per 
Protokoll aushandeln, wer gerade senden darf? Das geht per Pullup und 
einer Diode relativ einfach:
     o
     |
     -
    | |
    |_|  
     |     
  ---o-----o-------------o-----o--------------o-----o-----
     |     |             |     |              |     |
     |     V             |     V              |     V
     |     -             |     -              |     -
     |     |             |     |              |     |
   .---------.         .---------.          .---------.
   | RX   TX |         | RX   TX |          | RX   TX |
       uC1                 uC2                  uC3


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Lothar,
Danke für Deine Antwort!
Die Sache ist, dass ich die Einzelverbindungen benötige, um die 
physische Position der Module in der Kette bestimmen zu können.
Ich lege durch äußere Einflüsse einen Clienten als Client 1 fest, dieser 
spricht das nächste Modul an und gibt ihm die Bezeichnung Client 2. 
Dieser spricht dann Client 3 an und so weiter, bis Client n keinen 
Nachfolger mehr hat. Dann gibt der Client n die Anzahl der Clienten 
zurück bis hin zu Client 1.
Somit weiß schließlich jeder, wie viele Clienten es insgesamt gibt und 
der wievielte Client sie sind.

Ich hoffe das war verständlich!?

Gruß
Florian

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.