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
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
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
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
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
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
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.
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
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
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.