Forum: Mikrocontroller und Digitale Elektronik delay_ms Genauigkeit ATmega8L


von Heiner K. (Gast)


Lesenswert?

Hi Leute,

konnte leider nirgends im internet dazu was finden deswegen stelle ich 
hier meine Frage.

Wie genau ist der delay_ms Befehl auf dem Atmega8L ?

Wenn ich zum beispiel folgendes mache:
while(1)
{
PORTB=0x01;
delay_ms(1.);
PORTB=0x00;
delay_ms((20./6.)-1.);
}

In diesem Beispiel sollte der Atmega ja den einen Ausgang innerhalb von 
20ms 6 mal für 1ms schalten. Leider stellt sich dabei aber eine sehr 
große Verzugszeit ein. Woran liegt das ?

von (prx) A. K. (prx)


Lesenswert?

Meist am falsch angegebenen Takt oder an nicht aktivierter 
Compiler-Optimierung.

Was kommt denn real dabei heraus und wie wird getaktet?

von ... .. (docean) Benutzerseite


Lesenswert?

Was sollen die ganzen Punkte hinter den Zahlen?

Auf was steht F_CPU?

http://avr-libc.nongnu.org/user-manual/group__util__delay.html

von Heiner K. (Gast)


Lesenswert?

compiler optimierung ist an .
habe ich mit
#pragma opt+
aktiviert. Programmiere den Atmega mit CodeVisionAVR

Habe jetzt gerade nochmal das Oszi dran gepackt und es kommt folgendes 
Puls-Muster heraus.

1ms an  2ms aus  1ms an / 2ms aus.

eigentlich sollte es doch so sein
1ms an / 2.33ms aus  1ms an  2.33ms aus.

Was hat das mit dem Takt zu tun? Darauf greife ich doch nicht zu und der 
ist bei dem myAVR board doch durch den Quarz fest auf 3,6864MHz 
eingestellt oder sehe ich das falsch ?

von Heiner K. (Gast)


Lesenswert?

oh ich habe gerade bemerkt, das der delay funktion ja nur integer werte 
akzeptiert .
werde mal delay_us wird es etwas genauer, aber immer noch nicht ganz so 
genau wie es sein sollte

von Oliver (Gast)


Lesenswert?

Vielleicht kennt die CodeVision-Version von delay_ms() ja nur Integer - 
genaueres verrät die die Doku dazu.

Oliver

von ... .. (docean) Benutzerseite


Lesenswert?

Der Quarz interessiert den ATmega normalerweise gar nicht... erst wenn 
Fuses passen wird der Quarz verwendet.

bei Auslieferung steht der auf 1Mhz und interne Taktversorgung

Das scheint bei dir aber irgendwie doch schon zu stimmen...

von Heiner K. (Gast)


Lesenswert?

Ja passt nun auch. Es lag eigentlich nur an der delay Funktion. Diese 
aktzeptiert bei CodeVision nur Integer-Werte und darauf habe ich nicht 
geachtet, weil ich es anders kannte.
Danke für die Hilfe
Neues Problem kommt gleich in einem neuem Beitrag:-)

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.