www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik CAN Receive Polling oder Interrupt


Autor: Andreas R. (moron)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Obelix (Gast)
Datum:

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

Autor: Obelix (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas R. (moron)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Jupp Van de balken (mng)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas R. (moron)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.