Hallo, kleines Problem. Ich programmiere grade einen Atmega1284P mit dem AVR-Studio in C. Das Programm selber läuft zwar, aber die Delay-Zeiten sind laut Stoppuhr genau 10x so lang, wie sie sein sollten. Die Taktfrequenz des Atmega1284P beträgt 20MHz und der Oszillator läuft auch mit 20MHz (extra nachgemessen). Verwendet wird util/delay.h In der entsprechenden .h-Datei, die zum Programm gehört, ist die Taktfrequenz korrekt angegeben. Unter Configuration Options im AVR-Studio ist auch die korrekte Quarzfrequenz eingetragen. Der Funktionsaufruf _delay_ms(1000); bewirkt beispielsweise eine Verzögerung von 10 Sekunden . Woran könnte es liegen?
Sind es vielleicht 8 statt 10 Sekunden? Dann ist noch die DIV8-Fuse gesetzt.
@ hermy (Gast) >Woran könnte es liegen? AVR Fuses falsch eingestellt, dadurch wird eine andere Taktquelle benutzt. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Warteschleifen_.28delay.h.29 Die Optimierung im Compiler muss eingeschaltet sein.
Danke Euch für die schnellen Antworten!!! Fuses stehen im Moment auf HI 0x9D LO 0x7E ( Ext. Crystal Osc. 8.0- MHz; Start-up time:1k + 4.1ms ) Falk Brunner schrieb: > Die Optimierung im Compiler muss eingeschaltet sein. Steht auf -Os
Dietrich L. schrieb: > Erfolgte das#define F_CPU xxx > vor dem#include <util/delay.h> > ? #include <util/delay.h> steht in main.c #define F_CPU 20000000 steht in main.h
Versuch mal folgendes: _delay_ms(200) _delay_ms(200) _delay_ms(200) _delay_ms(200) _delay_ms(200) Falls das funktioniert hast Du eine _delay_ms Implementierung, die keine 1000 als Argument verträgt. Sollte dann aber auch im Header-File stehen. Edit: Das #define F_CPU brauchst Du nicht in main.c, sondern stellst es in den AVRStudio Projektsettings ein.
Pete K. schrieb: > Versuch mal folgendes: > > _delay_ms(200) > _delay_ms(200) > _delay_ms(200) > _delay_ms(200) > _delay_ms(200) > > Falls das funktioniert hast Du eine _delay_ms Implementierung, die keine > 1000 als Argument verträgt. Sollte dann aber auch im Header-File stehen. Funktioniert leider nicht, die Wartezeit bleibt bei 10 Sekunden. 1s Wartezeit gibts mit _delay_ms(100) Pete K. schrieb: > Edit: Das #define F_CPU brauchst Du nicht in main.c, sondern stellst es > in den AVRStudio Projektsettings ein. Das #define F_CPU steht in main.h Kann dann also weg!? Ansonsten verwende ich noch die lcd.h Hat das Problem möglicherweise damit zu tun???
Vielleicht ist F_CPU auch in den Projektoptionen zusätzlich definiert, damit wird F_CPU im Quelltext überschrieben.
Falk Brunner schrieb: > Vielleicht ist F_CPU auch in den Projektoptionen zusätzlich definiert, > damit wird F_CPU im Quelltext überschrieben. Was heißt in dem Zusammenhang "Projektoptionen"?
Hubert G. schrieb: > Mit deiner Fuse-Einstellung hast du CKDIV8 immer noch aktiv. Klingeling, kümmere mich sofort darum! Danke!!!
Ok, jetzt stimmt die Zeit! Werner hatte es oben schon gepostet, war irgendwie untergegangen... Danke an alle, die geschrieben haben!!!!!!!!!!!!!!!!!!!!!! Super Community hier!!!!!!!
>und Stefan P. hast Du auch überlesen ;-) Jepp, ich gebe es zu! Noch mal ganz herzlichen Dank an die folgenden drei Poster!!! Stefan P. schrieb: > Sind es vielleicht 8 statt 10 Sekunden? Dann ist noch die DIV8-Fuse > gesetzt. Werner P. schrieb: > Fuses: CKDIV/8 aktiviert? Hubert G. schrieb: > Mit deiner Fuse-Einstellung hast du CKDIV8 immer noch aktiv. Ihnen und allen anderen wünsche ich außerdem eine schöne jecke Karnevalszeit!!! X Y !!! (X = Kölle oder jeder andere Ort) (Y = Alaaf, Helau oder jeder andere zum Ort X passende Karnevalsruf) ;O)
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.