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)
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.
>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?
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 );
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.
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???
Jop 8 mal schneller -> 8mal länger warten :D ERst denken dann schreiben! Trotzdem danke
N7x erst denken dann schreiben...faktor 8 ist tipp genug...datenblatt lesen ftw....und erst dann wiederkommen
Manchmal lösen sich Probleme ganz von selbst Und wenn nicht dann ab ins Forum ....
marc Andrew schrieb: > Nun stelle ich die F_CPU auf 8000000UL. Und mit welchem Takt läuft dein Prozessor dann? Oliver
marc Andrew schrieb: > Nun stelle ich die F_CPU auf 8000000UL. F_CPU gibt dem Compiler nur bekannt, womit Du den AVR betreibst. Und es liegt allein an Dir, dafür zu sorgen, daß der AVR auch wirklich mit dieser Frequenz läuft.
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.