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


von Florian (Gast)


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

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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:
1
     o
2
     |
3
     -
4
    | |
5
    |_|  
6
     |     
7
  ---o-----o-------------o-----o--------------o-----o-----
8
     |     |             |     |              |     |
9
     |     V             |     V              |     V
10
     |     -             |     -              |     -
11
     |     |             |     |              |     |
12
   .---------.         .---------.          .---------.
13
   | RX   TX |         | RX   TX |          | RX   TX |
14
       uC1                 uC2                  uC3

von Florian (Gast)


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

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
Noch kein Account? Hier anmelden.