Forum: Mikrocontroller und Digitale Elektronik Can vhdl Controller


von xxx_vhdl_y (Gast)


Lesenswert?

Hallo zusammen,

ich arbeite gerade an einer Project mit schwerpunkt CAN Bus in Vhdl.
ich habe 2 Can gleiche  CAN Controller module die im Vhdl geschrieben 
sind  und ich möchte dass sich die beide Daten Autauschen.
das Module Besitzt:

Tx :out
Rx :in
send_data :in (8bit)
adresse :in (8bit)
data_out: out (8 bit) für empfangene Daten
Clk: in.

für simulation zwecke bin ich mal auf die Idee gekommen entsprechenden 
tx und rx zu verbinden.
aber ich habe leider kein empfang von Daten am Ausgang dh ich bekomme 
nichts am beide controller.


Kann mir jemand helfen oder tipps geben wie ich den beiden CAN 
Controller  in vhdl für simulation zwecks verbinden kann?

Danke!!!

von Benji (Gast)


Lesenswert?

Ohne weitere Code-Teil und eine Beschreibung der Hardware kann dir hier 
vermutlich niemand helfen.
TX und RX sind vermutlich die Ausgänge des CAN-Controllers, die zum 
Prozessor führen sollen oder? Und NICHT die Ausgänge zum CAN-Treiber: 
also CAN-HIGH und CAN-LOW?

Grüße

von Irgendjemand (Gast)


Lesenswert?

Man kann nicht einfach die Rx und Tx signale zweier CAN Controller mit 
einander verbinden. Rx und Tx dienen dazu den Buspegel (meist zwischen 
CAN High/CAN Low) zu lesen (Rx) bzw. zu schreiben (Tx), was durch den 
CAN Tranceiver geschieht.

Um zwei (oder mehr) CAN Controller ohne Tranceiver zu verbinden, muss 
der physikalische Bus durch Logikverschaltung der Rx und Tx Signale 
aller CAN Controller nachgebildet werden. Wichtig ist, dass der CAN 
Controller beim Senden jederzeit den aktuellen Buspegel zurücklesen 
muss. Um mehrere CAN Controller zu verbinden muss der Buspegel aus den 
Tx Signalen aller Controller ermittelt werden.

Ein Ansatz wäre:

bus_level <= Tx_0 and Tx_1 ...
Rx_0 <= bus_level; Rx_1 <= bus_level; ...

Durch die Und-Verknüpfung wird der "Bus" dominant sombald ein Controller 
ein dominantes Bit schreibt (Tx). Der ermittelte Buspegel wird an die 
Controller zurückgegeben (Rx).

Gruß

von Peter D. (peda)


Lesenswert?

xxx_vhdl_y schrieb:
> send_data :in (8bit)
> adresse :in (8bit)
> data_out: out (8 bit) für empfangene Daten

Bist Du sicher, das das CAN sein soll?

CAN arbeitet weder mit Adressen, noch mit Bytes.
CAN arbeitet mit MOBs und diese bestehen aus einen Identifier (11 bzw. 
29 Bit) und einem Datenfeld (0..8 Byte).
Oftmals gehört zu einem MOB auch ein 16Bit Timestamp. Damit kann man die 
Uhren aller Teilnehmer sehr genau synchronisieren.
Das Empfangs-MOB enthält zusätzlich eine Maske, mit der man Bits im 
Identifier maskieren kann.

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.