Windmesser mit Interrupts

@MicroBahner
hast Recht.
Da wird nur Zeitverhalten des UART Empfangsinterrupts beschrieben.

Ich habe jetzt mal die Boudrate auf 57600 erhöht, damit die Daten schneller über den TX flutschen.
Zu schnell will ich nicht einstellen, weil sich sonst die Fehlerquote erhöht.

Wird ja keine Mondlandefähre mit Menschen drin sondern nur eine Wetterstation.
Meine Krümelkackerei wegen Zuverlässigkeit und Genauigkeit ist aber angeboren.

1 Like

freddy64:
Ich habe jetzt mal die Boudrate auf 57600 erhöht, damit die Daten schneller über den TX flutschen.

das geht auch mit 9600 fehlerfrei.
ganz ganz bestimmt.

das geht auch mit 9600 fehlerfrei.

Wäre mir auch lieber wegen der Leitungslänge von > 10m.

...und ich kann gerade nicht basteln, weil das Essen für's Wochenende auf dem Herd brodelt.
Kohle im Topf ist bähhhh.

1 Like

Was gibt es Schönes?

Gruß Tommy

freddy64:
Essen für's Wochenende auf dem Herd brodelt.
Kohle im Topf ist bähhhh.

Am Stück? Saftbraten?
Sonst wär's vielleicht nen guter Gulasch... Der MUSS wieder warm gemacht werden...

Ja, Gulasch schmeckt erst aufgewärmt richtig gut, Eintöpfe auch :wink:

Gruß Tommy

Was gibt es Schönes?

Kalbsrollbraten :slight_smile:

Hab jetzt mal einen experimentellen Taktgeber als Anemometer angeschlossen.
Hier das Ergebnis:
bei 1 tick/s ws = Windgeschwindigkeit in kmh
runtime: 0 days 00:01:00:000
{"t":21.81,"h":52,"p":1023,"b":36,"r":0.00,"ws":3.62,"wd":0}
runtime: 0 days 00:02:00:000
{"t":21.81,"h":52,"p":1023,"b":41,"r":0.00,"ws":3.62,"wd":0}
runtime: 0 days 00:03:00:000
{"t":21.81,"h":52,"p":1023,"b":45,"r":0.00,"ws":3.62,"wd":0}

bei 2 ticks/s ws = Windgeschwindigkeit in kmh
runtime: 0 days 00:01:00:000
{"t":21.81,"h":51,"p":1023,"b":45,"r":0.00,"ws":7.24,"wd":0}
runtime: 0 days 00:02:00:000
{"t":21.81,"h":51,"p":1023,"b":45,"r":0.00,"ws":7.24,"wd":0}
runtime: 0 days 00:03:00:000
{"t":21.81,"h":51,"p":1023,"b":44,"r":0.00,"ws":7.24,"wd":0}

bei 3 ticks/s ws = Windgeschwindigkeit in kmh
runtime: 0 days 00:01:00:000
{"t":21.81,"h":52,"p":1023,"b":52,"r":0.00,"ws":10.86,"wd":0}
runtime: 0 days 00:02:00:000
{"t":21.81,"h":51,"p":1023,"b":55,"r":0.00,"ws":10.86,"wd":0}
runtime: 0 days 00:03:00:000
{"t":21.81,"h":52,"p":1023,"b":59,"r":0.00,"ws":10.86,"wd":0}

bei 4 ticks/s ws = Windgeschwindigkeit in kmh
runtime: 0 days 00:01:00:000
{"t":21.81,"h":51,"p":1023,"b":67,"r":0.00,"ws":14.48,"wd":0}
runtime: 0 days 00:02:00:000
{"t":21.81,"h":52,"p":1023,"b":70,"r":0.00,"ws":14.48,"wd":0}
runtime: 0 days 00:03:00:000
{"t":21.81,"h":52,"p":1023,"b":74,"r":0.00,"ws":14.48,"wd":0}

bei 5 ticks/s ws = Windgeschwindigkeit in kmh
runtime: 0 days 00:01:00:000
{"t":21.68,"h":52,"p":1023,"b":79,"r":0.00,"ws":18.10,"wd":0}
runtime: 0 days 00:02:00:000
{"t":21.68,"h":52,"p":1023,"b":79,"r":0.00,"ws":18.10,"wd":0}
runtime: 0 days 00:03:00:000
{"t":21.68,"h":53,"p":1023,"b":82,"r":0.00,"ws":18.10,"wd":0}

bei 10 ticks/s ws = Windgeschwindigkeit in kmh
runtime: 0 days 00:01:00:000
{"t":21.75,"h":51,"p":1023,"b":88,"r":0.00,"ws":36.21,"wd":0}
runtime: 0 days 00:02:00:000
{"t":21.75,"h":52,"p":1023,"b":87,"r":0.00,"ws":36.21,"wd":0}
runtime: 0 days 00:03:00:000
{"t":21.75,"h":52,"p":1023,"b":89,"r":0.00,"ws":36.21,"wd":0}

bei 20 ticks/s ws = Windgeschwindigkeit in kmh
runtime: 0 days 00:01:00:000
{"t":21.75,"h":52,"p":1023,"b":108,"r":0.00,"ws":72.42,"wd":0}
runtime: 0 days 00:02:00:000
{"t":21.75,"h":52,"p":1023,"b":118,"r":0.00,"ws":72.42,"wd":0}
runtime: 0 days 00:03:00:000
{"t":21.75,"h":51,"p":1023,"b":115,"r":0.00,"ws":72.42,"wd":0}

bei 50 ticks/s ws = Windgeschwindigkeit in kmh
runtime: 0 days 00:01:00:000
{"t":21.81,"h":51,"p":1023,"b":104,"r":0.00,"ws":181.50,"wd":0}
runtime: 0 days 00:02:00:000
{"t":21.75,"h":51,"p":1023,"b":106,"r":0.00,"ws":179.24,"wd":0}
runtime: 0 days 00:03:00:000
{"t":21.75,"h":51,"p":1023,"b":114,"r":0.00,"ws":181.50,"wd":0}

20 u/sec entsprechen schon Windstärke 8
bei 50 u/sec hebt es die Welt aus den Angeln
Da kommen die ws Unterschiede durch den debounce Schutz von 15ms am IRQ Pin.

Ich habe zur Kontrolle eine LED an D12 angeschlossen, die im Takt der Wind-IRQ's blinkt. Die unterbricht kurzzeitig ihr gleichmäßiges Blinken, wenn die Daten über den Serial Port gesendet werden.
Also benutzt TX auch Interrupts, nicht nur RX -> wieder was gelernt.

So gleichmäßig wie hier im Experiment mit Taktgeber weht eh nie der Wind.

Fazit:
funktioniert doch so -> jetzt Gehäuse fertig bauen und Alles rein in die Röhre.

1 Like

freddy64:
Kalbsrollbraten :slight_smile:

Hab jetzt mal einen experimentellen Taktgeber als Anemometer angeschlossen.

20 u/sec entsprechen schon Windstärke 8
bei 50 u/sec hebt es die Welt aus den Angeln
Da kommen die ws Unterschiede durch den debounce Schutz von 15ms am IRQ Pin.

Fazit:
funktioniert doch so -> jetzt Gehäuse fertig bauen und Alles rein in die Röhre.

Schick. Hab ich doch gesagt :wink:
Aber wozu brauchst Du 15ms debounce?
Hallsensoren prellen nicht und bei prellenden reed reicht 2ms allemal. (Es gibt auch welche die nicht prellen)

Ich verstehe erstmal nicht wozu hier überhaupt Interrupts nötig sind.

Nahezu alle µC haben intern Zählerbausteine, mit Pin nach außen.
Die können bis zum Überlauf zählen, erst dann ist (vielleicht) ein Interrupt nötig.
Die lassen sich auch nicht dabei stören.
Benötigen keine/kaum Rechenzeit.
Sind irre schnell, z.B. bis 64MHz bei einigen AVR, auch wenn diese selber mit nur wenigen MHz laufen.

Aber wozu brauchst Du 15ms debounce?
Hallsensoren prellen nicht und bei prellenden reed reicht 2ms allemal. (Es gibt auch welche die nicht prellen)

Das war im original Code der Wetterstation so drin.
Ich lass das erst mal so stehen, falls ich doch noch (vorläufig) auf eine billig-Variante mit Reed Kontakt gehe. Wenn dabei Fehler auftauchen, kann ich immer noch die debounce-time ändern

Ich verstehe erstmal nicht wozu hier überhaupt Interrupts nötig sind.

Nahezu alle µC haben intern Zählerbausteine, mit Pin nach außen.
Die können bis zum Überlauf zählen, erst dann ist (vielleicht) ein Interrupt nötig.
Die lassen sich auch nicht dabei stören.

Wie bewerkstellige das am Arduino Nano? Wird der Zähler nicht bei einem externen Interrupt gestört?

Gibt es am Arduino Prioritäten für die Interrupts?
z.B. Funktion timer_isr() tut gerade etwas wegen timer_Interrupt.
Jetzt kommt ein Interrupt an PIN D2. Erkennt der Arduino in dem Moment, dass noch ein anderer Interrupt mit höherer Priorität eingegangen ist, oder arbeitet der stur die Reihenfolge der Interrupts ab, so wie sie eingehen? So nach dem Motto: wer zuerst kommt, mahlt zuerst

So wie die Gaudi jetzt funktioniert, bin ich ganz zufrieden und so weit wie hier, wird es wohl in unserem Dorf nicht kommen:

Die höchste Windgeschwindigkeit einer Bö des Gradientwindes, die in Deutschland bislang gemessen wurde, lag bei 335 km/h. Sie wurde am 12. Juni 1985 auf der Zugspitze registriert.

Dann müsste ich mein Trum jenseits der Donau suchen :slight_smile:

So, und jetzt ab in den Hinterhof und alle Einzelteile weiß lackieren.
Wenn alles fertig ist, schicke ich Bilder in das Forum: "Zeigt her eure geilen Projekte"

1 Like

freddy64:
Wird der Zähler nicht bei einem externen Interrupt gestört?

Wie? Die Timer sind Hardware Bausteine die arbeiten ohne dass Code ausgeführt wird. Das ist ja gerade deren Sinn

Gibt es am Arduino Prioritäten für die Interrupts?

Die Interrupts haben eine festgelegte Reihenfolge. Das steht im Datenblatt ziemlich vorne drinn. Das heißt aber nicht dass gleich Interrupts verloren gehen. Jede Interrupt Quelle hat ein eigenes Interrupt Flag (lediglich bei den Pin Change Ints teilen sich mehrere Pins ein Flag). Wenn gerade ein Interrupt dran war, wird erst mal ein normaler Takt ausgeführt. Dann werden die Interrupt Flags überprüft und es kommt der nächste Interrupt dran.

Es gehen als erst Interrupts verloren wenn auf einem Vektor Interrupts schneller vorkommen als sie abgearbeitet werden

Wie bewerkstellige das am Arduino Nano? Wird der Zähler nicht bei einem externen Interrupt gestört?

Gibt es am Arduino Prioritäten für die Interrupts?

Ich entnehme diesem, dass du das Datenblatt deines µC noch nicht gelesen hast.
Und vermute, dass du das auch nicht vor hast.
Zumindest bist du noch nicht, von selber, auf die Idee gekommen.

Das finde ich schade.

Wie auch immer....
Bei unklarer Sachlage ist der Blick in die Doku mein erstes "Mittel". Denn warum sollte ich was in Software mühselig zusammenstoppeln, wenn es die Hardware doch schon von hause aus besser kann.

Beim Nano wäre es z.B. der T1 Pin, welchen du dafür nutzen könntest.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.