F_CPU stellt sich automatisch ein??

Gast #3320213
Lesenswert?

Hallo,
Ich benutze das Stk500 und eclipse mit dem Avr Plugin und habe folgendes 
Problem:

Ich habe ein Lcd display daran angeschlossen und es Funktioniert 
unabhängig davon, welche F_CPU eingestellt ist, und unabhängig davon, 
wie schnell der AVR läuft.(lcd-routnies.h aus dem Tutorial hier)
Wenn ich die Taktfrequenz über die Fusebits auf 1,2,4 oder 8Mhz Stelle, 
funktioniert das Display immer.
Mein erster Gedanke war, dass sich eclipse die Fusebits ausliest, und 
dann automatisch bei einem internen oszilator F_CPU anpasst? Aber selbst 
wenn die Fusebits auf extern clock gestellt sind läuft das Display?
Die Taktfrequenz ändert sich aber, denn wenn ich über einen Timer eine 
LED an und ausschalte wird sie schneller/langsamer, je nach gewählter 
Frequenz.

Kann mir das Jemand erklären?
Gast #3320217
Lesenswert?

holger schrieb:
>>Mein erster Gedanke war, dass sich eclipse die Fusebits ausliest, und
>>dann automatisch bei einem internen oszilator F_CPU anpasst?
>
> Das macht Eclipse nicht. Das AVR Plugin macht das auch nicht.

Das habe ich mir schon fast gedacht. Aber warum funktioniert es? :D
Da will man einmal, dass etwas nicht funktioniert und dann sowas...
Gast #3320228
Lesenswert?

>> Das macht Eclipse nicht. Das AVR Plugin macht das auch nicht.
>
>Das habe ich mir schon fast gedacht. Aber warum funktioniert es?

Vermutlich ist deine F_CPU im AVR Plugin auf eine hohe Frequenz
eingestellt. Du hast es nur noch nicht gefunden wo es steht.
Dann werden die _delay_xx() Funktionen auf diese hohe Frequenz
eingestellt und die Delays werden für die real kleineren
Frequenzen immer grösser. Man kann ein LCD zu langsam ansteuern.
Nur zu schnell geht nicht.
Gast #3320252
Lesenswert?

holger schrieb:
>>> Das macht Eclipse nicht. Das AVR Plugin macht das auch nicht.
>>
>>Das habe ich mir schon fast gedacht. Aber warum funktioniert es?
>
> Vermutlich ist deine F_CPU im AVR Plugin auf eine hohe Frequenz
> eingestellt. Du hast es nur noch nicht gefunden wo es steht.
> Dann werden die _delay_xx() Funktionen auf diese hohe Frequenz
> eingestellt und die Delays werden für die real kleineren
> Frequenzen immer grösser. Man kann ein LCD zu langsam ansteuern.
> Nur zu schnell geht nicht.


Ja, das ist es.... Danke :)
Da habe ich nicht dran gedacht... Langsamer geht immer ;)

Habe es jetzt noch einmal probiert, mit F_CPU 1000000 und 8Mhz. Und dann 
gibt es ein Timing Problem.


Eine Frage noch, Eclipse bietet ja unter Project -> Properties -> Target 
Hardware die Einstellungsmöglichkeit für MCU Clock Frequenzy.
Kann man sich darauf verlassen, dass die dort eingestellte Frequenz auch 
verwendet wird?
oder besser noch ein #ifndef F_CPU #define F_CPU #endif in main.c 
benutzen?
Gast #3320255
Lesenswert?

>Eine Frage noch, Eclipse bietet ja unter Project -> Properties -> Target
>Hardware die Einstellungsmöglichkeit für MCU Clock Frequenzy.
>Kann man sich darauf verlassen, dass die dort eingestellte Frequenz auch
>verwendet wird?

Nein, das ist nur ein Hinweis an den Compiler welche Frequenz du
verwendest. Die Fuses musst du schon selber passend einstellen.
Und dann natürlich auch den entsprechenden Takt zur Verfügung stellen.
Einen internen Takt von z.B 11.0592MHz gibt es halt nicht.
Gast #3320258
Lesenswert?

holger schrieb:
>>Eine Frage noch, Eclipse bietet ja unter Project -> Properties ->
> Target
>>Hardware die Einstellungsmöglichkeit für MCU Clock Frequenzy.
>>Kann man sich darauf verlassen, dass die dort eingestellte Frequenz auch
>>verwendet wird?
>
> Nein, das ist nur ein Hinweis an den Compiler welche Frequenz du
> verwendest. Die Fuses musst du schon selber passend einstellen.
> Und dann natürlich auch den entsprechenden Takt zur Verfügung stellen.
> Einen internen Takt von z.B 11.0592MHz gibt es halt nicht.

Das meinte ich auch nicht,

Die fusebits setze ich selbst. Das ist klar.

Aber wenn ich dorf 1Mhz einstelle, dann werden meine delay Zeiten nach 
dieser Einstellung berechnet?
Gast #3320270
Lesenswert?

>Aber wenn ich dorf 1Mhz einstelle, dann werden meine delay Zeiten nach
>dieser Einstellung berechnet?

Ja, und wenn du die CPU dann doch mit 16MHz taktest sollten dir
deine LCD Routinen ordnungsgemäß um die Ohren fliegen;)
Gast #3320273
Lesenswert?

holger schrieb:
>>Aber wenn ich dorf 1Mhz einstelle, dann werden meine delay Zeiten
> nach
>>dieser Einstellung berechnet?
>
> Ja, und wenn du die CPU dann doch mit 16MHz taktest sollten dir
> deine LCD Routinen ordnungsgemäß um die Ohren fliegen;)

Tut sie :) :D

Danke :)

weist du zufällig, wie schnell welche Taktfreqeunz anliegt, wenn ich die 
Fusebits auf ext. Clock stelle und der uC dabei im Stk500 steckt?
Gast #3321072
Lesenswert?

Florian schrieb:

> Eines mit HDD447880 Controler, im 4Bit modus.
>
> Da sollte es doch schon einen Unterschied machen, ob man 1 oder 8Mhz
> verwendet oder?

Nein. Wenn du den Treiber für 8Mhz kompilierst und funktioniert, wird er 
bei jeder niedrigeren Taktfrequenz auch funktionieren, nur halt 
langsamer sein.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren