www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt Funktionsaufruf


Autor: Greenhorn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe ein Projekt bei dem ich über genau einer Minute 16 AD-Wandler 
Kanäle einlese und bei weiteren 4 Kanälen eine Frequenzmessung 
durchführe.Die Frequenzmessung erfolgt über einem Timer der genaua eine 
Sekunde läuft und dann abgeschaltet wird, innerhalb  dieser Sekunde 
weden mit Hilfe von 4 externen Interrupts die 4 Frequenzen gezählt. Nun 
muss ich noch ein Protokoll schreiben, welches die Daten per RS485 
versendet bzw. andere Konfigureationsdaten bekommt. Meine Frage , kann 
ich die Daten mit Hilfe des USART RX Interrupt empfangen und aus der 
Interrupt Routine eine Funktion aufrufen , die innerhalb von 50 ms eine 
Antwort gibt. Oder könnten sich die Interrupts der Frequenzmessung und 
des USART irgendwie stören. Die empfangenen Daten können zufällig über 
den Zeitraum der Minute auftreten.

WINAVR und ATmega2560

Danke

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Regel: In Interrupts nie signifikante Zeitverzögerungen einbauen (ein 
paar Mikrosekunden sind ok). Heiss hier also: Rx-Interrupt speichert 
empfangene Daten ob und Hauptprogramm oder Tx-Interrupt sendet.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
50 ms sind für eine ISR eine sehr lange Zeit. Und bei einer 
Frequenzmessung über externe Interrupts sind Störungen so gut wie 
sicher, es sei denn, Deine zu messenden Frequenzen sind deutlich kleiner 
als 20 Hz (50 ms Periodendauer). Während dieser 50 ms Wartezeit ist 
schließlich das komplette System blockiert. Funktionsaufrufe diesen 
Umfangs legt man eigentlich immer ins Hauptprogramm. Setze in der ISR 
ein Jobflag und bearbeite den Rest im Hauptprogramm.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Greenhorn

>ich die Daten mit Hilfe des USART RX Interrupt empfangen und aus der
>Interrupt Routine eine Funktion aufrufen , die innerhalb von 50 ms eine
>Antwort gibt.

Ja, kein Problem.

>Oder könnten sich die Interrupts der Frequenzmessung und
>des USART irgendwie stören.

Bei richtiger Programmierung ist das kein Problem.

MfG
Falk

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk:
Bist Du der "echte" Falk? So eine unqualifizierte und irreführende 
Antwort hätte ich von dem nämlich nicht erwartet...

Wenn er mit 4 externen Interrupts für Frequenzmessung arbeitet (und auch 
noch 16 ADC-Kanäle, von denen er allerdings nicht schreibt, ob die 
Auswertung ebenfalls Interrupt-gesteuert läuft), dann sind 50 ms 
Wartezeit in einer ISR absolut tödlich! Es sei denn, ich hab da an 
seinen Ausführungen etwas falsch verstanden...

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@johnny.m

>Bist Du der "echte" Falk? So eine unqualifizierte und irreführende
>Antwort hätte ich von dem nämlich nicht erwartet...

Es kann nur einen geben! (Auch wenn er in diesem Forum leicht zu 
fälschen wäre)

>Wenn er mit 4 externen Interrupts für Frequenzmessung arbeitet (und auch
>noch 16 ADC-Kanäle, von denen er allerdings nicht schreibt, ob die
>Auswertung ebenfalls Interrupt-gesteuert läuft), dann sind 50 ms
>Wartezeit in einer ISR absolut tödlich! Es sei denn, ich hab da an
>seinen Ausführungen etwas falsch verstanden...

Ich denke du hast.

"die innerhalb von 50 ms eine Antwort gibt."

Die Antwortzeit soll unter 50ms liegen. Niemand soll im Interrupt 50ms 
warten.

MFG
Falk, er Echte

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Falk:
Ich verstehe die Aussage
> ...aus der Interrupt Routine eine Funktion aufrufen , die innerhalb von 50
> ms eine Antwort gibt.
so, dass diese Funktion, die aus der ISR heraus aufgerufen wird, bis zu 
50 ms dauern kann (und dementsprechend so lange das System blockiert). 
Da der OP sich noch nicht weiter dazu geäußert hat, kann man da 
natürlich nur vermuten...

Autor: Greenhorn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

die ADC-Messwertaufnahme geschieht ohne Interrupts. Wenn ich ein 
Telegramm mit dem USART erhalte, habe ich 50 ms Zeit, eine Antwort zu 
senden.Ich muss aber vorher analysieren was es für ein Telegramm ist 
(Kurz,Lang bzw. Quittungstelegramm)und welchen Funktion er mir übergibt 
und ausführen. Dann muss wie schon gesagt, innerhalb von 50 ms eine 
Antwort erfolgen. Kann ich demach das Empfang der Telegramme vollständig 
in die USART-RX-Routine programmieren?
DAnke

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.