www.mikrocontroller.net

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


Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Philipp (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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«.

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Florian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: Mehmet Kendi (mkmk)
Datum:

Bewertung
0 lesenswert
nicht 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

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.