www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR, zeitkritische Anwendung/USART: Interrupt oder pollen


Autor: Peter Schulze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

bekomme von einem anderen Gerät Daten über die USART und ab und an per 
SPI (wobei ich/der UC jedoch der Master ist). Die (Mess-)Daten die über 
die USART reinkommen, müssen ein wenig weiterverarbeitet werden. Wenn 
Daten reinkommen, wird lt. Protokoll die SPI nicht genutzt, nur nach 
einer komplett abgeschlossenen Übertragung. Die USART läuft mit 
115,2kBaud. Da die Berechnung nicht nur eine einfache Schiebeoperation 
ist, sondern auch (teilweise) FFT beinhaltet/beinhalten soll, frage ich 
mich wie ich die USART abfrage. Leider gibt es kein XON/XOFF in irgend 
einer Form und wenn ich Daten verliere weil ich auf dem uC zu langsam 
bin, kann ich den Block (4k Daten) noch mal neu anfordern :=(
Da ich/der uC (16MHz, AVR Mega) außer diesen beiden Aufgaben nichts zu 
tun hat, überlege ich die USART zu pollen. So würden die ganzen Sprünge 
beim Auslösen eines INT wegfallen, d.h. ich würde die ganze Zeit das 
Empfangsregister pollen. Gibt es da Tipps wie man möglichst viel Zeit im 
main zur Verfügung hat (USART muss im zeitkritischen Teil nur 
empfangen)?

Gruß,

Peter

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach´s doch besser per Interrupt und halte diesen kurz: hole nur die 
Daten ab, schreibe sie in´s RAM, setze ein Flag und mach die 
Verarbeitung in der Main. Die 10 Zyklen, die Du für die 
Interrupt-Sprünge brauchst, sind sicher noch drin und besser, als 
velorene Bytes.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also bei 115,2kBaud würde ich auf jeden Fall einen Puffer im 
Interrupthandler einichten.

4kB ist ja recht heftig, die kann man nicht alle puffern. Da muß also 
noch irgendne Vorverarbeitung erfolgen.


Peter

Autor: Peter Schulze (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

danke für die Antworten. Hatte mir bis jetzt nur das USART Beispiel von 
P. Fleurry angesehen und fand das relativ viel Code.

@ Travel Rec:
Wenn man genau weiß wie lange die Verarbeitung dauert, sollten ja weder 
mit Interrupts, noch beim pollen Daten verloren gehen. Wenn die Daten 
mit 115k ankommen und der uC mit ca. 14MHz läuft (um halt die 115k ohne 
Fehler bedienen zu können), kommt ja alle 120 Takte ein neuer Wert an.

@ Namensvetter ;=)
Habe mich evtl. missverständlich ausgedrückt: Puffern müsste ich nur 
immer 162 (160Daten + 2Korrektur/Prüfung) Bytes (insgesamt 25*162Bytes). 
Diese "kleinen Pakete" würde ich dann wieder auf 4 Bytes reduzeiren 
können. Das Problem ist nur, dass ich erst nach 4K wieder eine 
Neuübertragung anstoßen könnte. Ich muss (und kann) also nicht 4K im 
Speicher bereithalten.

Werde mich jetzt doch mal mehr zur Lösung mit Interrupts durchlesen, 
muss gestehen: bis jetzt habe ich die vernachlässigt.

Danke für euer Erfahrungen/Meinungen.

Peter

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.