Hallo zusammen, ich sitze gerade am Schaltplan für einen CAN Knoten. Und ich hänge jetzt gerade bei einer Frage, die ich mir mit dem Datenblatt nicht beantworten kann. Ich nutze den PIC18F26K80 und dessen internen CAN Controller. CANRX habe ich an Port RB3 angeschlossen, da ich die alternative CAN-Schnittstelle an Port C für PWM benötige. RB3 hat als Alternativfunktion INT3. Ist es nun möglich trotz konfiguriertem ECAN-Modul zusätzlich einen Interrupt auszulösen, wenn sich an CANRX was tut? Der Hintergrund ist, dass ich in meiner Schaltung gerne so etwas wie eine "Bus Activity" Led einbauen will. Aber dafür wollte ich die Pulse etwas stecken. ZB. in der INT3-ISR die LED einschalten und dann vielleicht ein paar 100ms danach wieder aus. Ich hab jetzt leider keine Hardware zur verfügung mit der ich das ausprobieren kann. Aber vielleicht hat sowas ja jemand von Euch schon mal versucht.
Ich hab zwar mit PICs nichts zu tun, an anderen Microcontrollern sind die Pinfunktionen wohl in der Regel exklusiv.. Beide funktionen gleichzeitig nutzen zu können, würde mich wundern.. Ich würde die LED einfach im Interrupt des Can-Controllers schalten? Was hindert dich dran?
dunno.. schrieb: > Ich hab zwar mit PICs nichts zu tun, an anderen Microcontrollern sind > die Pinfunktionen wohl in der Regel exklusiv.. Beide funktionen > gleichzeitig nutzen zu können, würde mich wundern.. INT3 ist doch nur ein Input, warum soll das nicht gehen? Den UART TX Pin des µCs kann ich doch auch direkt einlesen (geht zumindestens mit den PICs, die ich benutze so). Outputs müssen natürlich exklusiv sein. MfG Klaus
Bad Urban schrieb: > Ist es nun möglich trotz konfiguriertem > ECAN-Modul zusätzlich einen Interrupt auszulösen, wenn sich an CANRX was > tut? In PIR5 stehen einige CAN Interruptflags. Vielleicht genügt es, WAKIF oder RXB1IF abzufragen?
Bad Urban schrieb: > Ist es nun möglich trotz konfiguriertem > ECAN-Modul zusätzlich einen Interrupt auszulösen, Wenn es im Datenblatt nicht angegeben ist dann wird es zum Glücksspiel. Wie die Funktionen auf dem Pin multiplexed sind (also ob CANRX auch an der Interrupt Logik anliegt) ist ja nicht bekannt. Besser einen zweiten Pin mit Interrupt On Change oder (falls vorhanden) einen Komparatoreingang (der ja auch eine IOC macht).
Warum löst du dieses Anzeigeproblem nicht auf Hardwareebene mit etwas Zusatzbeschaltung am CANRX Pin? Der CAN Interrupt wird nur ausgelöst, wenn die Nachricht durch die Acceptanz-Filter kommt. Es wird nichts angezeigt, wenn die Bitrate nicht stimmt, aber trotzdem CAN Traffic vorhanden ist. Ist meist für die Fehlersuche gut. Die TX Nachricht würde nicht angezeigt. Einen Interrupt bei jedem Pegelwechsel auszulösen, wäre schon etwas heftig.
Klaus schrieb: > dunno.. schrieb: >> Ich hab zwar mit PICs nichts zu tun, an anderen Microcontrollern sind >> die Pinfunktionen wohl in der Regel exklusiv.. Beide funktionen >> gleichzeitig nutzen zu können, würde mich wundern.. > > INT3 ist doch nur ein Input, warum soll das nicht gehen? Den UART TX Pin > des µCs kann ich doch auch direkt einlesen (geht zumindestens mit den > PICs, die ich benutze so). Outputs müssen natürlich exklusiv sein. > > MfG Klaus Beim ARM (7) stelle ich über pinsel ein, welche funktion den pin exklusiv nutzt, gpio geht dann nimmer (zumindest verstehe ich das datasheet so, habe nie probiert was passiert..) Ich würde überlegen was ich will: Aktivität der Node darstellen: CAN-RX interrupt als quelle. Aktivität am Bus anzeigen: Led mit Transistor von CAN-RX des Transceivers ansteuern lassen. Um das Blinken besser sichtbar zu machen, nen kleinen kondensator parallel zur LED. So wie im Anhang habe ich das mal gebaut..
dunno.. schrieb: > Beim ARM (7) stelle ich über pinsel ein, welche funktion den pin > exklusiv nutzt, gpio geht dann nimmer (zumindest verstehe ich das > datasheet so, habe nie probiert was passiert..) ARM ist eine Prozessorarchitektur (bzw. mehrere). Die hat keine Pins, CAN-Controller oder externe Interrupts. Bei zB den STM32-Controllern (ARM-basiert) geht das, denn die Input-Funktionalität ist einfach immer aktiv und kann auch dann vom externen Interrupt Controller (EXTI) genutzt werden, wenn der Pin gleichzeitig von einer anderen Peripherie genutzt wird. Den Filter vom CAN-Controller so einzustellen, dass er alle Nachrichten durchlässt, und die LED im Nachrichten-Empfangs-Interrupt einzuschalten braucht wesentlich weniger CPU-Zeit als einen externen Interrupt zu verwenden, denn so kommt der Interrupt nur 1x pro Nachricht und nicht 100x oder so...
Vielen Dank für Eure Beiträge. Ich möchte mal auf die Vorschläge eingehen. - CAN-Interrupt fällt aus. Wie schon geschrieben wurde, werden Filter verwendet und dann würden nur die Nachrichten für den Knoten an der LED angezeigt. Keinen Filter zu verwenden ist auch keine Option. Dann müsste per Software geprüft werden, ob die Nachricht für den Knoten bestimmt ist. Das benötigt sicher einiges an Zeit. Ausserdem müsste evtl. ein CAN-FIFO implementiert werden um keine Nachrichten zu verlieren. - LED an CANRX hatte ich mir auch schon überlegt. Allerdingt würde man einzelne Nachrichten dann wohl nicht sehen. Deshalb die Idee den Puls per Firmware zu verlängern. Es soll auch nicht bei jeder Flanke ein Interrupt ausgelöst werden. Ich dachte an folgende Vorgehensweise: 1. INT wird ausgelöst. In der ISR wird die LED eingeschaltet und der INT deaktiviert. 2. Nach X ms wird die LED wieder ausgeschaltet und der Interrupt wieder aktiviert. So hab ich das auch mal mit einer LED für IRMP gemacht. Da ging Eingang abfragen und INT parallel. War mir aber jetzt bei CAN nicht sicher, ob das auch funktioniert. Was ich nicht verstehe, ist die TX Nachrichten auszublenden. Der Controller hört doch beim Senden mit wegen der Arbitrierung. Das heisst doch, dass eine gesendete Nachricht auch am RX wieder ankommt. Oder verstehe ich da was falsch? - Eine PC-Int zu verwenden bin ich nicht drauf gekommen. Allderdings liegen die auch an Port B. Da ist schon einiges von Programmierung, CAN, PWM belegt. Da muss ich mal schauen, ob ich da was frei bekomme. Zur Not werd ich einfach probieren, ob es mit dem INT parallel zum CAN funktioniert. Die LED ist auch nicht sooo wichtig. Aber Nice to have :) Euch allen einen schönen Abend.
Hallo, Datasheet PIC18F66K80-family auf Seite 454 siehe "BUS ACTIVITY WAKE-UP INTERRUPT" freundlichen Gruss, picfan
Bad Urban schrieb: > - LED an CANRX hatte ich mir auch schon überlegt. Allerdingt würde man > einzelne Nachrichten dann wohl nicht sehen. Deshalb die Idee den Puls > per Firmware zu verlängern. Nichts anderes macht Dunnos Schaltung. dunno.. schrieb: >> Um das Blinken besser sichtbar zu machen, >> nen kleinen kondensator parallel zur LED. > Was ich nicht verstehe, ist die TX Nachrichten auszublenden. Der > Controller hört doch beim Senden mit wegen der Arbitrierung. Das heisst > doch, dass eine gesendete Nachricht auch am RX wieder ankommt. Oder > verstehe ich da was falsch? Für die Variante Hardware an CANRX Pin und GPIO-Interrupt am CANRX Pin hast Du recht. Der Hinweis bezieht sich auf den Empfangsinterrupt des CAN.
Steffen Rose schrieb: > Nichts anderes macht Dunnos Schaltung. Das war mir schon bewusst. Allerdings bin ich mir nicht sicher welche Blinkzeit optisch am "schönesten" wäre. Per Software wäre ich da flexibler und könnte rumprobieren. Ich hab mich jetzt entschlossen die Variante mal vorzusehen. Als Bestückvariante Anschluss an einen IO. Dann kann ichs mal ausprobieren. Je nach dem wie es im Layout zugeht werde ich auch prüfen, ob sich die PC-INT-Variante machen lässt. Vielen Dank nochmal für Eure Anregungen.
Hier mal ein kleines Feedback. Also INT3 parallel zum CAN funktioniert. Ich schalte die LED in der ISR ein und nach ca. 20ms wieder aus. Mit der Zeit muss ich noch ein wenig rumexperimentieren. Sieht aber ganz gut aus. Was nicht funktioniert hat ist das Blinken über den Wake-up-Int. Der scheint wirklich nur ausgelöst zu werden, wenn der Controller im Sleep-Mode war. So hatte ich das im Datenblatt auch verstanden, und den deshalb schon ausgeschlossen. Die Sleep-Modes habe ich aber noch nicht ausprobiert und kann daher nicht sagen, ob es dann funktionieren würde. Getestet hab ich das Ganze mit einem PIC18F46K80. Ist vom Aufbau aber recht identisch mit dem 26er. Von daher sollten die Ergebisse übertragbar sein.
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.
