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
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
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.
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?
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.
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 ...
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.
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 ;-)
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^^
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.
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 :)
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
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.
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.
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.
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.
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.
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 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.
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 :)