Forum: Mikrocontroller und Digitale Elektronik RFM12 als umschaltbare AVR-Taktquelle?


von David .. (volatile)


Lesenswert?

Der RFM12 kann einen AVR mit Takt versorgen. Der AVR mag aber keine 
Taktumschaltung zur Laufzeit. Der Watchdogtimer hat nen eigenen 
Oszillator, sollte davon also nicht betroffen sein. Ist also folgendes 
Pseudoprogramm moeglich oder ueberseh ich was?

-Watchdog abschalten
-1-bit-Flag einlesen (zB ein geladener Kondensator an einem Pin)
-Wenn Flag high, dann ist die Frequenz vom RFM12 umgeschaltet - Flag low 
setzen, mainloop
-Wenn Flag low, ist die Frequenz noch auf 1MHz - Flag high setzen, 
Watchdog mit passender Zeit scharfschalten, Kommando an RFM12 
rausschreiben, die Frequenz auf 10MHz zu setzen [Frequenz aendert sich, 
AVR kommt aus dem Tritt oder auch nicht, Watchdog schlaegt zu, AVR wird 
resettet]

[mainloop]

von Werner (Gast)


Lesenswert?

David ... schrieb:
> Der AVR mag aber keine Taktumschaltung zur Laufzeit.
Warum nicht? Man darf den Takt sogar abschalten (min Oszillator Frequenz 
ist 0 Hz).

von David .. (volatile)


Lesenswert?

Werner schrieb:
> David ... schrieb:
>> Der AVR mag aber keine Taktumschaltung zur Laufzeit.
> Warum nicht? Man darf den Takt sogar abschalten (min Oszillator Frequenz
> ist 0 Hz).

http://www.atmel.com/Images/doc2545.pdf
'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.'

von David .. (volatile)


Lesenswert?

Hm, nicht ganz das Feedback, was ich erhofft habe - was fehlt meiner 
Frage fuer ne Antwort? ;)

von Sascha W. (sascha-w)


Lesenswert?

deinen Kondensator kannst du dir sparen.

Man könnte es so machen ...

            SYS-RESET   <--------------------------
                |                                  |
CLOCK-EINSTELLUNG aus RFM auslesen                 |
                |                                  |
          CLOCK=10MHz ??  [JA] -> Hauptprogramm    |
                |                                  |
              [NEIN]                               |
                |                                  |
       Watchdog aktivieren                         |
                |                                  |
       RFM_SET-CLOCK 10MHz                         |
                |                                  |
           AVR in SLEEP                            |
                |                                  |
     Watchdog löst Reset aus  ---------------------


Sascha

von peter (Gast)


Lesenswert?

@ sascha-w: das heisst ja man kann aus dem rfm auslesen welche frequenz 
er ausgibt?

von Sascha W. (sascha-w)


Lesenswert?

ok, da war ich wohl etwas zu voreilig, bei der RFM12 kann man doch nicht 
aller Register lesen. Das geht erst bei den neueren (RFM22 z.B.).

Man könnte aber den Watchdog aktivieren, und die 10MHz Einstellung 
senden, sollt er hängenbleiben, dann erfolgt ein Reset, aber beim 
erneuten senden der 10MHz Einstellung passiert ja nicht's, da er ja dann 
schon die 10MHz ausgibt.

Sascha

von David .. (volatile)


Lesenswert?

Sascha Weber schrieb:
> ok, da war ich wohl etwas zu voreilig, bei der RFM12 kann man doch nicht
> aller Register lesen. Das geht erst bei den neueren (RFM22 z.B.).
>
> Man könnte aber den Watchdog aktivieren, und die 10MHz Einstellung
> senden, sollt er hängenbleiben, dann erfolgt ein Reset, aber beim
> erneuten senden der 10MHz Einstellung passiert ja nicht's, da er ja dann
> schon die 10MHz ausgibt.

Ja, das war auch mein Stand, dass man die Register nicht lesen kann. 
Trotzdem danke fuer deine Muehe mit dem Diagramm, Sascha :)
Ich wuerde gerne den Reset erzwingen. Wenn ich die Frequenz so massiv 
umschalte, bewege ich mich auf jeden Fall weit ausserhalb der Specs, 
also wird resettet ;)
Nehmen wir mal an, dass ich ein Flag habe, was ich setzen kann (sei es 
der genannte Kondensator, ein Wert im EEPROM etc) - spricht sonst was 
gegen die Loesung?
Wenn keine weiteren Einwaende kommen, werde ich dann mal pruefen, wie 
schnell der RFM die neue Frequenz stabil hat und ob der Watchdog ne 
passende Zeit dafuer hat usw - waer auf jeden Fall elegant, auf den 2. 
Quarz versichten zu koennen.

von Sascha W. (sascha-w)


Lesenswert?

David ... schrieb:
> Ja, das war auch mein Stand, dass man die Register nicht lesen kann.
> Trotzdem danke fuer deine Muehe mit dem Diagramm, Sascha :)
> Ich wuerde gerne den Reset erzwingen. Wenn ich die Frequenz so massiv
> umschalte, bewege ich mich auf jeden Fall weit ausserhalb der Specs,
> also wird resettet ;)
> Nehmen wir mal an, dass ich ein Flag habe, was ich setzen kann (sei es
> der genannte Kondensator, ein Wert im EEPROM etc) - spricht sonst was
> gegen die Loesung?
EEProm würd' ich nicht nehmen - der lässt nur eine Begrenze Anzahl an 
Schreibzyklen zu

du könntest - wie in meinem Ursprünglichen Vorschlag nach dem Umschalten 
durch Sleep den Watchdogreset auslösen lassen. Im MCUCSR kann man 
ablesen was den Reset ausgelöst hat - wars der Watchdog, dann ist die 
Frequenz auf 10MHz und das Hauptprogramm kann starten.

            POWER-ON
    (MCUCSR=0x01) [PowerOnReset]
               \/
            SYS-RESET   <-------------------------------
                |                                       |
     WDRF im MCUCSR gesetzt ??  [JA] -> Hauptprogramm   |
                |                                       |
              [NEIN]                                    |
                |                                       |
       Watchdog aktivieren                              |
                |                                       |
       RFM_SET-CLOCK 10MHz                              |
                |                                       |
           AVR in SLEEP                                 |
                |                                       |
     Watchdog löst Reset aus  --------------------------

Sascha

von David .. (volatile)


Lesenswert?

Sascha Weber schrieb:

> EEProm würd' ich nicht nehmen - der lässt nur eine Begrenze Anzahl an
> Schreibzyklen zu

Das ist mir bewusst, man muesste die Abnutzung ueber alle Zellen 
verteilen - bei ansonsten unbenutztem EEPROM wuerde es recht lange 
dauern, bis es kaputt waer ;)

> du könntest - wie in meinem Ursprünglichen Vorschlag nach dem Umschalten
> durch Sleep den Watchdogreset auslösen lassen. Im MCUCSR kann man
> ablesen was den Reset ausgelöst hat - wars der Watchdog, dann ist die
> Frequenz auf 10MHz und das Hauptprogramm kann starten.


Gute Idee, das verfolg ich mal weiter :)

von Dr. G. Reed (Gast)


Lesenswert?

Möglich müsste auch sein, die Taktfrequenz über einen Timer gegen die 
Frequenz des Watchdog-Timers zu messen, da ja der Watchdog einen eigenen 
Oszillator hat.


Also beim Start:

Frequenz messen, wenn klein genug:
Auf 10 MHz umschalten und Watchdog-Reset auslösen.

Beim nächsten Start wird dann die höhere Frequenz erkannt und der uC 
startet normal.

Die Frequenzmessung ist zwar nicht besonders genau, aber um zu erkennen, 
ob 1 oder 10MHz reichts allemal...

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Scheinbar muss man das RFM12 komplett spannungslos schalten, damit es 
ordentlich "kaltstartet" und funktioniert; dazu versorgt man es aus 
einem Port-Pin und schaltet diesen erst nach einer Sekunde oder so nach 
dem Power-On auf 'High'. Sonst scheinen winzige Restladungen in 
Pufferelkos oder andere mysteriöse Effekte manchmal das Modul davon 
abzuhalten, etwas sinnvolles zu tun... Dummerweise generiert es im 
spannungslosen Zustand kein Clock-Signal. Gibts da einen kreativen 
Lösungsvorschlag?

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

diskret auf die titelseite schieb

von Sascha W. (sascha-w)


Lesenswert?

vielleicht musst du mal an deiner Spannungsversorgung ansetzen. 
Ansonsten kannst du höchstens noch einen IC zur Spannungsüberwachung 
einbauen, der mit seinem Freigabesignal dann die Versorung des RFM 
einschaltet.
Wird aber sicher nicht kleiner als ein Quarz am AVR.

Sascha

von Niklas G. (erlkoenig) Benutzerseite


Lesenswert?

Sascha Weber schrieb:
> vielleicht musst du mal an deiner Spannungsversorgung ansetzen.
Hm. Die Pufferelkos scheinen nötig, um die Spannung glatt genug zu 
halten.
Sascha Weber schrieb:
> Wird aber sicher nicht kleiner als ein Quarz am AVR.
Und gewiss nicht unkomplizierter ;-)

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.