www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik delay_ms Genauigkeit ATmega8L


Autor: Heiner K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: A. K. (prx)
Datum:

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

Was kommt denn real dabei heraus und wie wird getaktet?

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was sollen die ganzen Punkte hinter den Zahlen?

Auf was steht F_CPU?

http://avr-libc.nongnu.org/user-manual/group__util...

Autor: Heiner K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Heiner K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Oliver (Gast)
Datum:

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

Oliver

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Heiner K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.