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
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.
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.
@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
@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...
@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
@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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.