CLKDIV8 programmiertechnsich setzen, nicht manuell

#5048130
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.
Persönliche Seite #5048132
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 ...
#5048135
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.
Persönliche Seite #5048142
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^^
Persönliche Seite #5048205
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 :)
Persönliche Seite #5048228
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.
#5048230
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.
#5048262
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.
#5048313
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.
Gast #5048325
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!
#5048329
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.
Gast #5048424
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
Persönliche Seite #5048625
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 :)

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