Wartezeiten PROBLEM

#3147654
Lesenswert?

hi , ich programmiere für einen DS1820 ein OneWire Protokoll.
Der Master Reset- und Slave Presence Impuls funktioniert auch schon.
Wenn ich aber F_CPU = 8MHz einstelle ,dann wartet das Program bei 
_delay_us(100) viel länger als angegeben.
Wieso arbeitet die Funktion nicht wie angegeben?

(Wenn ich F_CPU nicht einstelle ,dann ist F_CPU = 1GHz)

AtMega16 (externer Takt = 8MHz)
Gast #3147656
Lesenswert?

Fabian Anderw schrieb:
> dann wartet das Program bei
> _delay_us(100) viel länger als angegeben

optimierung muss eingeschaltet sein, es dürfen nur konstanden verwendet 
werden.

> Wenn ich F_CPU nicht einstelle ,dann ist F_CPU = 1GHz
nein, dann ist es nur wo anders eingestellt (->suche). Wenn das define 
fehlt gibt es einen fehler.
#3147665
Lesenswert?

>nein, dann ist es nur wo anders eingestellt (->suche). Wenn das define
>fehlt gibt es einen fehler.

Stimmt genau in der delay.h ist F_CPU = 1GHZ.


>optimierung muss eingeschaltet sein, es dürfen nur konstanden verwendet
>werden.

Sorry aber ich weiss nicht genau was du mit optimierung meinst.Wo kann 
ich das einstellen?
#3148175
Lesenswert?

Ok jetzt noch mal Schritt für Schritt.

Ich habe einen AtMega16 mit internen Takt von 1MHz.
(externer Takt = 8000000Hz)

Diese Frequent wird auch in der <util/delay.h> mit #define F_CPU 
1000000UL
voreingestellt.

(Test)Programm:

1. LED an
2. _delay_ms(5)
3. LED aus
4. _delay_ms(5)

Nun mit Oszi messen : Alle Wartezeiten im Programm sind identisch mit 
den realen Wartezeiten. KEINE PROBLEME

Nun stelle ich die F_CPU auf 8000000UL.

(Test) Programm:

...
siehe oben
...

Mit Oszi messen :
1. LED an
2. reale 40ms wird gewartet
3. LED aus
4. reale 40ms wird gewartet

Wieso wartet die Funktion _delay_ms(5) nun in Wirklichkeit genau 40ms???

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