Подключение АЦП в 1986ВЕ91Т Миландр (внешний сигнал)

Отладочная плата с микроконтроллером 1986ВЕ91Т. Среда программирования - Keil. Появилась задача оцифровки внешнего напряжения, поступающего на ножку микроконтроллера, но АЦП показывает все время своё некорректное значение, возможно, что проблема в опорном напряжении, но у меня пока не получается верно настроить, чтобы правильно считывать, что не так в коде или в настройке? Также, когда отключаю внешнее напряжение, то он показывает то же значение.

Канал АЦП - 4, порт настроен на вход.

Листинг когда:

#include "math.h"
#include "MDR32FxQI_port.h"
#include "MDR32FxQI_rst_clk.h"
#include "MDR32FxQI_uart.h"
#include "MDR32FxQI_adc.h"

#define delay(T) for(i = T; i > 0; i--)


static int i;

static ADC_InitTypeDef ADC;
static ADCx_InitTypeDef ADC1;

static PORT_InitTypeDef PORTINIT;

void ADC_IRQHandler(void);
void ADCINIT(void);
void PORTADC(void);



void ADC_IRQHandler(void)
{
    uint32_t RESULTS;
    
    if(ADC_GetITStatus(ADC1_IT_END_OF_CONVERSION))
    {
        RESULTS = ADC1_GetResult();
        RESULTS &= 0x00FFF;
        
        
        NVIC_ClearPendingIRQ(ADC_IRQn);
    }
}

void PORTADC()
{
    RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTD, ENABLE);
    
    PORTINIT.PORT_Pin               = PORT_Pin_4;
    PORTINIT.PORT_OE                = PORT_OE_IN ;          
    PORTINIT.PORT_PULL_UP           = PORT_PULL_UP_OFF;    
    PORTINIT.PORT_PULL_DOWN         = PORT_PULL_DOWN_OFF;  
    PORTINIT.PORT_PD_SHM            = PORT_PD_SHM_OFF;     
    PORTINIT.PORT_GFEN              = PORT_GFEN_OFF;       
    PORTINIT.PORT_SPEED             = PORT_SPEED_MAXFAST;  
    PORTINIT.PORT_MODE              = PORT_MODE_ANALOG;    
    PORTINIT.PORT_FUNC              = PORT_FUNC_MAIN;       
    
    PORT_Init(MDR_PORTD, &PORTINIT);
}

void ADCINIT()
{
    PORTADC();
    
    RST_CLK_PCLKcmd(RST_CLK_PCLK_RST_CLK | RST_CLK_PCLK_ADC, ENABLE);
    
    RST_CLK_ADCclkSelection(RST_CLK_ADCclkCPU_C2);   
    RST_CLK_ADCclkPrescaler(RST_CLK_ADCclkDIV128);   
    RST_CLK_ADCclkEnable(ENABLE);   
    
    ADC_DeInit(); 
    ADC_StructInit(&ADC);
    ADCx_StructInit(&ADC1);
    
    ADC.ADC_SynchronousMode             = ADC_SyncMode_Independent;          
    ADC.ADC_StartDelay                  = 0;                                 
    ADC.ADC_TempSensor                  = ADC_TEMP_SENSOR_Disable;           
    ADC.ADC_TempSensorAmplifier         = ADC_TEMP_SENSOR_AMPLIFIER_Disable;  
    ADC.ADC_TempSensorConversion        = ADC_TEMP_SENSOR_CONVERSION_Disable; 
    ADC.ADC_IntVRefConversion           = ADC_VREF_CONVERSION_Disable;       
    ADC.ADC_IntVRefTrimming             = 1;                                 
        
    ADC_Init(&ADC);             
    
    
    ADC1.ADC_ClockSource                = ADC_CLOCK_SOURCE_ADC;             
    ADC1.ADC_SamplingMode               = ADC_SAMPLING_MODE_CYCLIC_CONV;     

    ADC1.ADC_ChannelSwitching           = ADC_CH_SWITCHING_Disable;          
    ADC1.ADC_ChannelNumber              = ADC_CH_ADC4;
    ADC1.ADC_LevelControl               = ADC_LEVEL_CONTROL_Disable;         
    ADC1.ADC_VRefSource                 = ADC_VREF_SOURCE_INTERNAL;          
    ADC1.ADC_IntVRefSource              = ADC_INT_VREF_SOURCE_INEXACT ;     
    ADC1.ADC_Prescaler                  = ADC_CLK_div_256;                   
    ADC1.ADC_DelayGo                    = 0x05;                              
    
    ADC1_Init(&ADC1); 
    
    NVIC_EnableIRQ(ADC_IRQn);
    NVIC_SetPriority(ADC_IRQn, 0);
    ADC1_ITConfig(ADC1_IT_END_OF_CONVERSION, ENABLE);
    ADC1_Cmd(ENABLE);           
}

int main(void)
{
    
    ADCINIT();

    while(1)
    {
        delay(0xFFFF);
        ADC1_Start();
    }
}

введите сюда описание изображения


Ответы (0 шт):