Forum: Mikrocontroller und Digitale Elektronik ATmega48 runtertakten


von Torsten O. (Gast)


Lesenswert?

N' Abend, ich hab' da mal 'ne Frage zum Runtertakten des µC. Werkseitig 
ist 1 MHz eingestellt - nun versuche ich mit dem Prescaler-Register noch 
weiter runterzutakten, aber das funktioniert nicht wie ich es mache.

Ich habe das so geschrieben :

Vorbereiten:

cli
ldi     R16, 0x80
sts     CLKPR, R16                      ; Enable setzen

Fertig:

lds     R16, CLKPR                      ; Prüfen ob Bit noch gesetzt ist
sbrc    R16, 7
rjmp    Ready

Teilen:

ldi     R16, 0x08                  ; Takten
sts     CLKPR, R16
sei

Ich war eigentlich der Meinung, dass ich das so richtig verstanden habe 
im Datenblatt. Also als erstes, den "Prescale Enable" setzen, dann 
warten bis er soweit ist (vier Takte soll das dauern) und dann kann ich 
die Frequenz runtertakten. Aber so funktioniert es eben nicht. Haben die 
FuseBits da auch noch was mitzureden?

Vielen Dank im voraus


lg Torsten

von Falk B. (falk)


Lesenswert?

@ Torsten Ohne (tome28)

>weiter runterzutakten, aber das funktioniert nicht wie ich es mache.

Weil es falsch ist.

>warten bis er soweit ist (vier Takte soll das dauern) und dann kann ich

FALSCH! Innerhalb der vier Takte muss der zweite Schreibzugriff 
erfolgen, sonst ist es Essig mit der Umstellung!

>die Frequenz runtertakten. Aber so funktioniert es eben nicht. Haben die
>FuseBits da auch noch was mitzureden?

Nein. Eher so
1
ldi r16, 0x80  ; Prescaler write enable
2
ldi r17, 0x08  ; Presacler Wert
3
sts CLKPR, r16
4
sts CLKPR, r17

MfG
Falk

von Philipp B. (philipp_burch)


Lesenswert?

Falk Brunner wrote:
> Nein. Eher so
>
>
1
> ldi r16, 0x80  ; Prescaler write enable
2
> ldi r17, 0x08  ; Presacler Wert
3
> sts CLKPR, r16
4
> sts CLKPR, r17
5
>

Fast. Sicherheitshalber würde ich vor dem ersten Schreibzugriff noch die 
Interrupts deaktivieren, falls die Umstellung passieren soll, während 
dieselben eingeschaltet sind. Also
1
cli
2
sts CLKPR, r16
3
sei
4
sts CLKPR, r17

von Gast (Gast)


Lesenswert?

>Also als erstes, den "Prescale Enable" setzen, dann
>warten bis er soweit ist (vier Takte soll das dauern)

Nein, Du sollst die vier Takte nicht abwarten, sondern Dein Geschäft 
erledigen, solange die noch nicht rum sind.

von Gast (Gast)


Lesenswert?

Ich plädiere für

cli
sts CLKPR, r16
sts CLKPR, r17
sei

von Bastian N. (slime2k)


Lesenswert?

War da nicht was mit der nächste befehl nach sei wird noch ausgeführt 
bevor der erste (mögliche) interrupt angesprungen wird?

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Heruntertakten kannst Du ihn nur per Fuse oder durch eine entsprechende 
externe Taktquelle.

von Fuzzy (Gast)


Lesenswert?

wie weit kann man einen AVR eigentlich runtertakten.
Ich habe schon Behauptungen gehört, das man ihn extern mit 10 Hz oder so 
takten kann.
Wäre zum debuggen mit altem/einfachen Gerät doch irgendwie praktisch.

von Michael H* (Gast)


Lesenswert?

im datenblatt eines avrs ist als minimaler takt meistens DC zu lesen.
also taster dran fleißig morsen =)

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.