Forum: Mikrocontroller und Digitale Elektronik Interrupt Funktionsaufruf


von Greenhorn (Gast)


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

von A.K. (Gast)


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.

von johnny.m (Gast)


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.

von Falk (Gast)


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

von johnny.m (Gast)


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

von Falk (Gast)


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

von johnny.m (Gast)


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

von Greenhorn (Gast)


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

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.