1.22.1 Analog to Digital Converter (ADCHS)
-
12-bit Analog to Digital Converter
-
18 Msps with up to six ADC circuits (five dedicated and one shared)
-
Up to 45 analog input
-
Can operate during Sleep and Idle modes
-
Multiple trigger sources
-
Six Digital Comparators and six Digital Filters
Using The Library
Interrupt mode:
#include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "definitions.h" // SYS function prototypes #define ADC_VREF (3.3f) #define ADC_MAX_COUNT (4095) uint16_t adc_count; float input_voltage; volatile bool result_ready = false; // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** void ADC_ResultHandler(ADCHS_CHANNEL_NUM channel, uintptr_t context) { /* Read the ADC result */ adc_count = ADCHS_ChannelResultGet(ADCHS_CH3); result_ready = true; } int main ( void ) { /* Initialize all modules */ SYS_Initialize ( NULL ); printf("\n\r---------------------------------------------------------"); printf("\n\r ADC Interrupt Mode Demo "); printf("\n\r---------------------------------------------------------\n\r"); ADCHS_CallbackRegister(ADCHS_CH3, ADC_ResultHandler, (uintptr_t)NULL); TMR3_Start(); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); /* Wait till ADC conversion result is available */ if (result_ready == true) { result_ready = false; input_voltage = (float)adc_count * ADC_VREF / ADC_MAX_COUNT; printf("ADC Count = 0x%03x, ADC Input Voltage = %d.%02d V \r", adc_count, (int)input_voltage, (int)((input_voltage - (int)input_voltage)*100.0)); } } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); }
Polling mode:
#include <stddef.h> // Defines NULL #include <stdbool.h> // Defines true #include <stdlib.h> // Defines EXIT_FAILURE #include "definitions.h" // SYS function prototypes #define ADC_VREF (3.3f) #define ADC_MAX_COUNT (4095) uint16_t adc_count; float input_voltage; // ***************************************************************************** // ***************************************************************************** // Section: Main Entry Point // ***************************************************************************** // ***************************************************************************** int main ( void ) { /* Initialize all modules */ SYS_Initialize ( NULL ); printf("\n\r---------------------------------------------------------"); printf("\n\r ADC Polled Mode Demo "); printf("\n\r---------------------------------------------------------\n\r"); TMR3_Start(); while ( true ) { /* Maintain state machines of all polled MPLAB Harmony modules. */ SYS_Tasks ( ); /* Wait till ADC conversion result is available */ while(!ADCHS_ChannelResultIsReady(ADCHS_CH3)) { }; /* Read the ADC result */ adc_count = ADCHS_ChannelResultGet(ADCHS_CH3); input_voltage = (float)adc_count * ADC_VREF / ADC_MAX_COUNT; printf("ADC Count = 0x%03x, ADC Input Voltage = %d.%02d V \r", adc_count, (int)input_voltage, (int)((input_voltage - (int)input_voltage)*100.0)); } /* Execution should not come here during normal operation */ return ( EXIT_FAILURE ); }
Library Interface
12-bit Analog to Digital Converter peripheral library provides the following interfaces:
Functions
Name | Description |
---|---|
ADCHS_Initialize | Initializes given instance of ADCHS peripheral |
ADCHS_ModulesEnable | Enables the ADC modules |
ADCHS_ModulesDisable | Disables the ADC modules |
ADCHS_ChannelResultInterruptEnable | Enables the ADC channel result data interrupt |
ADCHS_ChannelResultInterruptDisable | Disables the ADC channel result data interrupt |
ADCHS_ChannelEarlyInterruptEnable | Enables the ADC channel early result data interrupt |
ADCHS_ChannelEarlyInterruptDisable | Disables the ADC channel early result data interrupt |
ADCHS_ChannelConversionStart | Starts the ADC conversion of an analog channel |
ADCHS_GlobalEdgeConversionStart | Starts the ADC conversion of analog channels configured for global software edge trigger |
ADCHS_GlobalLevelConversionStart | Starts the ADC conversion of analog channels configured for global software level trigger |
ADCHS_GlobalLevelConversionStop | Stops the global software level trigger |
ADCHS_ChannelResultIsReady | Returns the status of the channel conversion |
ADCHS_EOSStatusGet | Returns the status of the end of scan interrupt flag |
ADCHS_ChannelResultGet | Reads the conversion result of the channel |
ADCHS_CallbackRegister | Registers the function to be called from interrupt |
ADCHS_EOSCallbackRegister | Registers the function to be called from end of scan interrupt |
ADCHS_DMASampleCountBaseAddrSet | Registers the user-defined RAM address at which the DMA engine will start saving the current count of output samples |
ADCHS_DMAResultBaseAddrSet | Registers the user-defined RAM address at which the DMA engine will start saving the converted data |
ADCHS_DMACallbackRegister | Registers the application event handler which is called when the DMA transfer is complete |
ADCHS_DMAStatusGet | Returns the DMA transfer status |
ADCHS_ComparatorxEnable | Enables comparator |
ADCHS_ComparatorxDisable | Disables comparator |
ADCHS_ComparatorxLimitSet | Sets lower and higher threshold for comparator |
ADCHS_ComparatorxEventModeSet | Sets the condition under which the comparator output becomes true |
ADCHS_ComparatorxAnalogInputIDGet | Identifies the analog input for which the comparator event is generated |
ADCHS_ComparatorxCallbackRegister | Registers the function to be called from the ADC comparator interrupt |
ADCHS_ComparatorxStatusGet | Returns the Comparator status |
ADCHS_FilterxIsReady | Returns the status of ADC filter |
ADCHS_FilterxDataGet | Returns the ADC filter data |
ADCHS_FilterxCallbackRegister | Registers the function to be called from the ADC filter ready interrupt |
Data types and constants
Name | Type | Description |
---|---|---|
ADCHS_MODULE_MASK | Enum | Identifies dedicated and shared ADC module mask |
ADCHS_CHANNEL_NUM | Enum | Identifies ADCHS inputs as analog channel number |
ADCHS_CMP_EVENT_MODE | Enum | Identifies ADCHS comparator event modes |
ADCHS_DMA_STATUS | Enum | Identifies ADCHS DMA status |
ADCHS_CALLBACK | Typedef | Defines the function pointer data type and function signature for the adchs peripheral callback function |
ADCHS_DC_CALLBACK | Typedef | Defines the function pointer data type and function signature for the adchs digital comparator interrupt callback function |
ADCHS_DF_CALLBACK | Typedef | Defines the function pointer data type and function signature for the adchs digital filter interrupt callback function |
ADCHS_DMA_CALLBACK | Typedef | Defines the function pointer data type and function signature for the adchs DMA interrupt callback function |
ADCHS_EOS_CALLBACK | Typedef | Defines the function pointer data type and function signature for the adchs end of scan interrupt callback function |
ADCHS_CALLBACK_OBJECT | Struct | ADCHS Callback structure |
ADCHS_EOS_CALLBACK_OBJECT | Struct | ADCHS Callback structure for End of Scan (EOS) interrupt |