MicroPython Timer -> Timeout

  • Ich habe mal ein Frage an all die Python Profis.

    Ich habe eine Timer Routine geschrieben, bei der periodisch ein Display aktuallisiert werden soll.
    Dass funktioniert soweit einwandfrei.

    Jetzt habe ich jedoch ein Problem bei der Werterfassung. Wenn und es kommt gelegentlich vor, benötigt die Abfrageroutine doch etwas länger, als die Wiederholrate die für die Displayaktualisierung vorgesehen ist, und der PICO bleibt hängen.

    Gibt es eine Möglichkeit innerhalb der Display-Routine /-funktion zu sagen, Timer Interrupt unterbrechen, führe den Code vollständig aus, und dann erst gib diesen Timer wieder frei.

    Danke

    es grüßt
    Andre

  • Hallo,

    ich weis nicht ob ich den Programmablauf aus deinem Text richtig interpretiert habe. Wenn ja, dann würde ich die Werte periodisch abfragen und erst wenn die Werte da sind, das Display aktualisieren. Wenn es dann halt übertrieben gesagt, 5 Minuten geht, bis die Werte aktuell sind, ist das egal, weil das Display die neuen Werte erst dann bekommt, wenn der Rest soweit ist.

    Wenn du das Display aber regelmäßig aktualisieren musst, wegen einer Animation oder ähnliches, dann musst du vielleicht Teile des Displays unabhängig von anderen aktualisieren.

    Vielleicht möchtest du etwas ausholen, was da gemacht wird und den Code dazu posten?

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hallo

    Ich möchte das Display spätestens aller 2 Sekunden aktualisieren.
    Dazu werden einmal die Laufzeit angezeigt, und zum anderen andere Meßwere. Darunter auch ein Counter der ein Hi-Low als Verhältnis eines Eingangssignales verarbeitet.
    Ich habe bisher noch keine Erklärung gefunden warum eine entzelne Messung mit

    Code
    time_pulse_us(self.input, 1, 1_000_000)

    beim Beginn der Anfrage unter gewissen Umständen erst einmal ein falsches Ergebnis liefert, obwohl der Signaleingang momentan noch von einem Funktionsgenerator gespeist wird.

    Code
    on_time = sum([time_pulse_us(self.input, 1, 1_000_000) for _ in range(counter + 2)][2:]) / counter

    Damit habe ich einen recht konstanten Wert erzielen können. Ich habe das ganze auch schon einzeln ablaufen lassen, also auf mehrere Zeilen aufgegliedert, um ermitteln zu können, wie viele Werte ich bei dieser Betrachtung abschneiden muss.
    Nun wird dieser Vorgang auch noch einmal mit dem Sprung auf Low = Status 0 wiederholt. Dazu schalte ich jeweils noch den Eingangspin von Pull_Down auf PulL_Up um, um das Zeitverhältnis Low to High und High to Low ermitteln zu können.

    Dazu hatte ich mir zu erst zwei Timer geschrieben, einer der das Display aktualisiert, und einen der diesen Meßzyklus startet. Das funktionierte überhaupt nicht. Wenn diese Abfrage noch lief und mit der Displayaktualisierung zeitlich zusammen gefallen ist, hatte ich nur fehlerhafte Meßwerte, egal wie klein ich den Counter gesetzt hatte. Mein Problem für die Endanwendung ist ich möchte das Verhältnis Low zu High in einem Frequenzbereich zwischen 35 Hz und 12 kHz ermitteln. Ein weiteres Problem, welches ich bisher auch noch nicht lösen konnte ist die Tatsache wie komme ich aus einer solchen Abfrage heraus, wenn das Signal aussetzt. Somit der Eingangspegel für eine Zeit X auf Low abfällt und bleibt.

    es grüßt
    Andre

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!