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

Last modified by Microchip on 2024/09/13 14:18

Configure Analog Comparator (AC) Peripheral Library (PLIB)

Configure AC Peripheral

Under the bottom left Device Resources pane, expand Harmony > Peripherals > AC.

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

AC to the AC module to the project graph

Figure 1

 

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

Figure 2

​​

  • 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

Figure 3

​​

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 tab

Figure 4

Back to Top


Configure AC Pin

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.

AC pin settings in Table View

Figure 5

Back to Top


Configure AC Clock for Low-Power

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 Configuration

Figure 6

Peripheral Clock Configuration

Figure 7

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.

Back to Top

Configure External Interrupt Controller (EIC) PLIB for Switch Button

In this section, we configure the switch button per the following USER_BUTTON design on the SAM D21 Xplained Pro Evaluation Kit.

Mechanical Buttons

Figure 8

Configure EIC Pin

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 Pin 32

Figure 9 

Back to Top


Configure EIC Peripheral

Select the Project Graph tab.

Under the bottom left Device Resources pane, expand Harmony > Peripherals > EIC.

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

adding the EIC module to the project graph

Figure 10

 

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 tab

Figure 11

 

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 Configuration

Figure 12

Peripheral Clock Configuration

Figure 13

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 from Sleep mode whenever the switch is pressed. This feature is used to measure the wake-up time from Sleep mode (Idle or Standby).  

Back to Top

Configure Event System (EVSYS) PLIB

The EVSYS is added by default to the project graph. Launch the Event System Configuration window by clicking Project Graph > Plugins > Event Configurator.

Project Graph tab Plugins drop-down

Figure 14

Once open, you will see the window in FIgure 15 on your screen:

Event Configurator window

Figure 15

Back to Top


In the Event Configurator window, in the Channel Configuration section, configure the EVSYS channel 0 :

  • 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.

In the Event Configurator window, in the User Configuration section, configure the EVSYS User:

  • Set the AC Start of Conversion (AC_SOC_0) as the event user.
Event Configurator window

Figure 16

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).

Back to Top