Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Strom sparen auf der Open-Maxi Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Dietmar, Homepage - 30.07.2017 23:08)
Dietmar nutzt:  Open-Micro, Open-Mini, Open-Midi, Open-Macro, Open-Maxi, Open-Mini M-Unit, Open-Mini Station
Hallo zusammen,

bekanntlich läßt sich die Open-Maxi mit Hilfe von SLOWMODE ON sehr elegant in den Stromsparmodus versetzen. Der Mikrocontroller arbeitet dann mit einem Takt von 1.25 MHz und benötigt in diesem Modus laut meinen Messungen nur 4.3 mA Strom. Das ist erheblich weniger als bei 20 MHz Takt, der mit 12.6 mA zu Buche schlägt. Mit dem PAUSE-Befehl (der intern als Assemblerbefehl WAIT realisiert ist) kann die Stromaufnahme noch auf 8.2 mA gesenkt werden. Mittels "SCI2BDH=0 : SCI2BDL=8" kann im SLOWMODE die Serielle Schnittstelle auf 9600 Baud eingestellt werden.

Um Größenordnungen besser ist allerdings der STOP-Modus. In diesem Modus benötigt der Controller nur wenige Hundert µA Strom. Die Open-Maxi unterstützt den sogenannten STOP3-Modus. Hier sind alle internen Schaltungen für schnelle Wiederherstellung konfiguriert. Die Zustände aller internen Register und Logik, RAM-Inhalte und die I/O-Pin-Zustände werden beibehalten. STOP3 kann durch Betätigen von RESET oder durch einen Interrupt aus einer der folgenden Quellen verlassen werden: Der Real-Time-Interrupt (RTI), LVD, ADC, IRQ oder der KBI.

Im folgenden Demoprogramm wird der Real-Time-Interrupt verwendet. Eine Assembler-Interruptroutine befindet sich im Real-Time-Interrupt und wird alle 8 ms aufgerufen. Getaktet wird diese Verzögerung mit Hilfe eines internen, nicht sehr genau arbeitenden 1-kHz-Oszillators. Sobald der Interrupt angefordert wird, verläßt der Controller den STOP-Modus. Wer das Demoprogramm startet, wird sich vielleicht wundern: Es scheint nämlich nichts zu machen. Denn wenn die Open-Maxi noch andere Befehle außer STOP ausführt, wird das Ergebnis der Strommessung erheblich verfälscht. Der Anwender muß also darauf achten, daß sich der Controller möglichst lange im STOP-Modus aufhält, ansonsten bringt dieses Stromsparkonzept nichts.

' ----------------------------------------------------------------------------
' Strom sparen mit Hilfe des STOP-Modus. Es wird der STOP3-Modus verwendet.
' In OCBASIC 1.11a für Open-Maxi von Dietmar Harlos am 30. Juli 2017.
' ----------------------------------------------------------------------------

' Der Controller benötigt während des STOP-Modus nur wenige Hundert µA Strom.
' Siehe auch AW60-Controllermanual MC9S08AW60.pdf im Kapitel "3.6 Stop Modes".

INCLUDE "omax.def"         'Definitionen für die Open-Maxi

DIM iRTIb BYTE             'Demo: RTI-Interrupts zählen

' --- Unsere eigene Assembler-Interruptroutine ------------------------------

' Die folgende Assembler-Interruptroutine befindet sich im Real-Time-
' Interrupt und wird alle 8 ms aufgerufen. Getaktet wird diese Verzögerung
' mit Hilfe eines internen 1-kHz-Oszillators.

' Die folgenden Subroutinen sollten sinnvollerweise in einer INCLUDE-Datei
' untergebracht werden.

' Das Schlüsselwort INLASM kennzeichnet die folgende PROCEDURE als
' Assemblerroutine (IAR). Dadurch, und daß sie unmittelbar am Anfang
' des Programms steht, wird sie zu einer IIAR, also zu einer Assembler-
' Interruptroutine, die bei einem aktivierten User-Interrupt gestartet wird.

PROCEDURE iiar_rti INLASM

! cbeqa #iRTI,isiRTI      'Falls kein Aufruf durch RTI-Interrupt,
! jmp iiar_rti_ende+2      'dann zur nächsten IIAR in der Kette.

#isiRTI
'! bset bRTIACK,SRTISC      'SRTISC liegt außerhalb der Zeropage
! lda SRTISC
! ora #%01000000          'Real-Time Interrupt Acknowledge (RTIACK)
! sta SRTISC
! inc iRTIb                'Zähler inkrementieren
! clc
! rts

END PROC

#iiar_rti_ende            'hier hinter folgt die nächste IIAR
                           '(sofern vorhanden)

' --- Das Hauptprogramm -----------------------------------------------------

#main

UIRRti=ON                  'Userroutine für Real-Time Interrupt aktivieren
POKE SRTISC,&b00010001     'Real-Time Interrupt aktivieren, 8 ms Delay

WHILE TRUE
  asmstop                  'maximal 8 ms lang dauert der STOP-Modus.
'  PAUSE 1
'  PRINT iRTIb              'wenn diese Befehle zusätzlich aktiviert werden,
'  PAUSE 1                  'zieht der Controller fast normal Strom.
WEND

End2Host=ON
END

' --- Subroutinen -----------------------------------------------------------

PROC asmstop INLASM
! stop
! rts
END PROC

Viel Spaß und Erfolg mit den OM-Mikrocontrollern!

Dietmar

Meine Homepage: http://ccintern.dharlos.de

 Antwort schreiben

Bisherige Antworten: