Low Power Application on SAM D21 Using Harmony v3 Peripheral Libraries: Step 3

Last modified by Microchip on 2023/11/09 09:07

Configure Analog Comparator (AC) Peripheral Library (PLIB)

Configure AC Peripheral

Under the Available Components tab, expand Peripherals > AC.

Select and double-click on AC to add the AC module to the project graph.

Selecting and double-clicking on AC to add the AC module to the project graph

Select the AC Peripheral Library and configure it to compare the light sensor input with reference to the VDD Scaler voltage. The AC is also configured to generate an interrupt (and thereby wake the CPU) when the AC comparator output is rising.

Selecting the AC Peripheral Library​​

  • When the light sensor is not covered (light is falling on the sensor), the phototransistor is turned on. The AC input is ~0 V and there is no change in AC output.
  • When the light sensor is covered (light is not falling on the sensor), the phototransistor is turned off. The AC input is ~3.3 V and rises on AC output.
  • The AC analog input will be compared with the VDD Scaler voltage (Analog input/Light Sensor output as positive input and VDD Scaler as negative input).
  • When the light sensor is covered (AC Input > VDD Scaler), an AC Comparator Interrupt is generated. This interrupt is used to bring the CPU out of Idle/Standby Sleep mode when you cover the light sensor with your hand.

a. Select Enable Run in Standby.

b. Enable Comparator 0 Settings and configure the Comparator 0 settings.

c. Enable Comparator Interrupt Enable.

d. Select Enable Single Shot Mode.

e. Verify Positive Input Mux Selection is set as I/O Pin 0 (externally, the light sensor analog output (Ext1 pin 3) is connected to AIN0 pin (Ext1 pin 17) of AC).

f. Configure Negative Input Mux selection as VDD scaler. Set the scaling factor for VDD as 15. Based on the V scale calculation, the Vscale value is (3.3 / 4)V, i.e. 0.825V.

V scale calculation​​

g. Set Output Edge Type as The output of COMPn is not routed to the COMPn I/O port, as we don't need comparator output on the pin.

h. Set Interrupt Selection as Interrupt on comparator output rising. AC will generate an interrupt only when we cover the light sensor.

i. Enable Event Input to start the conversion on a hardware event trigger (In this example, RTC timeout is the event trigger).

Configuration Options

Configure AC Pin

In the MPLAB® Harmony Configurator (MHC), select the Pin Settings tab and then scroll down to PORT pin PA04 in the Pin ID column and configure this pin as AC_AIN0.

Pin Settings

Configure AC Clock for Low-Power

In MHC, select the Clock Easy View tab and configure the AC Clock by clicking on the Peripheral Clock Configuration button to open the Peripheral Clock Configuration tab.

Peripheral Clock ConfigurationPeripheral Clock Configuration

The AC peripheral clock is by default set to GCLK0. However, to benefit from the SAM D21 clock tree, the AC peripheral clock is fed by GCLK1 to run at 1 kHz. Running a slower clock on the AC reduces the power consumption during Sleep mode.

This completes the configuration of the AC PLIB. The AC is configured to start the conversion on a hardware event trigger and generate an interrupt if the comparator value is higher than a defined Vscaler value.


Configure External Interrupt Controller (EIC) PLIB for Switch Button

In this step, we configure the switch button per the following USER_BUTTON design on the SAM D21 Xplained Pro Evaluation Kit.
Mechanical ButtonsConfigure EIC Pin

In MHC, select the Pin Settings tab and then scroll down to 32 in the Pin Number column.

Configure the PORT pin PA15 as an external interrupt pin for switch functionality. The internal pull-up is enabled to avoid false edge detection as there is no external pull-up on the SAM D21 Xplained Pro Evaluation Kit.

Pin Settings tab

Configure EIC Peripheral

Select the Project Graph tab.
Under the Available Components tab, expand Peripherals > EIC.

Select and double-click on EIC to add the EIC module to the project.

Project Graph

Configure the EIC peripheral to generate an interrupt every time the user presses the switch SW0, and enable filter functionality to avoid electrical noise on the switch pin.

Configuration Options

In MHC, select the Clock Easy View tab and configure the EIC Clock by clicking the Peripheral Clock Configuration button to open the Peripheral Clock Configuration tab.

Peripheral Clock ConfigurationPeripheral Clock Configuration

The EIC peripheral clock is by default set to GCLK0. However, to benefit from the SAM D21 clock tree, the EIC peripheral clock is fed by GCLK1 to run at 1 kHz. Running a slower clock on the EIC to overcome the switch debounce and electrical noise on the EIC pin also reduces the power consumption during Sleep mode.

This completes the configuration of the EIC PLIB. The EIC is configured to produce an interrupt that will wake the device up from Sleep mode whenever the switch is pressed. This feature is used to measure the wake-up time from Sleep mode (Idle or Standby).  


Configure Event System (EVSYS) PLIB
The EVSYS is added by default to the project graph. Launch the Event System Configuration window by clicking on Tools > Event System Configuration.

Event System Configuration windowOnce open, you will see the following window on your screen:

Event System Manager window

Configure the EVSYS channel 0 on the Event System Manager window:
  • Set the Real-Time Clock Compare 0 (RTC_CMP_0) event as the event generator. The event is configured to appear asynchronously and to run in Standby mode with the on-demand feature enabled
  • Set the AC Start of Conversion (AC_SOC_0) as the event user.

Event System Manager window

Make sure that the status of the event and user (Event Status and User Ready) is green. If it is red, verify that the Event Output and Event Input are enabled in the respective PLIB configuration (RTC and AC for this application example).