Forum: Mikrocontroller und Digitale Elektronik Mit AVR senden auf Eindraht-Bus mit Col.det.?


von Florian (Gast)


Lesenswert?

Hallo zusammen,
Ich habe einen Eindraht-Bus, der 12V bei logisch 0 und 0V bei logisch 1 
hat.
Ich will nun auf diesen Bus senden, aber das Problem ist die 
Kollisions-Erkennung.
Da relativ viel los ist auf dem Bus gehen meine Nachrichten öfter mal 
unter.
Ich werde also beim Senden von anderen Geräten gestört.
Nun brauche ich ein Lösung, wie ich erkennen kann, dass ich gestört 
wurde und dann meine Übertragung neu starte. Ich müsste also mit einem 
separaten Eingang die Spannung auf dem Bus überwachen während ich sende.
Kann mir jemand einen Weg beschreiben, wie ich das am Besten mache? Oder 
gibt es vielleicht schon eine fertige Lösung?
Ich benutze einen ATmega8.

Vielen Dank schon einmal im Voraus & viele Grüße
Florian

von Philipp (Gast)


Lesenswert?

Erst einmal gut zu wissen: sind beide Pegel aktiv oder der eine nur mit 
einem Widerstand auf high oder low gezogen?

Warum? Stell Dir vor, Dein Sender zieht die Leitung auf 12 V, während 
ein anderer Sender sie auf 0 V zieht. Dann wirst Du bei Deinem Sender 
wohl noch einen High-Pegel messen, aber ein Empfänger, der hinter dem 
anderen Sender sitzt, wird Low messen. Dann nützt Deine Kontrolle gar 
nichts.

Wenn der zweite Pegel passiv ist, kannst Du immerhin den Pegel messen, 
während der Sender den Bus »losläßt«. Dreimal pro Bit solltest Du aber 
schon abtasten, damit Du Dir einigermaßen sicher sein kannst.

Besser ist eigentlich ein Protokollhandshake, bei dem der Sender seine 
Botschaft wiederholt, bis er vom Empfänger eine Bestätigung bekommen 
hat. Prüfsumme/CRC oder so sollte dazu natürlich auch gehören.

Wenn Du alle Busteilnehmer kontrollierst, gibt es natürlich noch 
Strategien zur Kollisionsvermeidung. Solange alles zufallsverteilt ist, 
kann ein Bus schon bei einem Bruchteil seiner theoretischen Bandbreite 
»verstopfen«.

von Florian (Gast)


Lesenswert?

Der Bus wird nur gegen 12V gezogen. Wenn ein Teilnehmer den Bus auf 0V 
zieht, kann kein anderer ihn auf 12V setzen.

Ich müsste also, während ich 0 sende, kontrollieren, ob der Bus 12V hat.
Bei 1 ist er 1, egal was die anderen Teilnehmer evtl. noch machen.

Das ganze ist ein fertiger Bus. Ich kann den anderen Teilnehmern kein 
Protokollhandshake beibringen. Ich muss nehmen, was ich kriege ;)


Wie kann ich jetzt das Senden mit dem Abtasten am geschicktesten machen?
Da gibt es doch bestimmt irgendwo schon ein fertiges Programm oder 
zumindest eine Vorlage?


Philipp, Dank Dir soweit für Deine Antwort!

von Florian (Gast)


Lesenswert?

Hat keiner eine Idee für mich?
Oder wenigstens Stichworte, nach denen ich suchen kann. Mit Eindrahtbus 
bin ich nicht so weit gekommen..
Dank euch!

von Mehmet K. (mkmk)


Lesenswert?

Guten Abend

Nimm doch - nach entsprechender Level Anpassung - ein Exclusive-NOR 
Gatter. Der eine Eingang wird mit Deinem Sende-Pin verbunden, der andere 
mit der Sende-Leitung.
Der Ausgang des Gatters kommt am besten an einen Interrupt Eingang des 
uControllers.

H H -> H
L L -> H
alle anderen Zustaende, wo die Leitung nicht mit Deinem SendePin 
uebereinstimmt, ergibt L.

MfG aus Istanbul

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.