Forum: Mikrocontroller und Digitale Elektronik PIC18F Parallele Nutzung von CANRX und INT am selben Pin möglich?


von Bad U. (bad_urban)


Lesenswert?

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.

von dunno.. (Gast)


Lesenswert?

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?

von Klaus (Gast)


Lesenswert?

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

von Witkatz :. (wit)


Lesenswert?

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?

von Ditto (Gast)


Lesenswert?

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

von Steffen R. (steffen_rose)


Lesenswert?

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.

von dunno.. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Dr. Sommer (Gast)


Lesenswert?

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

von Bad U. (bad_urban)


Lesenswert?

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.

von Jochen-paul S. (picfan)


Lesenswert?

Hallo,
Datasheet PIC18F66K80-family auf Seite 454 siehe "BUS ACTIVITY WAKE-UP
INTERRUPT"
freundlichen Gruss, picfan

von Steffen R. (steffen_rose)


Lesenswert?

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.

von Bad U. (bad_urban)


Lesenswert?

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.

von Bad U. (bad_urban)


Lesenswert?

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
Noch kein Account? Hier anmelden.