PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : F_CPU und _delay_ms - Richtige Werte schein Falsche zu sein



Xtreaft
27.06.2007, 11:32
Hi,
ich hab ein Problem mit dem _delay_ms. Es funktioniert - Aber nicht wenn ich F_CPU so setzt wie ich das für richtig halte. Wo ist mein Denkfehler:

Also ich hab den RN-Control 1.4 Mega32 (ist doch AT32mega?!) mit 16MHz.
Makefile Eckdaten: MCU_TARGET = atmega32 und OPTIMIZE = -Os

Wenn ich nun #define F_CPU 1000000UL setzt ist alles soweit okay. Aber eigentlich müsste ich doch F_CPU auf 16000000UL setzen (da = 16MHz), dann ist mein delay aber viel zu langsam.
Was ist da falsch?

btw.: wofür steht das UL???

Vielen Dank

zumgwadrad
27.06.2007, 13:48
Hi,
sind denn deine Fusebits ordentlich gesetzt? Und wieviel hast du in dein delay_ms() in die Klammer geschrieben? das ist beschränkt durchs Zahlenformat und der maximal mögliche Wert muss auch noch durch den Takt in MHz geteilt werdeen!
Musst mal in die Lib selber schauen, steht dann als Kommentar dabei!

Und des UL war irgend so ein Zahlenformat glaub ich!

geronet
27.06.2007, 13:52
UL = unsigned long

Grüsse, Stefan

zumgwadrad
27.06.2007, 13:54
Wusst ichs doch! =D>

Xtreaft
27.06.2007, 20:03
So also die Fusebits. Hatte die eigentlich nicht verstellt. Nun hab ich mal unter:

http://palmavr.sourceforge.net/cgi-bin/fc.cgi?P_PREV=ATmega323&P=ATmega32&V_LOW=F1&V_HIGH=99&M_LOW_0x0F=0x01&M_LOW_0x40=&M_LOW_0x80=0x80&M_HIGH_0x01=&M_HIGH_0x06=0x00&M_HIGH_0x08=&M_HIGH_0x20=0x00&M_HIGH_0x40=0x00&M_HIGH_0x80=&B_JTAGEN=P&B_SPIEN=P&B_CKSEL3=P&B_CKSEL2=P&B_BOOTSZ1=P&B_CKSEL1=P&B_BOOTSZ0=P

geschaut und gesehen das meine Fusebits nun doch anders sein müssten. Also hab ich die mal anders gesetzt aber dadurch ist nur alles noch langsammer und schlimmer geworden.

Wie müssen dei den richtig, wenn ich den den 16MHz Quatz benutzen will?

geronet
27.06.2007, 20:26
Dann doch eher so:
http://palmavr.sourceforge.net/cgi-bin/fc.cgi?P_PREV=ATmega32&P=ATmega32&V_LOW=EE&V_HIGH=99&M_LOW_0x3F=0x2E&M_LOW_0x40=&M_LOW_0x80=0x80&M_HIGH_0x01=&M_HIGH_0x06=0x00&M_HIGH_0x08=&M_HIGH_0x10=&M_HIGH_0x20=0x00&M_HIGH_0x40=&M_HIGH_0x80=&B_JTAGEN=P&B_SPIEN=P&B_SUT0=P&B_BOOTSZ1=P&B_BOOTSZ0=P&B_CKSEL0=P

Als Referenz:
http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html

Mit 16 Mhz kannst du somit
262.14 / 16 = 16,38375 ms max. warten.
(Kannst ja auch zwei delay_ms untereinanderschreiben)

Grüsse, Stefan

Xtreaft
27.06.2007, 20:29
Ich glaub jetzt hab ich ein PROBLEM. Hm hab ausversehen falsche Clock eingestellt und nun antwortet das Board nicht mehr.
Und nun? Kaput?

PCMan
02.07.2007, 20:44
Retten mit dem NE555 z.B., falls du auf external resonator/oscillator gestellt hast. Dazu gibts auch Beiträge im Forum.
vg

Xtreaft
02.07.2007, 20:47
Dank hab ich schon gesehen aber n Kumpel hat n Endwicklungskit und der hat mir die schnell wider richtig gesetzt.

Was hab ich daraus gelernt: Nicht an allem rumspielen von dem ich NULL ahnung hab.