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: |