Moin! Ich habe zur Zeit folgendes Problem: Mein AtMega8 läuft, sofern ich ihn in C programmiere, 16x mal zu schnell. Mit Bascom blinkt die LED immer schön im Sekundentakt (was sie auch soll). Zuerst dachte ich daran, dass C Probleme mit _delay_ms mit größeren Werten hat. Also habe ich das umgeändert in void delay_second() { int x; for (x=0;x<=50;x++) { _delay_ms(20); } } Immernoch dasselbe Problem. Der Takt ist in der makefile richtig eingestellt. (16000000) Testweise habe ich den Takt in dem C code auch definiert, mit dem selben ergebnis. Für mich klingt das im moment so, als würde C mein "F_OSC = 16000000" ignorieren. Langsam werde ich verrückt. In Bascom funktioniert alles wunderbar, in C rennt mir der Controller hoffnungslos davon. Hat irgendwer eine Idee was des Übels Wurzel sein könnte? Die Suche hat mir bisher noch nicht geholfen... MfG AnoBit
AnoBit schrieb: > Für mich klingt das im moment so, als würde C mein "F_OSC = 16000000" > ignorieren. Würde ich auch. Schau mal in die "delay.h", wies richtig heißen muß. Peter
Das "F_OSC = 16000000" steht in der makefile. Im C-Code ists "#define F_CPU 16000000L" Ist imho richtig so... Oder habe ich gerade ein Brett vorm Kopf? MfG AnoBit
Es muss 16000000UL heißen (oder auch nur L). Das Makefile überschreibt die Einstellungen im C-Code, deswegen funktioniert es nicht (vermutlich kein L-Suffix im Makefile). Nachtrag 2: es muss natürlich auch F_CPU heißen, sonst ist das der delay.h egal. Und im C-Code muss die Definition VOR dem Inkludieren der delay.h geschehen. und bezüglich Genauigkeit:
1 | void delay_second() |
2 | {
|
3 | int x; |
4 | for (x=0;x<=50;x++) |
5 | {
|
6 | _delay_ms(20); |
7 | }
|
8 | }
|
diese Schleife läuft 51-mal durch und erzeugt damit einen Delay von 1020 ms. Gruß David
Ah, ok. Der Fehler lag darin, dass ich F_CPU erst nach dem einbinden der delay.h definiert habe. -.- 'tschuldigung. Doofer Fehler... Jap, da war wohl ein = zu viel. Dankeschön ^^ MfG AnoBit
solange dieses nicht für die init gebraucht wird .. lieber einen timer nutzen
Irgendwie typisch. Ich hasse C und muss mit diesem Dreck jeden Tag arbeiten. Ekelhafter alter Grind unterm Zehenagel.
Michael schrieb: > Irgendwie typisch. Ich hasse C und muss mit diesem Dreck jeden Tag > arbeiten. Ekelhafter alter Grind unterm Zehenagel. Oder einfach mal an die eigene Nase fassen, weil man die Warnungen nicht liest: c:/avr/winavr/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>" Peter
Peter Dannegger schrieb: > Oder einfach mal an die eigene Nase fassen, weil man die Warnungen nicht > liest: er hat sich an die Nase gefasst. Da wird sich der Peter wohl diesmal an die benannte Nase fassen dürfen, weil er die Namen nicht gelesen hat :)
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.