Differences

This shows you the differences between two versions of the page.

Link to this comparison view

de:examples:delay [2009/04/08 17:15] – angelegt nierhoffde: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)
 +
 +{{:et:failid:avrstudio_settings.jpg|}}
 +
 +<code c>
 +void delay1s(int count){ // ~0,09s
 + unsigned int i,j;
 + for(i=0;i<count;i++){
 + for(j=0;j<65530;j++){asm volatile ("nop");}}
 +}
 +
 +
 +//call
 +delay1s(10); // ~0,9 sec.
 +
 +</code>
 +
 +===== 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 ("nop");
 +  }
 +  
 +  // clearing interrupt bit (=1)
 +  TIFR |= _BV(TOV1);
 +}
 +</code>
 +
 +===== 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.
 +
 +<code c>
 +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
 + }
 +}
 +</code>
CC Attribution-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0