Forum: Mikrocontroller und Digitale Elektronik C167CR CAN- BUS


von alex (Gast)


Lesenswert?

Hallo!!

habe ein problem mit dem CAN- Bus des C167CR

möchte daten von einem Teilnehmer zum anderen schicken, dafür habe ich 2 
Phytec- Kitcon Boards, zwischen welchen ich über den CAN-Bus etwas 
senden möchte.
hat schon jemand ein ähnliches projekt gemacht?

bei mir funktioniert anscheinend der interrupt zum empfangen nicht!

hat vl. jemand ein bsp programm welches einfach eine Test Nachricht über 
den CAN-Bus schickt und diese auf der anderen seite im Serial window 
anzeigt.

Sitz schon seit 4 Tagen dabei und finde den fehler einfach nicht.
Wär euch sehr dankbar, wenn mir jemand helfen könnte, bin schon total 
verzweifelt

Grüße Alex

von Robert Teufel (Gast)


Lesenswert?

@Alex,

hast Du schon mal die ApNote von Infineon angeschaut: "Interrupt 
Register behavior of the CAN module in our 16-bit Microcontrollers."
Schon etwas betagt aber das ist der C167CR ja auch
Weiss nicht ob dieser dynamische Link funktioniert?
http://de.sitestat.com/infineon/infineon/s?infineon.pdf.Guest.Home.Products.Product_Categories.Microcontrollers.Application_Notes___16_bit_Microcontrollers.p2902410_Interupt_register_CAN.pdf&ns_type=pdf&ns_url=[http://www.infineon.com/upload/Document/AIM/Microcontroller/16bit/p2902410_Interupt_register_CAN.pdf

Robert

von Rainer (Gast)


Lesenswert?

Hallo Alex!

Was sich bei C167-Controllern anbietet ist DAVE von Infineon. In dem 
Programm gibst Du an, welche Komponenten Du nutzen willst. DAVE erzeugt 
Dir dann ein C-Rahmenprogramm, in dem Du Deine Änderungen vornimmst.

Lohnt sich bei CAN auf jeden Fall. Auch wenn Du nur nachsehen willst, 
was Du falsch machst.

Geht denn nur der Interrupt nicht, oder ist es mehr?

Grüße,
Rainer

von alex (Gast)


Lesenswert?

Hi

habe die Konfiguration mittels DAVE durchgeführt, jedoch erreichen 
anscheinend die Nachrichten den anderen CAN- Teilnehmer nicht, ich 
denke, dass es am Empfangs Interrupt liegt. In DAve hab ich jedoch den 
CAN INT gesetzt.
hab keine ahnung warum es nicht funktioniert!

Kann ich euch unter umständen mal den Source schicken

Grüß alex

von Reinhard B. (brainstorm)


Lesenswert?

Hallo,

Wenn ich mich nicht irre, musst du nicht nur den Empfangs-INT 
aktivieren, sondern diesen auch noch einer der 8 Interrupt-Nodes des 
CAN-Moduls zuweisen. Zumindest beim XC16x ist es glaube ich so.

mfg
Reinhard

von Microman (Gast)


Lesenswert?

Hallo Alex,

damit Du CAN-Messages empfangen kannst mußt Du im CAN-Controller eines 
er 15 Messagebuffer für den Empfang konfigurieren, das machst du indem 
Du in das
Message Control Register (MCRn wobei n für eines der 15 Messagebuffer 
steht) in das 2 Bit Feld RXIE (Receive Interrupt Enable) eine 0b01 
einträgst. In diesem Zusammenhang darf man auch nicht die 
CAN-Mask-Register vergessen, damit die CAN-Nachricht nicht schon von der 
Hardware weggefiltert wird und gar nicht erst zu den Messagebuffern 
kommt.
Hier noch ein Beispiel aus dem aktuellen Manual des C167CR von der 
Infineon Seite www.infineon.com . Dort ist jetzt auch ein Beispiel für 
die Konfiguration eine Objektes enthalten, hier ein Auszug :

MCR (Message object is idle, i.e. waiting for a frame to be received)
1514   1312  1110    98     76     54   32   10
01      01    01     01     10     01   10   01
RMTPND TXRQ  MSGLST NEWDAT MSGVAL TXIE RXIE INTPND

Ich gehe jetzt mal davon aus das deine Bitrate auf beiden Modulen 
korrekt sind. Denk auch an die Abschlußwiderstände die der CAN-Bus 
braucht. An jeden Ende ein Widerstand mit 120 Ohm. Mir einem 
funktioniert er auch mit kleinen Längen noch, aber ohne ist er nicht 
funktionsfähig.

Viel Erfolg, vielleicht konnte ich helfen.

Microman

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.