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 ?
Meist am falsch angegebenen Takt oder an nicht aktivierter Compiler-Optimierung. Was kommt denn real dabei heraus und wie wird getaktet?
Was sollen die ganzen Punkte hinter den Zahlen? Auf was steht F_CPU? http://avr-libc.nongnu.org/user-manual/group__util__delay.html
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 ?
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
Vielleicht kennt die CodeVision-Version von delay_ms() ja nur Integer - genaueres verrät die die Doku dazu. Oliver
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...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.