ADC Device Driver
This document describes use of the generic ADC device driver in Nano-RK. For a running example please refer to the basic_adc project.
Adding the Driver to a Project
When adding the sensor driver to a project make sure to do the following:
- Update NRK_MAX_DRIVER_CNT in nrk_cfg.h
- Add the driver source to the local makefile
- SRC += $(ROOT_DIR)/src/drivers/platform/$(PLATFORM_TYPE)/source/adc_driver.c
- Register the driver before nrk_start() is called
-
// Register the ADC device driver val=nrk_register_driver( &dev_manager_adc,ADC_DEV_MANAGER); if(val==NRK_ERROR) nrk_kprintf( PSTR("Failed to load my ADC driver\r\n") );
-
- Make sure ADC_DEV_MANAGER is uniquely defined in /src/drivers/include/nrk_driver_list.h
- Make sure to add the following includes to your source
- #include <nrk_driver_list.h>
- #include <nrk_driver.h>
- #include <adc_driver.h>
Opening the Device
The following sample of code will open an instance of the driver. This will initialize the ADC on the processor.
int8_t fd;
...
fd=nrk_open(ADC_DEV_MANAGER,READ);
if(fd==NRK_ERROR) nrk_kprintf(PSTR("Failed to open adc driver\r\n"));
Selecting an ADC Channel
Using nrk_set_status( device, value, key) allows the application to configure which sensor value will be read by the nrk_read() command. device is the descriptor returned by nrk_open(). value is the command parameter you wish to set, in this case ADC_CHAN. key is the value of the channel you wish to select and can take the following values:
- uint8_t with value 0-7
- CHAN_0
- CHAN_1
- CHAN_2
- CHAN_3
- CHAN_4
- CHAN_5
- CHAN_6
- CHAN_7
val=nrk_set_status(fd,ADC_CHAN,5);
Reading the ADC
After a channel has been selected, the value can be read using the nrk_read(device,uint8_t *buf, uint8_t size) function. device is the device file descriptor returned by nrk_open(). buf is a pointer to the memory where the driver will write the value. size is the max size of the buffer (in this case 1 byte). Below is an example of reading the adc:
uint8_t buf; ... val=nrk_read(fd,&buf,1); printf( "ADC value=%d",buf);
Closing the Device
Closing the device is potentially important for saving on power and allowing multiple tasks to access the resource.
nrk_close(fd);
