Forum: Mikrocontroller und Digitale Elektronik CAN Receive Polling oder Interrupt


von Andreas R. (moron)


Lesenswert?

hallo,
ich versuch grad nen can-bus mit einem at90can aufzubauen.
kann mich mal jem etwas über polling- und interruptbetrieb bei nem 
canbus aufklären, ich bin da absolut unerfahren??
der controller soll in regelmäßigen abständen daten in einer 
can-botschaft übermittelt bekommen.
ich möchte erhaltene nachrichten gerne einmal pro schleifendurchlauf 
einlesen.
muss ich dann denn bei jeder abfrage in einer schleife solange warten, 
bis eine nachricht am port ankommt, oder kann der controller auch 
automatisch das message-register mit jeder neu ankommenden nachricht 
updaten und ich les es dann aus, wenn ich es brauche.
oder wäre dieses automatische updaten schon der interrupt-betrieb??

mir ist halt wichtig, dass ich möglichst wenig zeitverzögerung in meinem 
programm hab. was ist die günstigste variante??

hoffe jem versteht das da oben
grüsse
andreas

von Obelix (Gast)


Lesenswert?

Ist dir der Unterschied zwischen pollen und interrup im allgemeinen 
bekannt? Ich meine unabhängig von CAN.

von Obelix (Gast)


Lesenswert?

Je nach dem was du machen willst ist pollen oder Interrupt besser. Wenig 
Zeitverzögerung spricht im allgemeinen für Interrupt.
Aber um was genaueres zu sagen ist deine Frage zu schwammig.

von Andreas R. (moron)


Lesenswert?

hi, der unterschied müsste klar sein.
es ist so, dass ich dachte, dass der interrupt mehr zeit kostet, denn 
wenn in zu kleinen zeitabständen nachrichten eingehen, werden doch 
andauernd interrupts ausgelöst.
es würde mir reichen, wenn ich einmal pro programmdurchlauf die 
can-message zyklisch abfrage.
meine frage war, muss ich, wenn ich keinen interrupt-betrieb möchte, mit 
meinem programm beim abfragen des can-eingangs jedesmal solange warten, 
bis aktuell eine nachricht am eingang ankommt?? quasi ne warteschleife??
oder kann ich den avr so einstellen, dass er eine eingehende nachricht 
automatisch und "parallel" zum hauptprogramm empfängt und solange im 
register behält, bis ich die nachricht auslese. danach setze ich den 
can-eingang wieder zurück, und er wartet auf die nächste message, usw.. 
geht das? und wenn ja, welche bits muss ich setzen, für den 
betriebsmodus??

das ist jetzt etwas anders formuliert als oben. bin mir noch nicht so 
ganz im klaren was ich genau will bzw. kann mit den at90can.

von Alex (Gast)


Lesenswert?

Die Nachricht in einer Mailbox wird erst überschrieben, wenn die nächste 
Nachricht komplett empfangen wurde. Wann das ist hängt von deiner 
Baudrate und Framelänge ab, das kannst du dir selbst ausrechnen.

Wenn du es schaffst, in dieser Zeit mindestens einmal in deiner 
Main-Loop die CAN-Mailbox zu checken hast du kein Problem, sonst schon.

Den Overhead einer Interrupts kannst du, wenn du nicht gerade bei 1 MBit 
und einem DLC von 0 arbeitest (Interruptfrequenz etwa 20 kHz) in den 
Skat drücken, von daher nutze ihn.

Stelle aber sicher, dass andere ISRs oder dein Hauptprogramm nie die 
Interrupts länger als o.g. worst-case Zeit sperren, sonst hast du ein 
Problem, dass du aber im Polling auch gehabt hättest ...

von Jupp V. (mng)


Lesenswert?

Nicht ganz korrekt. Nachdem eine Nachricht empfangen wurde, nimmt der 
entsprechende MOb keine neuen Nachrichten mehr an. Dazu muss er erneut 
wieder auf Empfang geschaltet werden.

von Alex (Gast)


Lesenswert?

Hi,

das hast du recht, kannte den AT90CAN128 nicht.

Laut Datenblatt wäre ein Workaround, jeweils 2 MOB identisch zu 
konfigurieren, die Nachricht landet dann zunächst im erstbesten und das 
zweite könnte noch einen weiteren Frame aufnehmen, während das erste MOB 
von der Applikation gelesen wird.

Der "Frame buffer receive mode" erscheint mir aber eher unpraktisch, da 
man wissen muss wie viele Frames als burst kommen.

von Andreas R. (moron)


Lesenswert?

hi, danke für die hilfe. ich habs gestern zum laufen bekommen. habs nun 
so, wie jupp es sagte. ich aktiviere den empfänger, er liest die 
nachricht ein und speichert diese solange, bis ich sie aus dem MOb 
auslese und diesen von neuem aktiviere.
die nachrichten die ich in dieser zeit nicht empfangen kann, weil der 
MOb voll ist und sperrt, sind nicht so zeitkritisch, dass ich unbedingt 
jede eingehende nachricht bearbeiten muss.
es ist immer dieselbe nachricht, die ich empfange. nur die daten ändern 
sich (relativ langsam). der polling betrieb müsste dafür also geeignet 
sein.

danke+gruß
andreas

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.