Forum: Mikrocontroller und Digitale Elektronik CLKDIV8 programmiertechnsich setzen, nicht manuell


von dreamliner (Gast)


Lesenswert?

Hi,
ich möchte gern den CLKDIV8 standardmäßig über Code ausschalten, hab die 
avr/fuse.h eingebunden und finde auch das Flag CKDIV8.
Versteh nur nicht, wie ich das disablen, oder in diesem Fall enablen 
soll.
Weiß jemand Rat?

Mfg

von Peter D. (peda)


Lesenswert?

Siehe Kapitel: "6.3 System Clock Prescaler"

von Oliver S. (oliverso)


Lesenswert?

Geht nicht. Das ist eine normale fuse, die lässt sich vom Programm aus 
nur auslesen, nicht verändern.

Du kannst vom Prgramm aus nur nur den System clock prescaler einstellen.

Oliver

von Thomas E. (thomase)


Lesenswert?

Die CLKDIV8-Fuse ist nur eine Voreinstellung des Clock-Prescalers.
In der avr/power.h findest du Funktionen bzw. Makros, mit denen du das 
bequem zur Laufzeit ändern kannst.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Thomas E. schrieb:
> Die CLKDIV8-Fuse ist nur eine Voreinstellung des Clock-Prescalers.
> In der avr/power.h findest du Funktionen bzw. Makros, mit denen du das
> bequem zur Laufzeit ändern kannst.

Good to know ... Kann man auch die Oszillatoren zur Laufzeit umstellen?

von Cyblord -. (cyblord)


Lesenswert?

Mampf F. schrieb:
> Thomas E. schrieb:
>> Die CLKDIV8-Fuse ist nur eine Voreinstellung des Clock-Prescalers.
>> In der avr/power.h findest du Funktionen bzw. Makros, mit denen du das
>> bequem zur Laufzeit ändern kannst.
>
> Good to know ... Kann man auch die Oszillatoren zur Laufzeit umstellen?

Nein, man kann KEINE Fuse zur Laufzeit ändern. KEINE. Das muss einfach 
langsam mal ankommen. AVRs haben jetzt seit Menschengedenken Fuses. Und 
mindestens seit dem kommt diese Frage.
Auch die CLKDIV8 Fuse nicht. In diesem Fall kann man lediglich deren 
Funktion auch programmtechnisch nachbilden.

Wenn du am gesamten Clocktree per Laufzeit fummeln willst nimm einen 
STM32. Da geht das.

: Bearbeitet durch User
von Mampf F. (mampf) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> Nein, man kann KEINE Fuse zur Laufzeit ändern. KEINE. Das muss einfach
> langsam mal ankommen.

Was regst du dich so auf?

Der Vorposter hat das schon geschrieben und - ich zumindest - hatte es 
auch zur Kenntnis gekommen.

Wenn man es programmtechnisch aber nachbilden kann, liegt doch die Frage 
nahe, ob man programmtechnisch auch die Oszillatoren umstellen kann.

Das mit den Fuses hab ich schon immer für sinnlos gehalten ...

von Cyblord -. (cyblord)


Lesenswert?

Mampf F. schrieb:
> Wenn man es programmtechnisch aber nachbilden kann, liegt doch die Frage
> nahe, ob man programmtechnisch auch die Oszillatoren umstellen kann.

Eigentlich nicht. Aber wenn du dich das fragst, warum schaust du nicht 
ins Datenblatt ob es da Register für die Taktquelle gibt? Register für 
den Clock Prescaler gibt es dort nämlich. Ist also kein sooo großes 
Geheimnis.

> Das mit den Fuses hab ich schon immer für sinnlos gehalten ...

Gut zu wissen. Kommt ins Protokoll.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> Wenn du am gesamten Clocktree per Laufzeit fummeln willst nimm einen
> STM32. Da geht das.

Tu ich doch ... Nachdem Microchip Atmel aufgekauft hat, hätte es ja sein 
können, dass sich da etwas getan hat.

Interessiert wird man ja wohl noch sein dürfen, ohne dass man von einem 
Oberschlauen direkt angemault wird ;-)

von Mampf F. (mampf) Benutzerseite


Lesenswert?

Cyblord -. schrieb:
> Eigentlich nicht. Aber wenn du dich das fragst, warum schaust du nicht
> ins Datenblatt ob es da Register für die Taktquelle gibt? Register für
> den Clock Prescaler gibt es dort nämlich. Ist also kein sooo großes
> Geheimnis.

Derzeit mach ich mit AVRs wenig und meine bisherigen Infos waren, dass 
es nicht geht. Hatte deshalb auch nie wieder nachgeschaut.

Wie gemeint, es hätte ja sein können, dass sich da was geändert hat^^

von spess53 (Gast)


Lesenswert?

Hi

>Good to know ... Kann man auch die Oszillatoren zur Laufzeit umstellen?

Beim ATtiny417/814/816/817 sollte es gehen (ohne Gewähr).

MfG Spess

von Erwin D. (Gast)


Lesenswert?

spess53 schrieb:
> Beim ATtiny417/814/816/817 sollte es gehen (ohne Gewähr).

Du zerstörst gerade auf brutale Art das Weltbild von Lord Helmchen :-)

Cyblord -. schrieb:
> Nein, man kann KEINE Fuse zur Laufzeit ändern. KEINE. Das muss einfach
> langsam mal ankommen.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

spess53 schrieb:
> Beim ATtiny417/814/816/817 sollte es gehen (ohne Gewähr).

Gerade nachgeschaut ... Jap richtig ... Du hast recht!

Man kann wohl Fuses immer noch nicht ändern, aber zumindest die 
Voreinstellungen durch die Fuses (zT) programmatisch überschreiben - und 
jetzt anscheinend auch die Oszillator-Einstellung.

Fand ich auch immer doof, dass das nicht ging ... Wieviele AVRs hätten 
dem Fuse-Tod entgehen können, wäre das schon immer gegangen :)

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

ATtiny417/814/816/817 sind die ersten und bislang einzigen die das 
können. Und mit der Verfügbarkeit sieht es auch noch irgendwie mau aus. 
Da kann man schon allg. 'Nein' sagen.

MfG Spess

von Mampf F. (mampf) Benutzerseite


Lesenswert?

spess53 schrieb:
> ATtiny417/814/816/817 sind die ersten und bislang einzigen die das
> können. Und mit der Verfügbarkeit sieht es auch noch irgendwie mau aus.
> Da kann man schon allg. 'Nein' sagen.

Seltsam eigentlich, weil das Datenblatt ist auf Mai 2014 datiert ...

Ich hab zufällig einen tiny841 hier herumliegen ... (für ein RGB-Licht, 
weil der 841er zwei 16Bit Timer hat).

Aber stimmt, bei Reichelt bekommt man die (noch?) nicht.

von Cyblord -. (cyblord)


Lesenswert?

Mampf F. schrieb:
> spess53 schrieb:
>> ATtiny417/814/816/817 sind die ersten und bislang einzigen die das
>> können. Und mit der Verfügbarkeit sieht es auch noch irgendwie mau aus.
>> Da kann man schon allg. 'Nein' sagen.
>
> Seltsam eigentlich, weil das Datenblatt ist auf Mai 2014 datiert ...
>
> Ich hab zufällig einen tiny841 hier herumliegen ... (für ein RGB-Licht,
> weil der 841er zwei 16Bit Timer hat).

Der 841 ist längst verfügbar und man bekommt den bei allen Distris wie 
Mosuer, Digikey, Farnell usw.
Der hat mit den oben genannten Typen nichts zu tun.

>
> Aber stimmt, bei Reichelt bekommt man die (noch?) nicht.

Jaja als wenn reichelt da irgendwie ne Referenz für wäre.

von Axel S. (a-za-z0-9)


Lesenswert?

Mampf F. schrieb:
> Cyblord -. schrieb:
>> ... wenn du dich das fragst, warum schaust du nicht
>> ins Datenblatt ob es da Register für die Taktquelle gibt? Register für
>> den Clock Prescaler gibt es dort nämlich. Ist also kein sooo großes
>> Geheimnis.
>
> Derzeit mach ich mit AVRs wenig und meine bisherigen Infos waren, dass
> es nicht geht. Hatte deshalb auch nie wieder nachgeschaut.
>
> Wie gemeint, es hätte ja sein können, dass sich da was geändert hat

Warum sollte MCP das Verhalten der alten AVRs auf inkompatible Weise 
ändern? Schon beim mega328B sind einige der Änderungen nach hinten 
losgegangen.


Erwin D. schrieb:
> spess53 schrieb:
>> Beim ATtiny417/814/816/817 sollte es gehen (ohne Gewähr).
>
> Du zerstörst gerade auf brutale Art das Weltbild von Lord Helmchen :-)

Wieso?

> Cyblord -. schrieb:
>> Nein, man kann KEINE Fuse zur Laufzeit ändern. KEINE. Das muss einfach
>> langsam mal ankommen.

Das stimmt immer noch. Auch bei den neuen Tinies kann man die Fuses 
aus dem Programm heraus nicht ändern.


Mampf F. schrieb:
> spess53 schrieb:
>> Beim ATtiny417/814/816/817 sollte es gehen (ohne Gewähr).
>
> Gerade nachgeschaut ... Jap richtig ... Du hast recht!
>
> Man kann wohl Fuses immer noch nicht ändern, aber zumindest die
> Voreinstellungen durch die Fuses (zT) programmatisch überschreiben - und
> jetzt anscheinend auch die Oszillator-Einstellung.

Auch das ist weder neu noch verwunderlich. Die neuen Tinies bauen auf 
dem xMega Kern auf. Und auch als die xMega noch von Atmel kamen, konnte 
man bei denen die Taktquelle zur Laufzeit umkonfigurieren.

von Karl M, (Gast)


Lesenswert?

Guten Mittag,

nun man kann auch einzelne oder hohe Stückzahlen bei Markus Weber 
erhalten, aber es muss ja Keiner:

https://guloshop.de/shop/Mikrocontroller/ATtiny841-SOIC::117.html?XTCsid=9smgajik7cmgdp18j3e5n09jl3

von Maxim B. (max182)


Lesenswert?

dreamliner schrieb:
> Hi,
> ich möchte gern den CLKDIV8 standardmäßig über Code ausschalten, hab die
> avr/fuse.h eingebunden und finde auch das Flag CKDIV8.
> Versteh nur nicht, wie ich das disablen, oder in diesem Fall enablen
> soll.
> Weiß jemand Rat?
>
> Mfg

Es gibt nichts einfacheres:
1
CLKPR = 0x80; // Vorbereitung
2
  // CLKPR = 0; /* Prescaler auf 1 */
3
  // CLKPR = 1<<CLKPS0; /* Prescaler auf 2 */
4
  // CLKPR = 1<<CLKPS1; /* Prescaler auf 4 */
5
  // CLKPR = 1<<CLKPS1|1<<CLKPS0; /* Prescaler auf 8 */
6
CLKPR = 1<<CLKPS2; /* Prescaler auf 16 */
7
  // CLKPR = 1<<CLKPS2|1<<CLKPS0; /* Prescaler auf 32 */
8
  // CLKPR = 1<<CLKPS2|1<<CLKPS1; /* Prescaler auf 64 */
9
  // CLKPR = 1<<CLKPS2|1<<CLKPS1|1<<CLKPS0; /* Prescaler auf 128 */
10
  // CLKPR = 1<<CLKPS3; /* Prescaler auf 256 */
Geprüft für ATmega88PA.
Interrupts müssen disabled sein.

Es ist auch möglich, für kurze Zeit, für besonders schwere Berechnungen, 
Taktfrequenz höher machen und danach wieder ruhiger werden.
Aber Achtung: Taktfrequenz wird auch für alles anderes geändert, z.B. 
für Timer. Will man z.B. eine Uhr bauen, so muß man für Zeitaufgaben 
andere Frequenzquelle benutzen. Auch mit USART muß man vorsichtig sein.

: Bearbeitet durch User
von Erwin D. (Gast)


Lesenswert?

Maxim B. schrieb:
> Es gibt nichts einfacheres:
> CLKPR = 0x80; // Vorbereitung
>   // CLKPR = 0; /* Prescaler auf 1 */
>   // CLKPR = 1<<CLKPS0; /* Prescaler auf 2 */
>   // CLKPR = 1<<CLKPS1; /* Prescaler auf 4 */
>   // CLKPR = 1<<CLKPS1|1<<CLKPS0; /* Prescaler auf 8 */
> CLKPR = 1<<CLKPS2; /* Prescaler auf 16 */
>   // CLKPR = 1<<CLKPS2|1<<CLKPS0; /* Prescaler auf 32 */
>   // CLKPR = 1<<CLKPS2|1<<CLKPS1; /* Prescaler auf 64 */
>   // CLKPR = 1<<CLKPS2|1<<CLKPS1|1<<CLKPS0; /* Prescaler auf 128 */
>   // CLKPR = 1<<CLKPS3; /* Prescaler auf 256 */
> Geprüft für ATmega88PA

CLKPCE hast du vergessen!

von Maxim B. (max182)


Lesenswert?

Erwin D. schrieb:

> CLKPCE hast du vergessen!

Haben Sie auch erste Zeile gelesen?
Wenn das für Sie schwer verständlich ist, dürfen Sie natürlich auch 
statt
1
CLKPR = 0x80;
auch
1
CLKPR = 1<<CLKPSE;
schreiben.
Das ist auch wohl mehr korrekt im Sinn, daß Atmel theoretisch die Lage 
von Bit CLKPSE irgendwann ändern könnte. Aber für ATmega88PA, wie 
geschrieben, ist auch
1
CLKPR = 0x80;
 völlig OK.

Auch mit ATmega328P geht so. Ich habe (nach dem Löschen) die Platten von 
Arduino Pro Mini so programmiert, da 16 MHz nicht immer notwendig ist, 
mit 1 MHz Takt sind sie sparsamer.

: Bearbeitet durch User
von spess53 (Gast)


Lesenswert?

Hi

>Auch das ist weder neu noch verwunderlich. Die neuen Tinies bauen auf
>dem xMega Kern auf.

Wenn das so stimmt, dann hätten sie wenigstens auch die neuen Befehle 
der XMegas mit übernehmen sollen.

>Und auch als die xMega noch von Atmel kamen, konnte
>man bei denen die Taktquelle zur Laufzeit umkonfigurieren.

Von XMegas war vor deinem Post hier niemals nicht die Rede.

MfG Spess

von Erwin D. (Gast)


Lesenswert?

Maxim B. schrieb:
> Haben Sie auch erste Zeile gelesen?

Stimmt, Tschuldigung...

von Stefan F. (Gast)


Lesenswert?

> Von XMegas war vor deinem Post hier niemals nicht die Rede.

Jein. Atmel selbst schrieb, daß die Xmegas zur AVR Serie gehören (z.B. 
hier http://www.atmel.com/products/microcontrollers/avr/avr_xmega.aspx). 
Ich bin allerdings auch der Meinung, daß man sie separat betrachten 
sollten.

von S. R. (svenska)


Lesenswert?

Karl M, schrieb:
> nun man kann auch einzelne oder hohe Stückzahlen bei Markus Weber

Du verwechselst, wie auch Mampf, den Attiny841 mit dem Attiny814.

von Mampf F. (mampf) Benutzerseite


Lesenswert?

S. R. schrieb:
> Karl M, schrieb:
>> nun man kann auch einzelne oder hohe Stückzahlen bei Markus Weber
>
> Du verwechselst, wie auch Mampf, den Attiny841 mit dem Attiny814.

Ohja stimmt ... Das Datenblatt des Tiny814 ist von Dez'16 ...

Lustig, ich hatte im Datenblatt des 841er nachgeschaut, ob man dort 
schon programmiertechnisch den Clock umschalten kann ... Und jo kann man 
und der kam 2014 raus :)

von HildeK (Gast)


Lesenswert?

Maxim B. schrieb:
> Auch mit ATmega328P geht so.

Auch mit Tiny x5.

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.