Moin Moin, derzeit versuche ich einen Quarz mit 8 MHZ an meinem Atmega8 zum laufen bringen. Die Fuses habe ich über das AVR Studio und anhand der Infos aus dem Datenblatt auf CKOPT 1 und die SUT_CKSEL auf "Ext. Crystal/Resonator High Freq: Start-up time 16K CK + 64 ,s" gestellt. Quarz ist wie im Tutorial beschalten. Nun wollte einfach nur eine LED blinken lassen (im 1 Sekeundentakt - siehe Code) und erhalte nun ein viel zu schnelles blinken. Setze ich einen 4 MHZ Quarz ein reduziert sich das Blinkinterval, aber stellt immernoch kein Sekundentakt dar. Liegt bei mir ein Verständnisproblem vor oder gebe ich dem Atmega8 nötige Informationen nicht? Viele Grüße
>#define F_CPU 8000000
Da gehört noch ein UL (unsigned long) hinter. Sonst denkt der Compiler
das ist Integer.
#define F_CPU 8000000UL
mfg.
Besten Dank schonmal für den Hinweis. Leider führt dies zu keinem Unterschied beim Blinkverhalten. Den nun aktuellen Code mit deinem Hinweis hänge ich an.
1 | #include <stdlib.h> |
2 | #include <avr/io.h> |
3 | #include <avr/interrupt.h> |
4 | #include <util/delay.h> |
5 | |
6 | #define F_CPU 8000000UL
|
7 | |
8 | #define LED_PORT PORTD
|
9 | #define LED 2
|
10 | |
11 | void toggle_led() |
12 | {
|
13 | LED_PORT ^= (1 << LED); |
14 | }
|
15 | |
16 | void main(void) |
17 | {
|
18 | |
19 | DDRD=0xff; |
20 | |
21 | PORTD=0x00; |
22 | |
23 | while(1) |
24 | {
|
25 | |
26 | toggle_led(); |
27 | _delay_ms(250); |
28 | _delay_ms(250); |
29 | _delay_ms(250); |
30 | _delay_ms(250); |
31 | |
32 | }
|
33 | |
34 | }
|
Kannst du Messwerte beschaffen - Wie oft blinkt es in 10s oder 100s? Damit könnte man vielleicht Rückschlüsse auf die Ursache ziehen. Bei dem Wechsel auf 4 MHz Quarz: Hast du den Quarz als Bauteil getauscht und im Programm F_CPU auf 4000000 geändert? Welche Version der avr-libc benutzt du (s. Datei avr/version.h)? Mit dem gezeigten Code kannst du nicht gut unterschieden, ob dein Programm läuft oder der AVR dauernd resettet. Das kann wie eine blinkende LED aussehen. Füge an einem freien Pin ein Dauersignal ein. Wenn das toggelt, hast du ein Resetproblem.
>#include <util/delay.h> > >#define F_CPU 8000000UL Falsch, so ist es richtig: #define F_CPU 8000000UL #include <util/delay.h> Und Optimierung einschalten nicht vergessen.
Danke an Helfer und Holger, die Reihenfolge #define und include hat den Ausschlag gegeben. Besten Dank für die Unterstützung!
Hans B. schrieb: > void main(void) int main(void) Sollte der Compiler auch anmeckern. Hat zwar nichts mit deinem Fehler zu tun aber... Den Takt kannst du auch einstellen unter >>Project >>Configuration Options >>General >> Frequenzy mfg.
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.