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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von dreamliner (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Siehe Kapitel: "6.3 System Clock Prescaler"

von Oliver S. (oliverso)


Bewertung
0 lesenswert
nicht 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. (Firma: Thomas Eckmann Informationst.) (thomase)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
-1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
-1 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Maxim B. schrieb:
> Haben Sie auch erste Zeile gelesen?

Stimmt, Tschuldigung...

von Stefan ⛄ F. (stefanus)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von S. R. (svenska)


Bewertung
0 lesenswert
nicht 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


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Maxim B. schrieb:
> Auch mit ATmega328P geht so.

Auch mit Tiny x5.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.