Search Results for

    Show / Hide Table of Contents

    Power Management


    TinyCLR OS supports multiple power-saving modes.

    Idle

    The system enters this state whenever it is idle, such as when waiting on events and there are no running threads. This is automatic and they user is not required to take any action.

    Slow Clock Speed

    The system can operate at half speed, saving about 40% power consumption. The system can switch speed (with a required soft reset) but it can optionally persist the slow clock.

    var PersistClock = false;
    if (Power.GetSystemClock() == SystemClock.High) {
        Power.SetSystemClock(SystemClock.Low, PersistClock);
        Power.Reset();
    }
    

    Switch back to full speed (only if "PersistClock" was false):

    if (Power.GetSystemClock() == SystemClock.Low) {
        Power.SetSystemClock(SystemClock.High, false);
        Power.Reset();
    }
    

    Calling Power.Reset() will retain the set clock speed but hardware reset or power cycle will revert to the default state.

    Sleep

    In this mode, most of the system features are disabled. A GPIO or RTC interrupt can be used to wake the system and resume operations.

    Note

    Don't forget to configure the interrupt and interrupt handler for the pin that will be used to wake up from Sleep.

    Tip

    Needed NuGets: GHIElectronics.TinyCLR.Core, GHIElectronics.TinyCLR.Devices.Gpio, GHIElectronics.TinyCLR.Native, GHIElectronics.TinyCLR.Pins

    var ldrButton = GpioController.GetDefault().OpenPin(SC20100.GpioPin.PE3);
    ldrButton.SetDriveMode(GpioPinDriveMode.InputPullUp);
    ldrButton.ValueChanged += ldrButton_ValueChanged;
    
    Debug.WriteLine("System is going to sleep...");
    Power.Sleep();
    Debug.WriteLine("This will print after system wakeup");
    
    // An event is needed to activate the interrupts internally
    private static void ldrButton_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs e) { }
    

    To sleep for a specific time, using RTC:

    Power.Sleep(DateTime.Now.AddSeconds(90)); //Will wake up after 90 seconds.
    

    Shutdown

    In this mode the system completely shuts down. It can only be awakened by reset, power cycle, RTC, or by toggling the WKUP pin, which will also reset the system. When Shutdown is used the system is turned completely off, internal pull-up resistors are also disabled. Adding pull-up or pull-down resistor on WKUP pin is required.

    Note

    Waking from Shutdown mode always resets the system. Your application will start over, it will not resume where it left off.

    Tip

    Needed NuGets: GHIElectronics.TinyCLR.Core, GHIElectronics.TinyCLR.Devices.Gpio, GHIElectronics.TinyCLR.Native, and GHIElectronics.TinyCLR.Pins

    The following code shuts down the system to only wake up using WKUP pin.

    Power.Shutdown(true, DateTime.MaxValue); 
    

    By default, a rising edge on WKUP pin is needed to wake the system up. The system also allows for using a falling edge instead.

    Power.WakeupEdge = WakeupEdge.Falling;
    

    To shutdown for a specific time:

    Power.Shutdown(false, DateTime.Now.AddSeconds(90); //Will wake up after 90 seconds.
                                                       //WKUP pin has no effect.
    

    To shutdown for a specific time or when the WKUP pin changes state (whichever comes first):

    Power.Shutdown(true, DateTime.Now.AddSeconds(90); //Will wake up after 90 seconds or
                                                      //when WKUP is pressed.
    

    On-board Ethernet

    Some modules include an on-board Ethernet PHY. This can be disabled by setting a specific GPIO to low. Below are the pin numbers.

    Module Pin
    SCM20260E/D PG3
    SCM20100E PD8

    Software Reset

    TinyCLR OS provides two reset modes within your application:

    Reset Application

    This command allows to reset your application:

    GHIElectronics.TinyCLR.Native.Power.Reset();
    

    Reset to Bootloader mode

    The command below will boot the device in GHI Bootloader mode:

    GHIElectronics.TinyCLR.Native.Power.Reset(false);
    

    Reset Source

    The cause of the previous reset can be found through ResetSource. This is useful to determine if, for example, a watchdog or was the reason for the reset.

    • Improve this Doc
    ☀
    ☾
    In This Article

    Back to top

    Back to top Copyright © 2021 GHI Electronics, LLC
    Generated by DocFX