mikrocontroller.net

Forum: HF, Funk und Felder CTC-Mode Atmel-MAC Zigbit


Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Wenn ich im beim Atmel-MAC den CTC-Mode als Aufwachquelle für das Zigbit 
Modul nutzen will, bleibt das Programm immer in der Kalibrierung für den 
internen Oszillator hängen?!?
Ich bin davon ausgangen, dass die Kalibrierung nur einmal beim 
Programmstart aufgerufen wird. Die Initialisierung meines Timer kommt 
erst kurz vor der Hauptschleife.
Wenn ich die Kalibrierung zu Testzwecken auskommentiere läuft es im 
CTC-Mode. Sehr merkwürdig wieder...
Im Moment nutze ich den Overflow-Mode, dieser läuft.

Gruß Daniel

Autor: A. W. (uracolix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wacht der ATmega auf oder stürzt er aufgrund einer fehlenden ISR ab ? 
Wenn über main() kommst sieht es nach einem Absturz aus.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Axel

Die ISR ist vorhanden, allerdings erfolgt darin kein Aufruf.
Was meinst du mit über main() ?
Wird die Kalibrierung in der Regel nur einmal beim Start aufgerufen?
Wenn ja , wie kann es sein, dass ein Aufruf (ctc initialisierung usw.) 
der später erfolgt einen Einfluss haben kann?
Wie gesagt, wenn ich die Kalibrierung auskommentiere Funktioniert es.

Gruß Daniel

Autor: A. W. (uracolix)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Was meinst du mit über main() ?
Normalerweise stetzt der AVR den Programmablauf nach der Sleep 
Instruktion
fort, d.h. wenn du wieder beim Kalibrieren vorbei kommst, gehst du 
sozusagen erneut über main(). In dem Fall war es ein Reset des AVR. Die 
avr-libc fasst alle unitialisierten ISRs, die ausgelöst werden, zusammen 
und springt beim Auftreten so eines IRQ auf den Resetvector.

Kann es sein, dass der Watchdog noch eingeschalten ist ?

Kannst du den Code debuggen (mit Dragon, JTAG ICE) ?  Dann einen 
Breakpoint auf den Anfang von main() setzen, wenn du da mehrfach 
vorbeikommst ist was faul. (Zur Not halt mit LEDs signalisieren).

Das sich die OSCCAL Routine verheddert ist ein weiteres Problem, dem man
nachgehen muesste/koennte/sollte. Gegen welchen Takt kalibrierst du ? 
Wenn es der 1MHz CLKM aus dem Transceiver ist und selbiger noch 
schlummert, dann bleibt die OSCCAL Funktion auch stehen, da der 
Referenztakt fehlt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir den Code gerade nicht angesehen, aber es kann durchaus
Sinn haben, die Kalibrierung immer mal wieder laufen zu lassen, da
der RC-Oszillator ja unter dem Einfluss von Betriebsspannungs- und
Temperaturschwankungen weglaufen kann.

Welchen Timer willst du denn im CTC-Modus laufen lassen?

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Axel

Ich werde das nachher noch genauer untersuchen er die main() erneut 
aufgerufen wird. Der Watchdog ist aus.

@Jörg
Ja, die Überlegung hatte ich auch schon, aber eigentlich wird 
pal_calibrate_rc_osc() nur in mac_init() aufgerufen soweit ich das 
nachvollziehen kann. Die mac_init() funktion wird ja auch nur beim start 
aufgerufen, oder ich hab da was übersehen.

Ich lasse zurzeit Timer2 immer bei Overflow einen Interrupt ausführen, 
um den sleep mode zu verlassen. Klappt soweit ohne Probleme. Erst mit 
dem CTC-Mode kamen die Probleme...

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Um zu sehen, ob's die Kalibrierung ist: ändere doch einfach den Code
für die Kalibrierung so, dass er hernach wieder den ursprünglichen
Zustand der Steuerregister von Timer 2 herstellt.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiss nicht genau wie du das meinst Jörg. Wenn das Programm erneut 
in die Kalibrierung spring, bleibt es an folgender Stelle hängen:

//Wait for timer 2 overflow

while( ! ( TIFR2 & (1<<TOV) ) )
{
 /* Wait */
}

Da der Timer2 bei der Kalibrierung anscheinend auch im Overflow läuft, 
ist es vielleicht kein Problem, dass ich zum Aufwachen auch den Overflow 
nutze?!
Vielleicht sollte ich die Register nach dem Aufwachen wieder auf 
Overflow stellen?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel schrieb:
> Ich weiss nicht genau wie du das meinst Jörg. Wenn das Programm erneut
> in die Kalibrierung spring, bleibt es an folgender Stelle hängen:

Dann läuft der 32-kHz-Quarz nicht, denn wenn der läuft, dann muss
Timer 2 irgendwann mal einen Überlauf haben.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach quatsch. :-)  Manchmal sieht man den Wald vor lauter Bäumen nicht:

· Bit 0 ­ TOV2: Timer/Counter2 Overflow Flag

The TOV2 bit is set (one) when an overflow occurs in
Timer/Counter2. TOV2 is cleared by hardware when executing the
corresponding interrupt handling vector. Alternatively, TOV2 is
cleared by writing a logic one to the flag.

Wenn du da also die Interrupts dafür freigibst, kann die
Kalibrierungsroutine natürlich nie wieder ein TOV2 sehen.  Guck dir
also einfach mal im Debugger an, ob zu dem Zeitpunkt, wo das
hängenbleibt, das TOIE2 aus irgendeinem Grunde eingeschaltet ist.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So läuft :-)

Der Fehler lag anscheinend in der Initialisierung des Timers, also vor 
dem Bildschirm...
Sehr merkwürdig, dass das Programm dann so rumspinnt.
Vielen Dank an euch!

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
  • 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.