Forum: Compiler & IDEs delay geht nicht...


von Tobias Holst (Gast)


Angehängte Dateien:

Lesenswert?

Hi

Ich mache gerade meine ersten Versuche mit den Atmels und der
C-Programmierung.

Hier mal mein Testcode:

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

int main(void)
{
DDRA = 0xff;
PORTA = 0xff;
DDRB = 0xff;
PORTB = 0xff;
DDRC = 0xff;
PORTC = 0xff;
DDRD = 0xff;
PORTD = 0xff;
_delay_ms(1000);
PORTA=0;
PORTB=0;
PORTC=0;
PORTD=0;
_delay_ms(1000);
PORTA=0xff;
PORTB=0xff;
PORTC=0xff;
PORTD=0xff;
_delay_ms(1000);
PORTA=0;
PORTB=0;
PORTC=0;
PORTD=0;
return 1;
}

Das ganze ergibt aber keine Sekundenpausen, sondern nur eine sehr kurze
Unterbrechung an den Ausgängen. Zum Thema F_CPU siehe Dateianhang. Was
mach ich noch falsch?

Ciao Tobias

von uwegw (Gast)


Lesenswert?

_delay_ms() kann nur ziemlich kurze Zeiten verzögern. Den genauen Wert
schlag mal selber in der lib-Doku nach. Wenn du mehr Zeit haben willst,
schreib ne Funktion, die _delay_ms in ner Schleife mehrmals aufruft...

von Thomas (Gast)


Lesenswert?

Damit hatte ich (auch anfänger) auch schon öfter Probleme. Das Größte
was anscheinend mit einer einfachen Delay Funktion möglich ist, sind
100ms. Mehr habe ich (messtechnisch nachgeschaut) auch noch nicht
hinbekommen.

Gruß
Thomas

von johnny.m (Gast)


Lesenswert?

Wieviel man mit den _delay-Funktionen maximal verzögern kann, hängt von
der Taktfrequenz ab. Bei _delay_us() sind es 768µs/(f_CPU in MHz), bei
_delay_ms() 262,14ms/(f_CPU in MHz). Steht in der Header-Datei delay.h.

von Tobias Holst (Gast)


Lesenswert?

Hi

Danke, so gehts!

Hätte nicht gedacht, dass die Funktion schon bei ca. 30 ms ausgereizt
ist!

Ciao Tobias

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.