Charles Andre
/
Register_level_analog
some success, still errors
main.cpp
- Committer:
- candre97
- Date:
- 2019-11-27
- Revision:
- 102:780b4ecac614
- Parent:
- 100:ec006d6f3cb6
- Child:
- 108:b8d05666d95f
File content as of revision 102:780b4ecac614:
/* mbed Microcontroller Library * Copyright (c) 2018 ARM Limited * SPDX-License-Identifier: Apache-2.0 */ #include "mbed.h" #include "platform/mbed_thread.h" #include "stats_report.h" #include <AnalogIn.h> #include <AnalogOut.h> AnalogOut v_src(GPIO0); AnalogIn therm(GPIO2); #define SLEEP_TIME 50 // (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 */); v_src = 1.0; /* Going to use a digital output as V_src */ float max = 0; while (true) { thread_sleep_for(SLEEP_TIME); v_src = 1.0; float raw_analog_val = 0; for(int i = 0; i < 10; i++) { raw_analog_val += therm.read(); } 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); } } }