//********************** #include //********** #define ADC_DEVICE_NAME DT_LABEL(DT_INST(0, nordic_nrf_saadc)) #define ADC_RESOLUTION 10 #define ADC_GAIN ADC_GAIN_1_6 #define ADC_REFERENCE ADC_REF_INTERNAL #define ADC_ACQUISITION_TIME ADC_ACQ_TIME(ADC_ACQ_TIME_MICROSECONDS, 10) #define ADC_1ST_CHANNEL_ID 0 #define ADC_1ST_CHANNEL_INPUT NRF_SAADC_INPUT_AIN0 #define ADC_2ND_CHANNEL_ID 1 #define ADC_2ND_CHANNEL_INPUT NRF_SAADC_INPUT_AIN1 #define BUFFER_SIZE 2 int err; static int p_sample_buffer[BUFFER_SIZE]; const struct device *adc_dev; static const struct adc_channel_cfg m_1st_channel_cfg = { .gain = ADC_GAIN, .reference = ADC_REFERENCE, .acquisition_time = ADC_ACQUISITION_TIME, .channel_id = ADC_1ST_CHANNEL_ID, #if defined(CONFIG_ADC_CONFIGURABLE_INPUTS) .input_positive = ADC_1ST_CHANNEL_INPUT, #endif }; static const struct adc_channel_cfg m_2nd_channel_cfg = { .gain = ADC_GAIN, .reference = ADC_REFERENCE, .acquisition_time = ADC_ACQUISITION_TIME, .channel_id = ADC_2ND_CHANNEL_ID, #if defined(CONFIG_ADC_CONFIGURABLE_INPUTS) .input_positive = ADC_2ND_CHANNEL_INPUT, #endif }; static int adc_sample1(void) { int ret; const struct adc_sequence sequence = { .channels = BIT(ADC_1ST_CHANNEL_ID), .buffer = p_sample_buffer, .buffer_size = sizeof(p_sample_buffer), .resolution = ADC_RESOLUTION, }; if (!adc_dev) { return -1; } ret = adc_read(adc_dev, &sequence); if (ret) { // printk("adc_read() failed with code %d\n", ret); } for (int i = 0; i < BUFFER_SIZE; i++) { // printk("ADC raw value: %d\n", p_sample_buffer[i]); } return ret; } static int adc_sample2(void) { int ret; const struct adc_sequence sequence = { .channels = BIT(ADC_2ND_CHANNEL_ID), .buffer = p_sample_buffer, .buffer_size = sizeof(p_sample_buffer), .resolution = ADC_RESOLUTION, }; if (!adc_dev) { return -1; } ret = adc_read(adc_dev, &sequence); if (ret) { // printk("adc_read() failed with code %d\n", ret); } for (int i = 0; i < BUFFER_SIZE; i++) { // printk("ADC raw value: %d\n", p_sample_buffer[i]); } return ret; } //**************** void my_work_handler(struct k_work *work) {int err;unsigned int k; /* do the processing that needs to be done periodically */ //********** AIN0 Sample part ************** err = adc_sample1(); if (err) { // printk("Error in adc sampling: %d\n", err); } var1 = p_sample_buffer[0]; err = adc_sample2(); if (err) { // printk("Error in adc sampling: %d\n", err); } var2 = p_sample_buffer[0];// should it be index 0 or 1 ????? } K_WORK_DEFINE(my_work, my_work_handler); void my_timer_handler(struct k_timer *dummy) { k_work_submit(&my_work); } K_TIMER_DEFINE(my_timer, my_timer_handler, NULL); //******************************************************** void main(){ //ADC setup adc_dev = device_get_binding(ADC_DEVICE_NAME); if (!adc_dev) { printk("device_get_binding ADC (=%s) failed\n", ADC_DEVICE_NAME); } err = adc_channel_setup(adc_dev, &m_1st_channel_cfg); if (err) { printk("Error in adc AIN0 setup: %d\n", err); } err = adc_channel_setup(adc_dev, &m_2nd_channel_cfg); if (err) { printk("Error in adc AIN1 setup: %d\n", err); } #if defined (CONFIG_BOARD_BMS_NRF5340_CPUAPP) NRF_SAADC->TASKS_CALIBRATEOFFSET = 1; #else #error "Choose supported board or add new board for the application" #endif k_timer_start(&my_timer, K_SECONDS(4), K_SECONDS(30)); while(1) { // do something } }