Hi,
I am a new programmer to the NRF51 and I was wondering if someone would look at my code. I am trying to program the NRF51 to take ADC samples at a frequency of 1 kHz. My code also doesn't seem to produce any values when I run it on putty and the Board leds do not light up as expected which makes me believe something in my settings is wrong.
Thanks.
#include "RTE_Components.h" // Component selection
#include <stdbool.h>
#include <stdint.h>
#include "nrf_adc.h"
#include "nrf.h"
#include "nrf_gpio.h"
#include "nordic_common.h"
#include "nrf_delay.h"
#include "app_error.h"
#include "app_timer.h"
#include "app_util_platform.h"
#include "boards.h"
#include "bsp.h"
#include "nrf_drv_adc.h"
#include "nrf_drv_config.h"
#define ADC_BUFFER_SIZE 10 //ADC Buffer - useful for sending large datapackets
#define APP_TIMER_PRESCALER 0 //Prescalar Value: 2^24 / (1+Prescalar)
#define APP_TIMER_MAX_TIMERS 2
#define APP_TIMER_OP_QUEUE_SIZE 4
#define ADC_SAMPLING_INTERVAL APP_TIMER_TICKS(1, APP_TIMER_PRESCALER) //ADC Sampling at 1 ms
static nrf_adc_value_t adc_buffer[ADC_BUFFER_SIZE]; /**< ADC buffer. */
static nrf_drv_adc_channel_t m_channel_config = NRF_DRV_ADC_DEFAULT_CHANNEL(NRF_ADC_CONFIG_INPUT_0);
static void adc_event_handler(nrf_drv_adc_evt_t const * p_event) //Event Handler for ADC triggering
{
if (p_event->type == NRF_DRV_ADC_EVT_DONE)
{
uint32_t i;
for (i = 0; i < p_event->data.done.size; i++)
{
NRF_LOG_PRINTF("Current sample value: %d\r\n", p_event->data.done.p_buffer[i]);
}
}
}
//Initialize ADC
static void adc_init()
{
ret_code_t ret_code;
nrf_drv_adc_config_t config = NRF_DRV_ADC_DEFAULT_CONFIG;
ret_code = nrf_drv_adc_init(&config, adc_event_handler);
nrf_drv_adc_channel_enable(&m_channel_config);
}
//Initialize Timer
static void timer_init()
{
APP_TIMER_INIT(APP_TIMER_PRESCALER, APP_TIMER_OP_QUEUE_SIZE, false);
}
//MAIN Function
int main(void)
{
//Initialize the Application Timer Module
timer_init();
//Initialize ADC
adc_init();
//Sampling
while (true)
{
uint32_t i;
for (i = 0; i < ADC_BUFFER_SIZE; i++)
{
// manually trigger ADC conversion
nrf_drv_adc_sample();
// enter into sleep mode
__SEV();
__WFE();
__WFE();
nrf_delay_ms(1);
LEDS_INVERT(BSP_LED_0_MASK);
}
}
}