Blinklicht zu hohe Frequenz

Gast #2320272
Lesenswert?

Hallo hab da ein Problem, mein LED am PORT A, Pin8 (also PA7) sollte 1 
mal in der sec blinken, jedoch blinkt es mit einer viel höheren Frequenz

#define F_CPU 16000000UL

#include <avr/io.h>
#include <util/delay.h>



void main (void)
{
  DDRA= 0xff;
  PORTA=0xff;


  while(1)
  {
    _delay_ms(1000);
    PORTA^= (1<<PA7);
  }


}
Gast #2320298
Lesenswert?

steffen schrieb:
> The maximal possible delay is 262.14 ms / F_CPU in MHz."

Wenn schon zitieren, dann aber bitte vollständig!
1
When the user request delay which exceed the maximum possible one,
2
_delay_ms() provides a decreased resolution functionality. In this
3
mode _delay_ms() will work with a resolution of 1/10 ms, providing
4
delays up to 6.5535 seconds (independent from CPU frequency). The
5
user will not be informed about decreased resolution.
Gast #2320331
Lesenswert?

... schrieb:
> Wenn schon zitieren, dann aber bitte vollständig!
Autsch, da hab ich doch selber noch einen Teil unterschlagen :(
1
If the avr-gcc toolchain has __builtin_avr_delay_cycles(unsigned long)
2
support, maximal possible delay is 4294967.295 ms/ F_CPU in MHz. For
3
values greater than the maximal possible delay, overflows results in
4
no delay i.e., 0ms.
Gast #2320390
Lesenswert?

Die Wartezeit der Funktion _delay_ms() ist auf 262,14ms/F_CPU (in MHz) 
begrenzt, d.h. bei 20 MHz kann man nur max. 13,1ms warten. Die Wartezeit 
der Funktion _delay_us() ist auf 768us/F_CPU (in MHz) begrenzt, d.h. bei 
20 MHz kann man nur max. 38,4us warten. Längere Wartezeiten müssen dann 
über einen mehrfachen Aufruf in einer Schleife gelöst werden.

hab dann genau wie oben beschrieben noch diese schleife programmiert, 
über die _delay_ms das es sich auf eine sekunde ausgeht, siehe 
anwendungsbsp von delay

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29
Gast #2321201
Lesenswert?

Dann hast Du aber eine Uraltversion der avr-libc und solltest langsam 
mal updaten. Ab Version 1.6 gilt dieses Limit so nicht mehr und es sind 
delays bis ca. 6,5s möglich (mit der neuesten auch noch mehr) und die 
1.6 gibt es schon seit 2007.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren