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:57] dm3kb |
f11:technik:arduino:programme:arduino-side-tone-generator [2019/09/29 12:03] (aktuell) |
||
|---|---|---|---|
| Zeile 15: | Zeile 15: | ||
| 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 genauer ist als die delay() Funktion die einfach nur wartet und den Arduino zum Nichtstun verdammt.\\ | 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 hochgezählt. Beim Überlauf über 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.: \\ | Details dazu z.B.: \\ | ||
| Zeile 86: | Zeile 86: | ||
| } | } | ||
| - | // Interrupt -andler | + | // Interrupt -Handler |
| // Timer1 Overflow | // Timer1 Overflow | ||
| ISR(TIMER1_OVF_vect) | ISR(TIMER1_OVF_vect) | ||
| Zeile 116: | 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 133: | 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 166: | Zeile 165: | ||
| // End | // End | ||
| </ | </ | ||
| + | |||
| + | Zurück zu: [[f11: | ||
