====== Delays ====== ===== Einfacher Delay ===== Setze Frequenz und Optimierung im AVR Studio auf die gezeigten werte (14745600 bzw. -O0) {{:et:failid:avrstudio_settings.jpg|}} void delay1s(int count){ // ~0,09s unsigned int i,j; for(i=0;i ===== Delay mit timer ===== Folgendes Beispiel ist von Optimierung unbeeinflusst // 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 ("nop"); } // clearing interrupt bit (=1) TIFR |= _BV(TOV1); } ===== Delay mithilfe der util/delay.h header Datei ===== 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. void delay_ms(uint16_t ms) // Setzen der delay-Dauer { while (ms) // Schleife bis der Wert gleich Null ist { _delay_ms(1); // 1ms delay ms--; // verkleinern des Wertes um 1 } }