Hallo zusammen, Bin Neuling was Atmega AVR-Studio und GCC betrifft. Habe bisher an C51 Controllern in Assembler programmiert. Nun habe ich mir aus den lcd-routinen des tutorials und dem code aus folgendem Beitrag ein Programm gemacht um die Frequenz messen. "Beitrag "Input Capture Pin (ICP) auslesen ( Frequenz messen)"; Das Programm funktioniert soweit, bis auf ein Verständnisproblem. Bei der Berechnung der Frequenz wird im Bsp. Erg = F_CPU / Erg; // f = 1 / t gerechnet. Ich muss aber mein Ergebnis zusätzlich noch durch 8 teilen damit sie richtig ist. Hier habe ich nun bemerkt, dass es völlig egal ist, welchen Wert ich F_CPU zuweise. Erg = F_CPU Erg 8; // f = 1 / t >> richtiges ergebnis Bitte um Hilfe
Wo stellst du den F_CPU ein? * Im AVR Studio im Dialog 'Project Configuration' * oder im Code direkt? Wenn du im Project Configuration Dialog einen Eintrag für die Taktfrequenz hast, ist der F_CPU Wert im C Code nur noch Makulatur.
sowohl als auch. Ich hab beides versucht, bzw. in der Configuration wieder rausgenommen. Es wird ja wohl mehrmals im Code definiert. Einmal in meiner .c datei und dann nochmal in der delay.h macht das vielleicht Probleme? Was mir auch noch unklar ist, Ich programmiere direkt aus dem AVR-Studio, wenn ich in das standard makefile schaue was beim anlegen des Projektes generiert wird, steht dort nirgens was von F_CPU. Auch wenn ich ein neues makefile erzeue nicht.
Frank S. schrieb: > sowohl als auch. Dann gilt das vom Dialog > Es wird ja wohl mehrmals im Code definiert. > Einmal in meiner .c datei Nein wird es nicht. Bzw. nur dann, wenn vom Dialog keine Vorgabe kam. #ifndef F_CPU ... wenn es noch keine Definition für F_CPU gibt. ifndef ... if not defined > und dann nochmal in der delay.h Dort ist dasselbe Spielchen. delay.h macht nur ein 'Notprogram' wenn es noch kein #define für F_CPU gab > AVR-Studio, wenn ich in das standard makefile schaue was beim anlegen > des Projektes generiert wird, steht dort nirgens was von F_CPU. > Auch wenn ich ein neues makefile erzeue nicht. Schau dir den Build-Log an, der während des Build ausgegeben wird. Bei den Compileraufrufen müsste der F_CPU auftauchen
Wurde nicht im Build-Log angezeigt. Habe nun aber gesehen, dass "hart" in der der delay.h definert war. Habe nun Win-avr deinstalliert und neu installiert, um die originale Datei wieder zu haben. Nun kommt aber ein ganz neuer Fehler zutage. Build started 15.5.2010 at 00:02:26 In file included from ../ATMEGA88_freq.c:30: d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: In function '_delay_ms': d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:113: error: expected expression before '=' token d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:123: error: expected expression before '=' token d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h: In function '_delay_us': d:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:151: error: expected expression before '=' token ../ATMEGA88_freq.c: In function 'main': ../ATMEGA88_freq.c:123: error: expected expression before '=' token make: *** [ATMEGA88_freq.o] Error 1 Build failed with 4 errors and 0 warnings... dieser Fehler geht weg, wenn ich die Fregeuenz in der Configuration eintrage, allerdings ist die Berechnung dann immer noch falsch.
Lass mich raten: du änderst F_CPU und erwartest, dass der Controller danach mit der richtigen Frequenz arbeitet? Das funktioniert nicht. F_CPU ist nur ein Makro, der den Bibliotheks- routinen rüberreicht, mit welcher Taktfrequenz deine CPU läuft. Dass sie mit dieser Frequenz läuft, darum musst du dich aber schon selbst kümmern, dass kann der Compiler nicht für dich tun. Dein Problem klingt so, als müsstest du die CKDIV8-Fuse noch abschalten. Diese Fuse wiederum ist nur eine Vorbelegung für den clock prescaler, den kannst du auch zur Laufzeit umschalten:
1 | #include <avr/power.h> |
2 | |
3 | ...
|
4 | clock_prescale_set(clock_div_1); |
Ok, das mit der Fuse hat geklappt. :-) Allerdings kann ich jetzt nur noch kompilieren, wenn ich die Frequenz im Project Configuration Dialog eintrage, da sonst die Fehlemeldungen kommen
Frank S. schrieb: > Allerdings kann ich jetzt nur noch kompilieren, wenn ich die Frequenz im > Project Configuration Dialog eintrage, da sonst die Fehlemeldungen > kommen Die muß überall, wo delay.h inkludiert wird, gesetzt sein, und sie muß gesetzt werden, bevor es inkludiert wird.
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.