-         

Ergebnis 1 bis 5 von 5

Thema: Sleep-Mode - Fehler nach dem Aufwachen

  1. #1

    Sleep-Mode - Fehler nach dem Aufwachen

    Anzeige

    Hallo,
    Ich hab ein kleines Problem mit den Sleepmodes beim Mega168.
    (Bin erst neu auf C umgestiegen...bitte net hauen wenn die Lösung total einfach und offensichtlich ist.)

    Ich baue einen Datenlogger der den FAT16 Support von Roland Riegel benutzt.

    Immer wenn ich meinen AVR in den Powersave Modus schicke sendet er nur noch Kryptische Zeichen und das Programm läuft nicht weiter. Wenn ich den IDLE Modus nehme läuft das Programm nach dem schlafen wieder weiter, allerdings nicht mit der im Timer2 angepeilten Schlafdauer.

    Meine eine Vermutung ist dass ich etwas mit dem Interrupt verhauen habe, sitze nun aber schon 3 halbe Tage an Datenblatt und allen möglichen Foren/Beispielcodes ohne dass der Groschen gefallen wäre.

    Hier der Code zu Beginn der main:
    Code:
    TCCR2B = (1 << CS22) | (1 << CS21) | (1 << CS20);
    TIMSK2 = (1 << TOIE2);
    set_sleep_mode(SLEEP_MODE_PWR_SAVE);
    uart_init();
    uart_puts_p(PSTR("VorDemSchlafen"));	 uart_putc('\n');
    machpause();
    uart_puts_p(PSTR("NachDemSchlafen")); uart_putc('\n');
    ...
    Hier der Interrupt für Timer2:
    Code:
    ISR(TIMER2_OVF_vect)
    {	
    	countTimer2++;
    }
    Und die Funktion:

    Code:
    void machpause(void)
    {
        cli();
        sleep_enable();
        sei();
    	sleep_cpu();
    	sleep_disable();
        sei();
    }
    Wenn er nun wiederkommt sendet er:

    VorDemSchlafenC!*k
    «+Ñ
    Und dann ist er tot

    Eigentlich müssten beim Timer2 bei 12MHz und dem Prescaler 1024 5,59s bis zum Überlauf vergehen.Aber nach dieser Zeit macht der nichts neues.Hab testweise auch schonmal länger gewartet, kam aber nichts.

    Hoffentlich kann mir jemand helfen...Bei Fragen oder Unklarheiten einfach melden...Bin am Verzweifeln...die Kiste sollte bis Weihnachten laufen und langsam wirds knapp mit testen...

    Danke schonmal im Vorraus

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Hallo,
    Ist der M168 nicht der große Bruder von M8 ?

    Ich arbeite oft und viel mit Power Save Mode, und denke Dein Problem liegt darin, daß der AVR garnicht mehr aufwacht, weil Power Save mit asynchronem Timer funktioniert.
    Der Timer muß von einem externem Taktgeber betrieben werden weil der interne Takt komplett abgeschaltet wird.

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  3. #3
    Hm...Laut Datenblatt läuft im PowerSave (im Gegensatz zum PowerDown) der Timer2 weiter. Kann aber sein dass das beim Mega8 anders ist.

    If Timer/Counter2 is enabled, it will keep running during sleep. The device can wake up from
    either Timer Overflow or Output Compare event from Timer/Counter2 if the corresponding
    Timer/Counter2 interrupt enable bits are set in TIMSK2, and the Global Interrupt Enable bit in
    SREG is set.

  4. #4
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    21.10.2005
    Ort
    Erde
    Alter
    50
    Beiträge
    1.195
    Ich habe jetzt auf die schnelle im Datenblatt nichts gefunden, aber kann es sein, dass es etwas dauert, bis die serielle schnittstelle wieder im Takt ist. Hast Du mal eine wartezeit (z.B. 100ms) nach dem aufwachen eingefügt?

  5. #5
    Hm.Das hat leider nichts geändert...Aber kann es eigentlich sein dass ich was bei den Interrupts falsch mache? Eigentlich müsste er so 5s rum Pause machen, aber es ist viel weniger. Die 2. Nachricht kommt quasi direkt nach der ersten.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •