Forum: Mikrocontroller und Digitale Elektronik F_CPU stellt sich automatisch ein??


von Florian (Gast)


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?

von holger (Gast)


Lesenswert?

>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.

von Florian (Gast)


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...

von O. D. (odbs)


Lesenswert?

Was für ein Display? Ein paralleles? Da spielt das Timing nicht SO die 
Rolle...

von Florian (Gast)


Lesenswert?

Oliver Döring schrieb:
> Was für ein Display? Ein paralleles? Da spielt das Timing nicht SO
> die
> Rolle...

Eines mit HDD447880 Controler, im 4Bit modus.

Da sollte es doch schon einen Unterschied machen, ob man 1 oder 8Mhz 
verwendet oder?

von holger (Gast)


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.

von O. D. (odbs)


Lesenswert?

Entweder das oder die Software fragt das Busy-Flag ab und braucht die 
Delays zwischen den Kommandos nicht.

Das reine Takten der Daten schaffen die meisten HD447880-artigen 
Controller jedenfalls wesentlich schneller als das Datenblatt behauptet.

von Florian (Gast)


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?

von holger (Gast)


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.

von Florian (Gast)


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?

von holger (Gast)


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;)

von Florian (Gast)


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?

von Stefan (Gast)


Lesenswert?

Ich würde mal schauen, was auf dem Quarz steht.

von c-hater (Gast)


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.

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
Noch kein Account? Hier anmelden.