Hallo, ich habe eine Atmega 168-20pu und habe dieses kleine Programm genommen, um die delay Funktion zu testen. Leider liege ich nicht bei 100us, sondern bei 1ms. Die 8MHz habe ich über PB0 gemessen. #define F_CPU 8000000 #include <avr/io.h> #include <util/delay.h> int main() { DDRB=0xff; while( 1 ) { PORTB=0x00; _delay_us( 100 ); PORTB=0xff; _delay_us( 100); } }
Hallo, hört sich an, als sei die CKDIV8-Fuse falsch gesetzt. Gruß, Michael
mögliche Fehlerquellen bei _delay_us und _delay_ms 1) man muss beiden Funktionen einen konstanten Ausdruck übergeben. Keine Variablen oder sonst zur Laufzeit berechnete Werte 2) der Optimizer des Compilers muss eingeschaltet sein 3) die mittels F_CPU angegebene Taktfrequenz muss auch tatsächlich die sein, mit der der AVR wirklich läuft Sind alle 3 Punkte erfüllt, dann stimmen die _delay Zeiten erstaunlich genau. Punkt 1 ist bei dir offensichtlich erfüllt. Den Rest kannst nur du vor Ort prüfen.
Ne Warnung bekam ich schon, dachte aber, dass hier keine Optimirungen erlaubt sind. Warning 1 #warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed" Was muss ich denn da machen?
Irgend einen Optimieruengslevel setzten. Alles ausser -O0 geht. Oliver
Rudi schrieb: > Ne Warnung bekam ich schon, dachte aber, dass hier keine Optimirungen > erlaubt sind. Weil keine Optimierungen erlaubt sind, warnt auch der Compiler, dass Optimierungen ausgeschaltet sind :-) (bisse nachdenken. Wenns wurscht wäre, gäbs keine Warnung) > Was muss ich denn da machen? Die Optimierung einschalten. Welche IDE benutzt du? Irgendwo in den Projekt Konfigurations Optionen (meist ein Dialog, der von einem Menüpunkt aus aufgerufen wird), gibt es eine Einstellung für Compiler-Optimizations. Die stellst du auf -Os.
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.