_ms_delay() tut nicht :(

Gast #1691437
Lesenswert?

hallo,

ich wollte gerade bei einem atmega16 testen ob er so wie gedacht mit 
16MHz arbeitet. Wollte mit dem code eine led im sekundentakt blinken 
lassen:

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

int main(){
  int i;
  DDRA = 0xFF;

  while(1){

             for(i=0; 1<100; i++)
             _delay_ms(10);

            PORTA = 0x20;

              for(i=0; 1<100; i++)
               _delay_ms(10);

            PORTA = 0x00;
   }

}

die for-schleife ist dafür, weil ja _delay_ms() nicht so große zahlen 
verträgt.

leider passiert garnichts, die LED an portA bleibt aus.
wenn ich die erste For-schleife auskommentier dann leuchtet die LED 
logischerweise sofort und bleibt dann für immer an.
selbst wenn der atmega nur mit 1mhz arbeitet, irgendwann müsste die led 
doch trotzdem mal angehn oder?

weis jemand rat?
Gast #1691455
Lesenswert?

Danke an euch...
des ist mir jetz echt peinlich, versteh gar ned wie man i mit 1 
verwechseln kann, liegt doch ned mal nahe beieinander :/

manchmal ist man vom ewigen draufstarren so blind dass man den wald vor 
lauter bäumen nicht mehr sieht...

achja, das #define F_CPU steht ja im makefile scho drin.
der compiler hat mir als ichs im code mit drin hatte immer den hinweiß 
gegeben, ich würde F_CPU neu definieren, also hab ichs rausgelassen. 
1mal sollte reichen :)
Gast #1691481
Lesenswert?

so, umgeschrieben und auf 5s erhöht, ging natürlich sofort, danke 
nochmal :)

hab das ganze jetz bisl beobachtet, präzise alle 5s schaltet die LED um.
Heißt dass ich kann mir jetz 100%ig sicher sein dass der atmega mit 
16Mhz läuft?
#1691488
Lesenswert?

karamalz schrieb:
> die for-schleife ist dafür, weil ja _delay_ms() nicht so große zahlen
> verträgt.

Das stimmt nicht. Wer sich die Mühe macht und die Funktion in der 
avr-libc nachschlägt findet dort Folgendes:
"When the user request delay which exceed the maximum possible one, 
_delay_ms() provides a decreased resolution functionality. In this mode 
_delay_ms() will work with a resolution of 1/10 ms, providing delays up 
to 6.5535 seconds (independent from CPU frequency). The user will not be 
informed about decreased resolution."

Es ist also kein Problem _delay_ms(1000) zu nutzen.
Gast #1691496
Lesenswert?

stimmt, gerade mit _delay_ms(5000) probiert, funkt.

hab halt im forum bisl gelesen und da hies es immer irgendwo is stop, 
und man müsse das ganze in ne schleife packen.

evtl ne neue version der lib?
egal, macht das ganze nur einfacher

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