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

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

Configure Analog-to-Digital Converter (ADC) Peripheral Library (PLIB)

Configure ADC Peripheral

Click on the Resource Management [MCC] tab. In the Device Resources, expand Harmony > Peripherals > ADC.

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

Available Components tab

Select the ADC1 Peripheral Library and configure it to sample and convert the light sensor input. The ADC is also configured to generate an interrupt (and thereby wake the CPU) when the ADC result is greater than a set Window Monitor Low Threshold value (3000 in this example).

adc schematic

  • When the light sensor is not covered (light is falling on the sensor), the phototransistor is turned on. The ADC input is ~0 V and the ADC RESULT register is close to 0x000.
  • When the light sensor is covered (light is not falling on the sensor), the phototransistor is turned off. The ADC input is ~3.3 V and the ADC RESULT register will be saturated (0xFFF).
  • The ADC RESULT register is compared with the Window Lower Threshold (WINLT), which is set to 3000.
  • When the light sensor is covered (ADC RESULT > WINLT), an ADC Window Monitor Interrupt is generated. This interrupt is used to bring the CPU out of Idle/Standby Sleep mode when you cover the light sensor.

adc configuration table

  • Select Prescaler: Peripheral clock divided by 2 divides the ADC input clock with the configured pre-scaler value and provides more sampling time (CLKADC = 1 MHz/2 = 500 kHz).
  • Select Reference: VDDANA.
  • Select Conversion Trigger: HW Event Trigger.
  • Start Event Input: Enabled on Rising Edge.
  • Select Positive Input: ADC AIN6 Pin (the light sensor is connected to AIN6 pin of ADC).
  • Select Result Resolution: 12-bit result (ADC conversion value range from 0 to 4096).
  • Open the Window Mode Configuration panel:
    • Select Window Monitor mode: Result > WINLT. A Window Monitor Interrupt is generated when the ADC result is greater than the configured WINLT value.
    • Window Upper Threshold: Sets the upper threshold of the window comparator. It is set to 0 as the ADC resolution is 12-bit.
    • Window Lower Threshold: Sets the lower threshold of the window comparator. It is set to 3000. This means that the ADC Window Monitor Interrupt will be generated when the ADC result is greater than 3000. This value is decided based on the light sensor voltage when we cover the light sensor; it approximately generates 2.2 V. Hence, the threshold is set near to this voltage.
    • Enable Window Monitor Interrupt: A Window Monitor Interrupt is generated when the ADC result is greater than the configured WINLT.
  • Open the Sleep Mode Configuration panel:
    • Enable Run During Standby.
    • Enable On Demand Control.

adc configuration options

The Conversion Time value 26.0 uS (shown in the previous image) is after the ADC clock configured.


Back to top

Configure ADC Pin

In the MPLAB® Code Configurator (MCC), select the Pin Settings tab and then scroll-down to PORT pin PB04 in Pin ID column and configure this pin as ADC_AIN6.

adc pin settings

Configure ADC Clock for Low-Power

In the MCC, select the Clock Easy View tab and configure the ADC Clock by opening the Peripheral Clock Configuration tab by clicking on the button in the Peripheral Clock Configuration.

peripheral clock configuration

adc clock configuration

The ADC peripheral clock is by default set to GCLK1. However, to benefit from the SAM E54 clock tree, the ADC peripheral clock is fed by GCLK2 to run at 1 MHz. Running a slower clock on the ADC reduces the power consumption during Sleep mode.

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


Back to top

Configure External Interrupt Controller (EIC) PLIB for Switch Button

In this step, the switch button will be configured as per the following USER_BUTTON design schematic on the SAM E54 Xplained Ultra Evaluation Kit.

user button schematic

Configure EIC Pin

In the MCC, select the Pin Settings tab and then scroll down to 122 in the Pin Number column and configure the PORT pin PB31 as an external interrupt pin for switch functionality as shown. Internal pull-up is enabled to avoid false edge detection as there is no external pull-up on the SAM E54 Xplained Pro Evaluation Kit.

eic pin configuration


Back to top

Configure EIC Peripheral

Select the Project Graph tab.

Click on the Resource Management [MCC] tab. In the Device Resources, expand Harmony > Peripherals > EIC.

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

eic peripheral adding

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

eic configuration setup

In the Peripheral Clock Configuration, EIC is by default connected to the GCLK1. However, the EIC clock configuration is set to run at 32 kHz using the OSCULP32K source clock directly, as defined in the Configuration Options of the EIC peripheral.

This completes the configuration of the EIC PLIB. The EIC is configured to produce an interrupt that will wake up the device from Sleep mode whenever the switch is pressed. The EIC is configured to run on the internal low power 32 kHz clock regardless of its configuration in the Peripheral Clock Configuration.


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 on Project graph > Plugins > Event Configurator.

open evsys configuration

Once open, you will see following window on your screen:

event 0 easy view not configured

Configure the EVSYS channel 0 on the Event System Manager window:

  • Add the Event System channel and user by clicking the Add Channel and Add User buttons.

  • 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 ADC Start of Conversion (ADC_START) as the event user.

event 0 easy view

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 ADC in this application example).

Back to top