-         

Ergebnis 1 bis 8 von 8

Thema: Frage zu "Idle" Befehl

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2005
    Beiträge
    25

    Frage zu "Idle" Befehl

    Anzeige

    Hallo,

    ist es möglich mit Hilfe des Idle Befehls (oder Powerdown) den Prozessor für eine bestimmte Zeit abzuschalten? Will heißen, er soll automatisch nach x min. wieder "aufwachen" und nicht durch ext. Signal wie Interrupt o.ä.

    Danke schon mal...

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    29
    Beiträge
    194
    Ich glaube du kannst den µC auch mittels Timer-Interrupt wieder "aufwecken" !

    Welchen Controller hast du denn?

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2005
    Beiträge
    25
    ich hab den Mega8. Er soll aller 60min eine Messung machen und sich dann wieder "schlafenlegen".

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.01.2005
    Ort
    Obertraun
    Alter
    29
    Beiträge
    194
    Im Datenblatt steht folgendes, falls du dass nicht eh schon gelesen hast:

    When the SM2..0 bits are written to 000, the SLEEP instruction makes the MCU enter
    Idle mode, stopping the CPU but allowing SPI, USART, Analog Comparator, ADC, Twowire
    Serial Interface, Timer/Counters, Watchdog, and the interrupt system to continue
    operating. This sleep mode basically halts clkCPU and clkFLASH, while allowing the other
    clocks to run.
    Idle mode enables the MCU to wake up from external triggered interrupts as well as
    internal ones like the Timer Overflow and USART Transmit Complete interrupts. If
    wake-up from the Analog Comparator interrupt is not required, the Analog Comparator
    can be powered down by setting the ACD bit in the Analog Comparator Control and Status
    Register – ACSR. This will reduce power consumption in Idle mode. If the ADC is
    enabled, a conversion starts automatically when this mode is entered.
    Also du brauchst wahrscheinlich einen Timer der in regelmäßigen Abständen einen Interrupt auslöst. Dann wirst du die Messung machen und den Controller wieder "schlafenlegen".
    60 min wirst du mit dem Timer nicht schaffen, also wirst du den Controller z.B.: im Sekundentakt aufwecken und eine Variable hochzählen müssen, damit du weißt wenn eine Stunde vergangen ist.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2005
    Beiträge
    25
    Hallo skillii,

    danke für deine Antwort. Trotzdem nicht so ganz das was mir vorschwebt.
    Den Controller jede sek "aufwecken" bringt sicher nicht die gewünschte Energieeinsparung (Batterie) die ich mir vorstelle.

    Trotzdem danke!

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Ich habe einen Powerdown-Modus mit dem Watchdog-Timer realisiert.
    Die längste Zeit die der Prozessor (Tiny13V) so "schlafen" kann sind 8 Sekunden. Bringt aber einiges an Stromersparniss. Der Leerlaufstrom bei Powerdown liegt im Mikroampere-Bereich.

    EDIT: Hab grad im Datenblatt vom Mega8 nachgesehen. Die maximale Powerdown-Zeit per Watchdog liegt bei etwas über 2 Sekunden.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    19.03.2005
    Beiträge
    25
    kannst Du mal den Code posten?

    danke

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    05.02.2006
    Ort
    München
    Beiträge
    111
    Bitteschön, hier ist das Programm.

    Beim Mega8 hat das WDTCR-Register des Watchdogs allerdings nicht die gleiche Funktionalität. Hier musst Du vermutlich noch das MCUCR-Register verwenden.
    Ich habe leider keinen Mega8 da sonst könnte ich es ausprobieren.

    Code:
    ' Prozessor in den Schlaf schicken und per Watchdog aufwecken
    ' µC: ATtiny13
    '
    '  ==================================================
    
    $regfile = "ATtiny13.DAT"
    $crystal = 128000
    Config Portb = &B00011000
    Portb = &B11100111
    Stop Adc
    Stop Ac
    
    'Watchdog definieren: 8 Sekunden, Interrupt auslösen, kein Reset
    Wdtcr = &B11110001
    
    'Interrupts freigeben
    Enable Interrupts
    
    
    Dim A As Byte
    
    Do
    Gosub Blinken
    Loop
    
    
    
    Blinken:
        For A = 1 To 100
            Portb.3 = 1
            Waitms 20
            Portb.3 = 0
            Waitms 20
        Next A
    
    'Watchdog-Timer zurücksetzen
    Reset Watchdog
    
    'Prozessor schlafen schicken
    Powerdown
    'Das Programm läuft nach Ablauf der WD-Zeit hier weiter
    
    Return
    
    End

Berechtigungen

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