Hallo, ich habe mal eine frage zum Bit-Timing. Dabei wird ja ein Bit in vier teile unterteil (Synchronisationssegment, Laufzeitsegment, Phasensegment 1 und Phasensegment 2). Desweiteren wird das Bit ja in einer anzahl gleichlanger Zeitabschnitte unterteilt. Der Abtastzeitpunkt ist ja immer am ende vom ersten Phansensegment.. Diesen kann ich durch verlängern des ersten Phasensegments, bzw. kürzen des zweiten Phasensegments verschieben. Es wird ja danach gegangen, wo dei Flanke eintrifft. Aber welche Flanke genau? Die vom jeden Bit? Das würde ja bedeuten, dass der Controller sich für jedes Bit neu synchronisiert. Aber was wäre wenn ich zwei nullen oder zwei einsen hintereinander schicken möchte? Dann habe ich ja keine Flanke mehr. Oder wird nur von der Flanke des Startbits einer kompletten Nachricht ausgegangen? Ist das dann für jede Nachricht neu? Also wird jede Nachricht neu syncrhonisiert? Oder muss man sich im prinzip mit der ersten Nachricht die über dem Bus läuft synchronisieren und bleibt dann immer so? Johannes
Johannes schrieb: > Die vom jeden Bit? Ja. > Das würde ja bedeuten, dass der Controller sich für > jedes Bit neu synchronisiert. Aber was wäre wenn ich zwei nullen oder > zwei einsen hintereinander schicken möchte? Dann habe ich ja keine > Flanke mehr. Genau deshalb wird nach 5 gleichen Bits ein Füllbit eingefügt. https://de.wikipedia.org/wiki/Bitstopfen
Prinzipiell kann man sich nur an Pegelwechsel orientieren. Andere Informationen hat man nicht zwischen den Teilnehmern. Der CAN Controller kann dies aber nicht beliebig verschieben. Dies geht nur im Rahmen der kleinsten Zeiteinheit - dem Timequantum (tq). Am Anfang des Frames beim Wechsel von Rezessive zu Dominant findet eine 'Hard Synchronization' statt. Damit beginnt für alle das Signal zur selben Zeit. Danach findet bei jedem Rezessive zu Dominant Wechsel eine Resynchronisation statt. Bei dieser kann der CAN Controller um max. Sync Jump With seinen TZakt anpassen.
Ah, super. Das mit dem Bitstuffing habe ich auch schon einmal gelesen, wusste jetzt aber nicht, dass es für die Synchronisation gemacht wird (Der grund war mti auch ncoh nciht ganz klar). Ich danke euch
Eine Nachfrage ist mir doch noch gekommen. Es wird ja immer am ende des ersten phasen-segmentes der Wert des Bits ermittelt. Der wert der dort gemessen wird ist der Wert des Bits. Woher weiss dieser denn jetzt, wann die Flanke eingetroffen ist? Also ob jetzt ein TQ im Laufzeitsegment oder drei TQ im Laufzeitsegment vergangen sind? Dann müsste das Bit ja eigentlich öfters den Wert abfragen.
Die Flanke ermittelt der CAN Controller unabhängig von der Bittimingeinstellung. Bei der Hard Synchronization geht's mit dem ersten tq des Sync Segments los. Bei der Resynchronization vergleicht er die Position der Flanke (also das Sync Segment des Senders) mit der eigenen Position des Sync Segments.
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.