Forum: Mikrocontroller und Digitale Elektronik Bit-Arbitrierung & Sync bei CAN-Bus


von Seb (Gast)


Lesenswert?

Hey,
es heißt das die Priorisierung beim CAN-Bus über die Bit-Arbitrierung 
gelöst wird. Aber was macht der CAN-Bus z.B. bei dem hier:
0x7 & 0x8 = 0x0 ?
Also:

0111
1000 &
------
0000
Hätten wir jetzt sowas wie das hier:
0111
0100 &
------
0100
würde das ja noch funktionieren, aber das erste Beispiel ergibt 0 und 
keiner von beiden Knoten hat 0x0.
Habe auch etwas über das Bit-Timing gelesen und stimmt es das ich das 
richtig verstehe, das sich die Tranceiver bei jedem neuen Bit syncen?
Weil einerseits heist es am Anfang des Frames (SOF) und andererseits das 
jedes Bit in vier Phasen unterteilt ist:
Sync Segment - Propagiation Segment - Phase 1 Segment - Phase 2 Segment

lg Seb

von Dietrich L. (dietrichl)


Lesenswert?

Es ist tatsächlich so, dass bei jedem Bit einzeln  kontrolliert wird, 
wer von den beiden an der Kollision beteiligten Partner gewonnen hat. 
Der Verlieren sendet kein weiteres Bit mehr und stört die weiteren Bits 
des Gewinners nicht.

Also: es wird kein Bit des Gewinners zerstört.

Gruß Dietrich

von zoggl (Gast)


Lesenswert?

0 ist prioritär. beginne mit dem high bit:

0x8 1000
0x7 0111
0x2 0010
    | hier merkt 08 das er der höhere ist und verabschiedet sich aus 
dieser runde. 0x7 und 0x2 machen weiter:

0x7 0111
0x2 0010
     | hier merkt 0x7 dass er höher ist
0x2 gewinnt.

von Schlumpf (Gast)


Lesenswert?

Ohne, dass ich jetzt sehr tief in der Materie stecke, aber ich habe mal 
gelernt, dass der CAN bitweise arbitriert.
Es wird also Bit für Bit auf die Leitung geschrieben und jeder 
Teilnehmer liest gleichzeitig auf dieser Leitung. Schreibt ein 
Teilnehmer ein rezessives Bit, liest aber gleichzeitig ein dominantes 
Bit auf der Leitung zurück, so erkennt er, dass er "nicht dran" ist, 
zieht sich zurück und wird nur noch lesen.

Dein Beispiel müsste also so aussehen:
A(w): 0 1 1 1
A(r): 0 1 1 1
B(w): 1 Z Z Z
B(r): 0 1 1 1

B erkennt nach dem ersten Bit, dass es einen "dominanteren" Teilnehmer 
gibt und zieht sich vom Bus zurück..

von Seb (Gast)


Lesenswert?

Schlumpf schrieb:
> Ohne, dass ich jetzt sehr tief in der Materie stecke, aber ich
> habe mal
> gelernt, dass der CAN bitweise arbitriert.
> Es wird also Bit für Bit auf die Leitung geschrieben und jeder
> Teilnehmer liest gleichzeitig auf dieser Leitung. Schreibt ein
> Teilnehmer ein rezessives Bit, liest aber gleichzeitig ein dominantes
> Bit auf der Leitung zurück, so erkennt er, dass er "nicht dran" ist,
> zieht sich zurück und wird nur noch lesen.
>
> Dein Beispiel müsste also so aussehen:
> A(w): 0 1 1 1
> A(r): 0 1 1 1
> B(w): 1 Z Z Z
> B(r): 0 1 1 1
>
> B erkennt nach dem ersten Bit, dass es einen "dominanteren" Teilnehmer
> gibt und zieht sich vom Bus zurück..

Naja, nehmen wir mal das Beispiel. Mir hat man gesagt, das der Bus wie 
ein Wired - And funktioniert...
also :
1000 & 0111 = 0000
1 & 0 = 0, 0 & 1 = 0 etc...
Sprich also der Teilnehmer mit 0x8 verabschiedet sich, weil er eine 0 
zurückliest und damit schreibt er keine weiteren Bits auf den Bus und 
das rezessive Bit wird nicht mehr überschrieben von Teilnehmer 0x8...
Naja, wired-and also nur bedingt, weil bei einem wired And jetzt immer 
noch 0 rauskommen würde... auch wenn Teilnehmer B auf high-impedance 
geschaltet ist.

von Schlumpf (Gast)


Lesenswert?

Seb schrieb:
> Sprich also der Teilnehmer mit 0x8 verabschiedet sich, weil er eine 0
> zurückliest und damit schreibt er keine weiteren Bits auf den Bus

soweit richtig

> das rezessive Bit wird nicht mehr überschrieben von Teilnehmer 0x8...

auch noch richtig

> Naja, wired-and also nur bedingt, weil bei einem wired And jetzt immer
> noch 0 rauskommen würde... auch wenn Teilnehmer B auf high-impedance
> geschaltet ist.

und wie kommst du auf diesen Unfug, dass ein Wired-And aus einer 1 und 
einem Z eine 0 macht?

von Seb (Gast)


Lesenswert?

Schlumpf schrieb:
> Seb schrieb:
>> Sprich also der Teilnehmer mit 0x8 verabschiedet sich, weil er eine 0
>> zurückliest und damit schreibt er keine weiteren Bits auf den Bus
>
> soweit richtig
>
>> das rezessive Bit wird nicht mehr überschrieben von Teilnehmer 0x8...
>
> auch noch richtig
>
>> Naja, wired-and also nur bedingt, weil bei einem wired And jetzt immer
>> noch 0 rauskommen würde... auch wenn Teilnehmer B auf high-impedance
>> geschaltet ist.
>
> und wie kommst du auf diesen Unfug, dass ein Wired-And aus einer 1 und
> einem Z eine 0 macht?

Du weist schon was Wired And bedeutet, oder?! :D
Nur wenn BEIDE Zustände 1 sind, kommt 1 raus

von Schlumpf (Gast)


Lesenswert?

Seb schrieb:
> Du weist schon was Wired And bedeutet, oder?! :D

Im Gegensatz zu DIR weiss ich sehr wohl, was ein wired and ist..
Und weil du das nicht weisst, stellst du hier solche Fragen. Und wenn 
man dir helfen will, dann kommst einem noch blöd von der Seite.

Mein Tipp: Wenn du´s besser weisst, dann rätsel weiter, warum deine 
Theorie nicht funktioniert.
Oder du nimmst dir ein Stück Papier, malst da mal zwei OK-Ausgänge mit 
nem gemeinsamen PU hin und denkst mal 30 Sekunden drüber nach, ob du 
deine Aussage von oben nicht einfach korrigieren willst..

von Seb (Gast)


Lesenswert?

Schlumpf schrieb:
> Seb schrieb:
>> Du weist schon was Wired And bedeutet, oder?! :D
>
> Im Gegensatz zu DIR weiss ich sehr wohl, was ein wired and ist..
> Und weil du das nicht weisst, stellst du hier solche Fragen. Und wenn
> man dir helfen will, dann kommst einem noch blöd von der Seite.
>
> Mein Tipp: Wenn du´s besser weisst, dann rätsel weiter, warum deine
> Theorie nicht funktioniert.
> Oder du nimmst dir ein Stück Papier, malst da mal zwei OK-Ausgänge mit
> nem gemeinsamen PU hin und denkst mal 30 Sekunden drüber nach, ob du
> deine Aussage von oben nicht einfach korrigieren willst..

Dann korrigiere doch lieber denn Wikipedia Eintrag dazu:
Die Wired-And-Verknüpfung lässt sich in positiver Digital-Logik 
(logischer Zustand 1 entspricht etwa der positiven Versorgungsspannung) 
im einfachsten Fall durch Dioden erreichen, deren Kathoden als Eingänge 
dienen, wie in nebenstehender Abbildung die Anschlüsse A und B. Die 
zusammengeschalteten und über einen Widerstand an Versorgungsspannung 
liegenden Anoden erzeugen am Ausgang C nur dann eine logische 1 am 
Ausgang, wenn an allen Eingängen ebenfalls logisch 1 anliegt.

von M. D. (wpmd)


Lesenswert?

Seb schrieb:
> Dann korrigiere doch lieber denn Wikipedia Eintrag dazu:
> Die Wired-And-Verknüpfung lässt sich in positiver Digital-Logik
> (logischer Zustand 1 entspricht etwa der positiven Versorgungsspannung)
> im einfachsten Fall durch Dioden erreichen, deren Kathoden als Eingänge
> dienen, wie in nebenstehender Abbildung die Anschlüsse A und B. Die
> zusammengeschalteten und über einen Widerstand an Versorgungsspannung
> liegenden Anoden erzeugen am Ausgang C nur dann eine logische 1 am
> Ausgang, wenn an allen Eingängen ebenfalls logisch 1 anliegt.

Jetzt leg mal einen der beiden "Eingänge" über einen hochohmigen 
Widerstand an GND und den anderen an high. Ist der Punkt C dann high 
oder low?

von Schlumpf (Gast)


Lesenswert?

Ich korrigiere hier gar nichts..
Wenn du es nicht raffst, hier um Unterstützung bittest, diese auch von 
verschiedenen Stellen erhältst, es dann immer noch nicht raffst, weil du 
vermutlich von Schaltungstechik keine Ahung hast, und dann den Leuten, 
die dir helfen, überheblich kommst, dann bin ich raus.

Ich weiss, wie´s funktioniert..

Beitrag #5787647 wurde von einem Moderator gelöscht.
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.