Forum: Mikrocontroller und Digitale Elektronik Atmega644 mit sich änderndem externen Clock


von Stephan M. (stmz)


Lesenswert?

Hallo zusammen,

ich möchte eine Schaltung bauen mit einem Atmega644 und einem 
RFM12-Modul. Meine Frage bezieht sich aber nicht direkt auf das 
Funkmodul selbst.

Das RFM12-Modul beinhaltet einen Quarz und der so erzeugte Takt kann 
ausgegeben werden, um z.B. einen Mikrocontroller damit zu versorgen. Nun 
ist es allerdings so, dass dieser Takt beim Einschalten nur 1 MHz 
beträgt und über spezielle Befehle auf 10 MHz nachträglich umgeschaltet 
werden muss.

Beim Durchlesen des Atmega644-Datenblatts unter 
http://www.atmel.com/dyn/resources/prod_documents/doc2593.pdf finde ich 
unten auf Seite 35 allerdings folgenden Hinweis:

> When applying an external clock, it is required to avoid
> sudden changes in the applied clock frequency
> to ensure stable operation of the MCU. A variation
> in frequency of more than 2% from
> one clock cycle to the next can lead to unpredictable
> behavior. If changes of more than 2% is
> required, ensure that the MCU is kept in Reset during the changes.

Ist denn so überhaupt eine Verwendung des 10 MHz Takts des RFM12 
nutzbar? Eine Umschaltung kann ich erst bei laufendem Prozessor 
vornehmen und dann verletze ich die maximal erlaubte 2% Variation aus 
dem Datenblatt.

Übersehe ich etwas? Ich kann nicht abschätzen, inwiefern eine solche 
Frequenzumschaltung gleich nach dem Einschalten des Prozessors zu 
Problemen führen kann.

viele Grüße

Stephan

von Falk B. (falk)


Lesenswert?

@  Stephan M. (stmz)

>Ist denn so überhaupt eine Verwendung des 10 MHz Takts des RFM12
>nutzbar?

Ja.

> Eine Umschaltung kann ich erst bei laufendem Prozessor
>vornehmen und dann verletze ich die maximal erlaubte 2% Variation aus
>dem Datenblatt.

Theoretisch ja, praktisch funktioniert es aber, wenn gleich es da schon 
komische Effekte gab.

Beitrag "Re: bidirektionale RS232 Funkbrücke mit RFM12"

von Stephan M. (stmz)


Lesenswert?

Hallo Falk,

Falk Brunner schrieb:

> @  Stephan M. (stmz)
>
>>Ist denn so überhaupt eine Verwendung des 10 MHz Takts des RFM12
>>nutzbar?
>
> Ja.
>
>> Eine Umschaltung kann ich erst bei laufendem Prozessor
>>vornehmen und dann verletze ich die maximal erlaubte 2% Variation aus
>>dem Datenblatt.
>
> Theoretisch ja, praktisch funktioniert es aber, wenn gleich es da schon
> komische Effekte gab.
>
> Beitrag "Re: bidirektionale RS232 Funkbrücke mit RFM12"

super, vielen Dank für diesen Link. Beim Überfliegen des Threads habe 
ich jedoch keine Beschreibung gefunden, zu welchen Problemen die 
schnelle Frequenzumschaltung geführt hat. Hast du da konkrete 
Informationen? Werde mir aber auf jeden Fall den Thread nochmal genauer 
durchlesen und das ganze gegebenenfalls einfach mal testen.

Gruß
Stephan

von Falk B. (falk)


Lesenswert?

@  Stephan M. (stmz)

>ich jedoch keine Beschreibung gefunden, zu welchen Problemen die
>schnelle Frequenzumschaltung geführt hat. Hast du da konkrete
>Informationen?

Ja, ich war damals das Versuchskanninchen 8-0
Der Atmega8 kam durch die Umschaltung von 1 auf 10MHz aus dem Tritt.
Ursache unklar, nur der Verweis aus dem Datenblatt steht als Erklärung.
Ich hab es gemessen, der Takt vom RFM10 wird glitchfrei umgeschaltet, 
somit sollte es eigentlich keine Probleme geben. Aber wahrscheinlich ist 
in der Taktaufbereitung der neuen AVRs zuviel Schnickschnack drin, der 
sich daran unter bestimmten Umständen verschluckt.

MFG
Falk

von Bernhard R. (barnyhh)


Lesenswert?

Der Grund läßt sich im Datenblatt z.B. des ATMega16 unter "Instruction
Execution Timing" erahnen:
Innerhalb eines (externen) Clock-Zyklus erfolgen bei ALU-Operationen;
- 2 Operanden lesen
- Operation
- Ergebnis speichern (in einen der Operanden).

Diese Schritte erfolgen nacheinander und setzen voraus, daß die CPU 
einen aus dem externen Takt abgeleiteten schnelleren internen Takt 
besitzt. Derartiges wird vielfach per PLL durchgeführt. Der Regelkreis 
einer derartigen PLL mag Sprünge in der Steuerfrequenz nicht besonders 
gern.

Bernhard

von Sascha W. (sascha-w)


Lesenswert?

@Stephan M.

eine Idee währe folgende Vorgehensweise ...

1. Reset
2. prüfen ob die RMF schon auf 10MHz eingestellt ist, wenn ja weiter zum 
normalen Programmablauf
3. Watchdog aktivieren
4. RMF auf 10MHz umschalten
5. Endlosschleife und auf den Watchdogreset warten

Sascha

von Falk B. (falk)


Lesenswert?

@  Bernhard R. (barnyhh)

>Der Grund läßt sich im Datenblatt z.B. des ATMega16 unter "Instruction
>Execution Timing" erahnen:
>Innerhalb eines (externen) Clock-Zyklus erfolgen bei ALU-Operationen;
>- 2 Operanden lesen
>- Operation
>- Ergebnis speichern (in einen der Operanden).

Ja und? Wer sag, das dazu zwei TAKTE nötig sind? Das kann man problemlos 
statisch in einem Takt machen, kurze Logikdurchlaufzeiten vorausgesetzt.

>Diese Schritte erfolgen nacheinander und setzen voraus, daß die CPU
>einen aus dem externen Takt abgeleiteten schnelleren internen Takt
>besitzt.

Nein.

> Derartiges wird vielfach per PLL durchgeführt. Der Regelkreis
>einer derartigen PLL mag Sprünge in der Steuerfrequenz nicht besonders
>gern.

Schon klar, nur haben die meisten AVRs keine PLLs. Zumindest nicht laut 
Datenblatt. Was an versteckten Features in den Taktblöcken steckt, weiß 
nur Atmel.

Das Datenblatt sagt dazu.

"Fully Static Operation"

Also nix PLL & Co.

MfG
Falk

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Gibt es da einen Taktgenerator der den Takt im 1-2% Bereich pro Takt an 
den neuen Takt anpasst ?
Die prinzipielle Anpassung des Externen Taktes für einen Atmega würde 
mich auch interessieren.

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.