First commit
This commit is contained in:
50
drivers/battery_adc/battery_adc.c
Normal file
50
drivers/battery_adc/battery_adc.c
Normal file
@@ -0,0 +1,50 @@
|
||||
#include "battery_adc.h"
|
||||
#include <zephyr/drivers/adc.h>
|
||||
#include <zephyr/drivers/gpio.h>
|
||||
#include <zephyr/sys/printk.h>
|
||||
|
||||
#define USER_NODE DT_PATH(zephyr_user)
|
||||
static const struct gpio_dt_spec btt_meas_en = GPIO_DT_SPEC_GET(USER_NODE, btt_meas_en_gpios);
|
||||
static const struct adc_dt_spec adc_channel = ADC_DT_SPEC_GET(USER_NODE);
|
||||
|
||||
static uint32_t sample_buffer;
|
||||
|
||||
struct adc_sequence sequence = {
|
||||
.buffer = &sample_buffer,
|
||||
.buffer_size = sizeof(sample_buffer),
|
||||
//.calibrate = true
|
||||
};
|
||||
|
||||
int battery_adc_init(void) {
|
||||
if (!adc_is_ready_dt(&adc_channel)) {
|
||||
printk("ADC not ready\n");
|
||||
return -ENODEV;
|
||||
}
|
||||
gpio_pin_configure_dt(&btt_meas_en, GPIO_OUTPUT_INACTIVE);
|
||||
int ret = 0;
|
||||
ret = adc_channel_setup_dt(&adc_channel);
|
||||
if(ret){
|
||||
return ret;
|
||||
}
|
||||
ret = adc_sequence_init_dt(&adc_channel, &sequence);
|
||||
if(ret){
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
int battery_measure_mv(int32_t *mv_out) {
|
||||
int ret = 0;
|
||||
gpio_pin_set_dt(&btt_meas_en, 1); // enable measurement
|
||||
k_sleep(K_MSEC(5));
|
||||
|
||||
|
||||
ret = adc_read(adc_channel.dev, &sequence);
|
||||
if (ret) return ret;
|
||||
|
||||
ret = adc_raw_to_millivolts_dt(&adc_channel, &sample_buffer);
|
||||
*mv_out = (int)((float)sample_buffer*((270.0f+110.0f)/270.0f));
|
||||
|
||||
gpio_pin_set_dt(&btt_meas_en, 0); // disable measurement
|
||||
|
||||
return ret;
|
||||
}
|
||||
9
drivers/battery_adc/battery_adc.h
Normal file
9
drivers/battery_adc/battery_adc.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#ifndef BATTERY_ADC_H
|
||||
#define BATTERY_ADC_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
int battery_adc_init(void);
|
||||
int battery_measure_mv(int32_t *mv_out);
|
||||
|
||||
#endif // BATTERY_ADC_H
|
||||
Reference in New Issue
Block a user