Charles Andre
/
Register_level_analog
some success, still errors
Diff: main.cpp
- Revision:
- 102:780b4ecac614
- Parent:
- 100:ec006d6f3cb6
- Child:
- 108:b8d05666d95f
--- a/main.cpp Wed Oct 23 18:00:04 2019 +0100 +++ b/main.cpp Wed Nov 27 06:49:46 2019 +0000 @@ -6,28 +6,82 @@ #include "mbed.h" #include "platform/mbed_thread.h" #include "stats_report.h" +#include <AnalogIn.h> +#include <AnalogOut.h> -DigitalOut led1(LED1); +AnalogOut v_src(GPIO0); +AnalogIn therm(GPIO2); + +#define SLEEP_TIME 50 // (msec) +#define PRINT_AFTER_N_LOOPS 20 -#define SLEEP_TIME 500 // (msec) -#define PRINT_AFTER_N_LOOPS 20 +void ConfigureADC() +{ + GPIO_InitTypeDef gpioInit; + + __GPIOC_CLK_ENABLE(); + __ADC1_CLK_ENABLE(); + + gpioInit.Pin = GPIO_PIN_1; + gpioInit.Mode = GPIO_MODE_ANALOG; + gpioInit.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOC, &gpioInit); + + HAL_NVIC_SetPriority(ADC1_IRQn, 0, 0); + HAL_NVIC_EnableIRQ(ADC1_IRQn); + + ADC_ChannelConfTypeDef adcChannel; + + // error here + g_AdcHandle.Instance = ADC1; + + g_AdcHandle.Init.ClockPrescaler = ADC1_CLOCKPRESCALER_PCLK_DIV2; + g_AdcHandle.Init.Resolution = ADC1_RESOLUTION_12B; + g_AdcHandle.Init.ScanConvMode = DISABLE; + g_AdcHandle.Init.ContinuousConvMode = ENABLE; + g_AdcHandle.Init.DiscontinuousConvMode = DISABLE; + g_AdcHandle.Init.NbrOfDiscConversion = 0; + g_AdcHandle.Init.ExternalTrigConvEdge = ADC1_EXTERNALTRIGCONVEDGE_NONE; + g_AdcHandle.Init.ExternalTrigConv = ADC_EXTERNALTRIGCONV_T1_CC1; + g_AdcHandle.Init.DataAlign = ADC1_DATAALIGN_RIGHT; + g_AdcHandle.Init.NbrOfConversion = 1; + g_AdcHandle.Init.DMAContinuousRequests = ENABLE; + g_AdcHandle.Init.EOCSelection = DISABLE; + + HAL_ADC_Init(&g_AdcHandle); + + adcChannel.Channel = ADC_CHANNEL_11; + adcChannel.Rank = 1; + adcChannel.SamplingTime = ADC_SAMPLETIME_480CYCLES; + adcChannel.Offset = 0; + + if (HAL_ADC_ConfigChannel(&g_AdcHandle, &adcChannel) != HAL_OK) + { + asm("bkpt 255"); + } +} // main() runs in its own thread in the OS int main() { + GPIO_InitTypeDef GPIO_InitStructure; //Variable used to setup the GPIO pins SystemReport sys_state( SLEEP_TIME * PRINT_AFTER_N_LOOPS /* Loop delay time in ms */); - - int count = 0; + v_src = 1.0; /* Going to use a digital output as V_src */ + float max = 0; while (true) { - // Blink LED and wait 0.5 seconds - led1 = !led1; thread_sleep_for(SLEEP_TIME); - - if ((0 == count) || (PRINT_AFTER_N_LOOPS == count)) { - // Following the main thread wait, report on the current system status - sys_state.report_state(); - count = 0; + v_src = 1.0; + float raw_analog_val = 0; + + for(int i = 0; i < 10; i++) { + raw_analog_val += therm.read(); } - ++count; + raw_analog_val /= 10; + printf("Raw Analog Percentage 10 read AVG %f\n", raw_analog_val); + if (raw_analog_val > max) { + max = raw_analog_val; + printf("NEW MAX: %f\n", max); + thread_sleep_for(3000); + } } }