Wartezeiten PROBLEM

OP #3147654
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
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.
OP #3147665
>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?
Gast #3147670
Fabian Anderw schrieb:
> Stimmt genau in der delay.h ist F_CPU = 1GHZ.

glaube nicht.

> Sorry aber ich weiss nicht genau was du mit optimierung meinst.Wo kann
> ich das einstellen?
woher soll ich wissen mit was du arbeitest? Du musst die optimierung für 
die Compiler einschalten. (-Os );
Gast #3147712
dann liegt es bestimmt an der Hardware, sie läuft nicht mit dem Takt den 
du erwartest.


lass mal mit dem dalay eine LED im Sekundentakt blinken. Und schau wie 
schnell sie wirklich blinkt.
OP #3148175
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

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.