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
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«.
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!
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!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.