This shows you the differences between two versions of the page.
| de:examples:delay [2009/04/08 17:15] – angelegt nierhoff | de:examples:delay [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Delays ====== | ||
| + | ===== Einfacher Delay ===== | ||
| + | |||
| + | Setze Frequenz und Optimierung im AVR Studio auf die gezeigten werte (14745600 bzw. -O0) | ||
| + | |||
| + | {{: | ||
| + | |||
| + | <code c> | ||
| + | void delay1s(int count){ // ~0,09s | ||
| + | unsigned int i,j; | ||
| + | for(i=0; | ||
| + | for(j=0; | ||
| + | } | ||
| + | |||
| + | |||
| + | //call | ||
| + | delay1s(10); | ||
| + | |||
| + | </ | ||
| + | |||
| + | ===== Delay mit timer ===== | ||
| + | Folgendes Beispiel ist von Optimierung unbeeinflusst | ||
| + | |||
| + | <code c> | ||
| + | // Delay in Millisekunden | ||
| + | // Delay entsteht durch timer 0 | ||
| + | // Max delay 4500 ms | ||
| + | // Praezision 3% | ||
| + | |||
| + | void aeg(unsigned int t) | ||
| + | { | ||
| + | // Begrenzung der maximalen delay time | ||
| + | if (t > 4500) t = 4500; | ||
| + | | ||
| + | // Prescaler 1024 | ||
| + | TCCR1B = _BV(CS12) | _BV(CS10); | ||
| + | |||
| + | // Timer set up | ||
| + | TCNT1 = 0xFFFF - (unsigned int)((unsigned long)t * (unsigned long)144 / (unsigned long)10); | ||
| + | | ||
| + | // Endlosschleife bis Timer-Bit gesetzt | ||
| + | while ((TIFR & _BV(TOV1)) == 0) | ||
| + | { | ||
| + | asm volatile (" | ||
| + | } | ||
| + | | ||
| + | // clearing interrupt bit (=1) | ||
| + | TIFR |= _BV(TOV1); | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | ===== Delay mithilfe der util/ | ||
| + | |||
| + | Das Problem ist der max. Wert den die delay Funktion akzeptiert. Max delay: 262.14 ms / F_CPU in MHz. Das folgende Beispiel erlaubt den Einsatz viel größerer Werte. | ||
| + | |||
| + | <code c> | ||
| + | void delay_ms(uint16_t ms) // Setzen der delay-Dauer | ||
| + | { | ||
| + | while (ms) // Schleife bis der Wert gleich Null ist | ||
| + | { | ||
| + | _delay_ms(1); | ||
| + | ms--; | ||
| + | } | ||
| + | } | ||
| + | </ | ||