Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
|
f11:technik:arduino:programme:arduino-side-tone-generator [2018/12/27 08:52] dm3kb |
f11:technik:arduino:programme:arduino-side-tone-generator [2019/09/29 12:03] (aktuell) |
||
|---|---|---|---|
| Zeile 14: | Zeile 14: | ||
| Da die Frequenz aber auch veränderbar sein sollte wenn der Ton ausgegeben wird und Ansätze mit delay bzw. der Abfrage von [[https:// | 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.\\ | 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 | + | Der Vorteil dabei ist das der Timer wesentlich |
| - | Der Timer wird vom Prozessor-Takt (16 Mhz) unabhängig vom Arduino hochgezählt. Beim Überlauf 65536 wird der entsprechende Interrupt ausgelöst.\\ | + | Der Timer wird vom Prozessor-Takt (16 Mhz) unabhängig vom Arduino |
| - | 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 mail-loop\\ | + | 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.\\ | 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.\\ | 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.\\ | 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.\\ | 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. | + | 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.\\ | Der Sketch unten ist dokumentiert und wird auf einem ARDUINO Nano genutzt.\\ | ||
| Zeile 82: | Zeile 86: | ||
| } | } | ||
| - | // Interrupt -andler | + | // Interrupt -Handler |
| // Timer1 Overflow | // Timer1 Overflow | ||
| ISR(TIMER1_OVF_vect) | ISR(TIMER1_OVF_vect) | ||
| Zeile 112: | 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 129: | 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 162: | Zeile 165: | ||
| // End | // End | ||
| </ | </ | ||
| + | |||
| + | Zurück zu: [[f11: | ||
