www.mikrocontroller.net

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


Important 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.
Autor: David ... (volatile)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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]

Autor: Werner (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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).

Autor: David ... (volatile)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.'

Autor: David ... (volatile)
Datum:

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

Autor: Sascha Weber (sascha-w)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: peter (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
@ sascha-w: das heisst ja man kann aus dem rfm auslesen welche frequenz 
er ausgibt?

Autor: Sascha Weber (sascha-w)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: David ... (volatile)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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.

Autor: Sascha Weber (sascha-w)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: David ... (volatile)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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 :)

Autor: Dr. G. Reed (Gast)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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...

Autor: Niklas Gürtler (erlkoenig)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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?

Autor: Niklas Gürtler (erlkoenig)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht lesenswert
diskret auf die titelseite schieb

Autor: Sascha Weber (sascha-w)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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

Autor: Niklas Gürtler (erlkoenig)
Datum:

Diesen Beitrag bewerten:
lesenswert
nicht 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 ;-)

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




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 erkennst du die Nutzungsbedingungen an.

webmaster@mikrocontroller.netImpressumNutzungsbedingungenWerbung auf Mikrocontroller.net