Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
f11:technik:arduino:programme:arduino-side-tone-generator [2018/12/27 07:53] dm3kb angelegt |
f11:technik:arduino:programme:arduino-side-tone-generator [2018/12/27 09:16] dm3kb |
||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
====== Side-Tone Generator für PCW Fistcheck ====== | ====== Side-Tone Generator für PCW Fistcheck ====== | ||
- | Für das reglmässige Gebe-Training mit der Hand-Taste ist für die Nutzung | + | Für das reglmässige Gebe-Training mit der Hand-Taste ist für die Nutzung |
- | (Ernst F. Schroeder DJ7HS https:// | + | (Ernst F. Schroeder DJ7HS https:// |
+ | und zwei Ausgängen | ||
+ | \\ | ||
+ | Schaltbild: | ||
{{f11: | {{f11: | ||
+ | \\ | ||
+ | Da hier der Einfachheit halber für jeden Ausgang ein eigender ARDUINO Pin genutzt wurde ist der Sketch etwas komplexer ausgefallen.\\ | ||
+ | Die allseits beliebte und bekannte Arduino Funktion [[https:// | ||
+ | mit der Ausgabe an den zweiten Pin.\\ | ||
+ | Da die Frequenz aber auch veränderbar sein sollte wenn der Ton ausgegeben wird und Ansätze mit delay bzw. der Abfrage von [[https:// | ||
+ | ARDUINO internen Timers der beim Überlauf eben jenen Interrupt erzeugt und die ensprechende Sub-Routine für die Interrupt Behandlung anspringt Anwendung.\\ | ||
+ | Der Vorteil dabei ist das der Timer wesentlich genauer ist als die delay() Funktion die einfach nur wartet und den Arduino zum Nichtstun verdammt.\\ | ||
+ | Der Timer wird vom Prozessor-Takt (16 Mhz) unabhängig vom Arduino Code hochgezählt. Beim Überlauf über 65536 wird der entsprechende Interrupt ausgelöst.\\ | ||
+ | Der Arduino unterbricht nun seine main-loop und behandelt erst mal den Code in der Interrupt-Handler Routine um danach an der Stelle in der Main-Loop\\ | ||
+ | fortzufahren an der der Interrupt zugeschlagen hat.\\ | ||
+ | Details dazu z.B.: \\ | ||
+ | https:// | ||
+ | und \\ | ||
+ | https:// | ||
+ | \\ | ||
+ | Auf ein Beispiel aus dem Leben übertragen ist es so als wenn jemand den ganzen Tag am Fenster sitzt und auf den Post-Boten wartet.\\ | ||
+ | Alternativ kommt er jede Minute oder alle zwei zurück ans Fenster um zu schauen ob der Post-Bote da ist.\\ | ||
+ | Das ist nicht wirklich effektiv.\\ | ||
+ | Wie elegant ist es doch seine Aufgaben zu erledigen, und sich von der Türklingel (Dem Interrupt) dazu rufen zu lassen das Nötige mit dem Post-Boten zu regeln.\\ | ||
+ | \\ | ||
+ | Der Sketch unten ist dokumentiert und wird auf einem ARDUINO Nano genutzt.\\ | ||
+ | Andere Vertreter aus der ARDUINO Familie sind sicher auch möglich, der Code ist dann aber eventuell enstprechend anzupassen.\\ | ||
+ | \\ | ||
< | < | ||
Zeile 61: | Zeile 86: | ||
} | } | ||
- | // Interrupt -andler | + | // Interrupt -Handler |
// Timer1 Overflow | // Timer1 Overflow | ||
ISR(TIMER1_OVF_vect) | ISR(TIMER1_OVF_vect) | ||
Zeile 91: | Zeile 116: | ||
while(digitalRead(keyin)== LOW){ | while(digitalRead(keyin)== LOW){ | ||
// As long key in is LOW (Key is pressed so we need an output!!!) | // As long key in is LOW (Key is pressed so we need an output!!!) | ||
- | // Enable Interrupt | ||
if (timerstat == 0 ) { | if (timerstat == 0 ) { | ||
- | // | + | // |
playflag = 1; | playflag = 1; | ||
timerstat = 1; | timerstat = 1; | ||
Zeile 108: | Zeile 132: | ||
// So Timer1 will count starting from 39168 or 55625 or any value in between and creating an | // So Timer1 will count starting from 39168 or 55625 or any value in between and creating an | ||
// Overflow Interrupt when reaching 65536 | // Overflow Interrupt when reaching 65536 | ||
- | // I needs to be set to time that a halve wave of the frequency need. | + | // It needs to be set to time that a halve wave of the frequency need. |
// Formula is here: 65536 - (65536 - 16000000 / 1 / 350 / 2) | // Formula is here: 65536 - (65536 - 16000000 / 1 / 350 / 2) | ||
// Max Value of Timer - ( Max Value of Timer / Arduino Clock Rate / PreScale / Frequency in Hz / 2 ) | // Max Value of Timer - ( Max Value of Timer / Arduino Clock Rate / PreScale / Frequency in Hz / 2 ) | ||
Zeile 141: | Zeile 165: | ||
// End | // End | ||
</ | </ | ||
+ | |||
+ | Zurück zu: [[f11: |