Gast
#366579
Hallo zusammen, ich versuche mit dem angehängten Testprogramm mit einem Mega32 eine Sprungantwort aufzuzeichnen: ich gebe ein PWM-signal auf einen Elektromotor (der als Ventilator eine Klappe hochbläst) und messe eine Reaktion mittels ADC. Ich will möglichst in festen Zeitschritten die AD-Werte mittels UART (ich verwende P.Fleurys Library) auslesen. Ich löse das jetzt, indem ich in einer ISR die Daten sende. Ist das so OK, oder eher schlecht weil ich in der ISR interruptbasierten UART verwende? Ich bin mir auch nicht ganz im klaren darüber wie die UART-Funktionen funktionieren - in der ISR sind ja Interrupts eigentlich disabled (global interrupt enable flag gelöscht), aber die interruptbasierte Kommunikation geht trotzdem - ich vermute das klappt weil in der ISR nur der Buffer beschrieben wird und das eigentliche Senden erst später erfolgt? Der Code in den ISRs soll ja zudem so kurz wie möglich sein, ist meine Lösung in dieser Hinsicht OK? Alternativ könnte ich in der while-Schleife des Hauptprogramms den AD-Wert jeweils mit Timestamp (d. h. Anzahl durchlaufener ISRs) senden, aber die erste Version ist denke ich besser weil die Abtastfrequenz fest ist. (Bei der zweiten wird ab und zu eine ISR nicht übertragen, so dass Lücken entstehen.) (Die LED lasse ich übrigens als Indikator blinken, ob die ISRs gleichmässig durchlaufen oder sich bei Programmänderungen Verzögerungen bemerkbar machen.) Die Abtastfrequenz ist meiner Berechnung jetzt 50 Hz, oder täusche ich mich da? Vielen Dank für Antworten! Uli