delay_ms Genauigkeit ATmega8L

Gast #1362400
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 ?
Gast #1362424
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 ?
Gast #1362542
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:-)

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