Forum: Mikrocontroller und Digitale Elektronik CAN -Senden funktioniert nicht bei Infineon XC167


von Holger B. (rst-el)


Lesenswert?

Hallo,
ich versuche derzeit, einige Bytes über die CAN-Schnittstelle des XC167 
zu senden. Die Initialisierung habe ich mittels DAVE durchgeführt und 
als ersten Test möchte ich einige Bytes senden (ohne Interrupts). Hierzu 
verwende ich die Funktion CAN_vTransmit(0). Ich verwende den NODE B, der 
Portpin 4.7 ist für TXDCB konfiguriert, der Can-Node B wird 
initialisiert aber: Es tut sich nichts an dem Port-Pin. Testweise habe 
ich den Port auf Standard-IO uminitialisiert, da ist die Funktion ok. 
Irgendetwas scheint an meiner CAN-Initialisierung nicht zu stimmen. Der 
eingesetzte Compiler ist Tasking 8.7r1.


Die Arbeitsweise mit DAVE ist bekannt, ebenso die Übernahme in die 
Tasking-EDE.

Es liegt jedoch null Erfahrung mit CAN vor und ich habe auch keine 
APP-Note gefunden, die mir weiterhilft. Derzeit fehlt mir etwas der Plan 
bei der Vielzahl der Initialisierungsmöglichkeiten für die CAN-Nodes im 
DAVE.

Hat jemand entsprechende Erfahrungen diesbezüglich ?

Gruß Holger

von Microman (Gast)


Lesenswert?

Hallo Holger,

was macht denn eigentlich die Funktion CAN_vTransmit(0)? Habe mit dem 
XC167 schon mit beiden CAN-Schnittstellen gearbeitet. Das Programm war 
allerdings komplett selber geschrieben und nicht mit Dave erstellt. Was 
Dave macht etc. ist mir bekannt, aber die Funktionen die es erstellt 
nicht. Muss es denn unbedingt mir Dave erstellt werden?

Gruß Microman

von Horst (Gast)


Lesenswert?

Funktioniert dein CAN Driver? einfach mal softwaremäßig auf High und Low 
schalten und Messen (gibt eine Funktion im Dave die das ermöglicht)

Wie schaust du die CAN Telegramme an? Funktioniert hier alles

Gruß

Horst

von Holger B. (rst-el)


Lesenswert?

Hallo,
es muß nicht mit DAVE gearbeitet werden aber bisher bin ich damit recht 
gut gefahren. Die Funktion vTransmit(0) macht sieht folgendermaßen aus:

//---------------------------------------------------------------------- 
//  @Returnvalue   None
//---------------------------------------------------------------------
// @Parameters    ubObjNr:
//                Number of the message object (0-31)
//
//*********************************************************************
// USER CODE BEGIN (Transmit,1)

// USER CODE END

void CAN_vTransmit(ubyte ubObjNr)
{
  CAN_HWOBJ[ubObjNr].uwMSGCTR = 0xe7ff;  // set TXRQ, reset CPUUPD

} //  End of function CAN_vTransmit

wobei folgende Definition gilt:

#define CAN_HWOBJ ((struct stCanObj volatile far *) 0x200300)


Gruß Holger

von Liang Y. (yuliang)


Lesenswert?

Hallo,
Was ist Die Arbeitsweise mit DAVE ?
Bei mir ist genau so, CAN -Senden funktioniert nicht bei Infineon XC167.
Ich benutze auch CAN_vTransmit().

Bei mir ist Portpin 7. 4-7 mit CAN verbunden.
Wenn direkt in Portpin 7.7 ein Signal eingegeben (mit DP7 ^= 0x80),
dann OK.
Gibt es eine Loesung ?
mfg
Yu

von TManiac (Gast)


Lesenswert?

Was heißt bei dir 7.4-7? Hast du alle Pins von 4 bis 7 für den CAN in 
Benutzung? Oder nur die Pins 4 und 7?

Wenn letzteres der Fall ist, kann es nicht funktionieren, da die zwei 
Pins von zwei verschiedenen CAN-Nodes sind Pin 7.4 ist Rx vom Node 2 und 
Pin 7.7 ist der Tx vom Node 1.
Lässt sich das im DAvE etwa so einstellen? Das möchte ich jetzt einmal 
bezweifeln. Ich schaue aber nachher mal nach.

>Wenn direkt in Portpin 7.7 ein Signal eingegeben (mit DP7 ^= 0x80), dann OK.

Was willst du mit dem Satz (wenn man es so bezeichnen möchte) 
ausdrücken? DPx ist ein Direction-Register.

Und zu:
>Was ist Die Arbeitsweise mit DAVE ?

Mit DAvE erstellt man Grundlegende Konfigurationen um eine Basis zu 
haben. Man, wenn die Hardware in Ordnung ist und man auch weiß wie diese 
aussieht, mit DAvE alle Voreinstellungen vornehmen und dann die 
vorgefertigten Funtionen nutzen. Wenn diese nicht funktioneren, stimmt 
die Konfiguration nicht zur Hardware (einfach ausgedrückt).

Gruß,
TManiac

von Liang Y. (yuliang)


Lesenswert?

Hallo TManiac,
Dank fuer Deine Antwort.
Pin 7.4 -> CAN2 Rx
Pin 7.5 -> CAN2 Tx
Pin 7.6 -> CAN1 Rx
Pin 7.7 -> CAN1 Tx

wenn Zyklisch:
P7 ^= 0x80;
Senden und Empfangen OK.

Kannst Du mir Deine E-Mail-Adresse geben?
Meine E-Mail: yuliang_1124@yahoo.de
Dann koennten wir Kontakt mit E-Mail machen.
Ich brauche Deine Hilfe dazu. Dank.

von TManiac (Gast)


Lesenswert?

Hello again,

lass uns erst einmal versuchen deine Probleme hier über das Forum etwas 
einzugrenzen, dann können später auch andere davon provitieren.

sorry das ich das folgende jetzt frage. Ich gehe mal davon aus dass du 
schon versuchst den CAN über einen passenden CAN-Transceiver zu 
betreiben.

Was für Geschwindigkeiten probierst du? Ich würde mit 100K anfangen, da 
benötigt man noch keine Abschlusswiderstände. Mit was für einer Hardware 
arbeitest du allgmein? Einem Eva-Board?
Besteht die Möglichkeit einen fertigen CAN-Knoten zu nutzen, zB eine 
CAN-Karte oder ähnliches.

Wann machst du das hier
>wenn Zyklisch:
>P7 ^= 0x80;
>Senden und Empfangen OK.

Und woher weißt du dass es funktioniert? Bzw das es ohne dem nicht geht?

Auch wenn ich mit der gesamten C166 Familie (vom C164 bis zum XC2287) 
gearbeitet habe, bzw das noch tue, verstehe ich noch nicht an welcher 
Ecke es bei dir klemmen könnte.

Gruß
TManiac

von Liang Y. (yuliang)


Angehängte Dateien:

Lesenswert?

Hallo TManiac,
Dank fuer Deine Antwort.

Hardware ist TioBoard. Microcontriller: XC167CI-16F, 8,0MHz.
Realisierung der CAN-Schnittstellen zum Collimator erfolgt unter 
Verwendung des CAN Nord A und B des TwinCAN Moduls des XC167.
Als CAN-Transceiver der Type SN65HVD251 benutzt.

Ich habe nur eine kleine Testsoftware zum CAN-Testen (CAN A senden, CAN 
B empfangen) geschrieben.
Siehe Anhang.
Aber funktioniert nicht.
Kannst Du mal anschauen, die Konfigurationen richtig oder nicht ?


Wenn zyklisch P7.7 (CAN A Tx) 1->0->1 abgegeben,
dann bei P7.4 (CAN B Rx) auch Signal 1->0->1 bekommen.

Wenn nicht:
bei P7.7 und auch P7.4 keine Signals.

MFG
Yuliang

von Liang Y. (yuliang)


Lesenswert?

das Problem schon geloest !
Dank.

von TManiac (Gast)


Lesenswert?

Verrätst du auch woran es lag?

Danke.

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.