Миландр

Ключевым подразделением нашей компании является Центр Проектирования интегральных микросхем
Текущее время: 2017-ноя-20 16:53

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Померить напряжение на входе ADC1
СообщениеДобавлено: 2016-авг-19 13:33 
Не в сети

Зарегистрирован: 2016-июл-20 08:35
Сообщения: 1
Здравствуйте! Долго лазил по форуму и не нашел того, чего искал.
Суть: хочу померить напряжение на входе ADC1. Нашел в стандартное библиотеке ADC/AnalogWatchdog/main этот код:

Код:
RST_CLK_DeInit();

  RST_CLK_HSEconfig(RST_CLK_HSE_ON);
  if(RST_CLK_HSEstatus() == ERROR)
     while(1);

  RST_CLK_CPU_PLLconfig(RST_CLK_CPU_PLLsrcHSEdiv1, RST_CLK_CPU_PLLmul4);
  RST_CLK_CPU_PLLcmd(ENABLE);

  if(RST_CLK_CPU_PLLstatus() == ERROR)
     while(1);

  RST_CLK_CPUclkPrescaler(RST_CLK_CPUclkDIV1);
  RST_CLK_CPU_PLLuse(ENABLE);
  RST_CLK_CPUclkSelection(RST_CLK_CPUclkCPU_C3);

  /* Enable peripheral clocks --------------------------------------------------*/
  RST_CLK_PCLKcmd((RST_CLK_PCLK_RST_CLK | RST_CLK_PCLK_ADC | RST_CLK_PCLK_PORTA),ENABLE);
  RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTB, ENABLE);

  /* Init NVIC */
  SCB->AIRCR = 0x05FA0000 | ((uint32_t)0x500);
  /* Disable all interrupt */
  NVIC->ICPR[0] = 0xFFFFFFFF;
  NVIC->ICER[0] = 0xFFFFFFFF;

  /* Enable ADC interrupt  */
  NVIC->ISER[0] = (1<<ADC_IRQn);

  /* Reset PORTD settings */
  PORT_DeInit(MDR_PORTA);

  /* Configure ADC pin: ADC */
  /* Configure PORTB pin 8 */
  PORT_InitStructure.PORT_Pin   = PORT_Pin_8;
  PORT_InitStructure.PORT_OE    = PORT_OE_IN;
  PORT_InitStructure.PORT_MODE  = PORT_MODE_ANALOG;
  PORT_Init(MDR_PORTB, &PORT_InitStructure);

  /* ADC Configuration */
  /* Reset all ADC settings */
  ADC_DeInit();
  ADC_StructInit(&sADC);
  ADC_Init (&sADC);

  ADCx_StructInit (&sADCx);
  sADCx.ADC_ClockSource      = ADC_CLOCK_SOURCE_CPU;
  sADCx.ADC_SamplingMode     = ADC_SAMPLING_MODE_CICLIC_CONV;
  sADCx.ADC_ChannelSwitching = ADC_CH_SWITCHING_Disable;
  sADCx.ADC_ChannelNumber    = ADC_CH_ADC7;
  sADCx.ADC_Channels         = 0;
  sADCx.ADC_LevelControl     = ADC_LEVEL_CONTROL_Enable;
  sADCx.ADC_LowLevel         = L_Level;
  sADCx.ADC_HighLevel        = H_Level;
  sADCx.ADC_VRefSource       = ADC_VREF_SOURCE_INTERNAL;
  sADCx.ADC_IntVRefSource    = ADC_INT_VREF_SOURCE_INEXACT;
  sADCx.ADC_Prescaler        = ADC_CLK_div_32768;
  sADCx.ADC_DelayGo          = 0x7;
  ADC1_Init (&sADCx);

  /* Enable ADC1 EOCIF and AWOIFEN interupts */
  ADC1_ITConfig((ADCx_IT_END_OF_CONVERSION  | ADCx_IT_OUT_OF_RANGE), ENABLE);

  /* Init display */
  Display_Init();

  /* ADC1 enable */
  ADC1_Cmd (ENABLE);

  while(1)
{
MDR_ADC->ADC1_CFG |= 0x02; // ADC Start
while(!(MDR_ADC->ADC1_STATUS & 0x04)) __NOP();
      adc_result=MDR_ADC->ADC1_RESULT&0x0FFF;
adc_result_volt = 3.3*adc_result/0x0FFF;
}


и в конце подсчет соответственно вставил я.

Проблема: я подключаю к ADC1 батарейку 3v, подключал и 1,5v, а значение не менялось. Что с батарейками, что без них: результат - от 1,16v до 1,92v.
Вопрос:что не так, подскажите?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2016-авг-22 08:50 
Не в сети

Зарегистрирован: 2009-июл-21 14:13
Сообщения: 1010
Откуда: Тула
Во-первых надо указать какой контроллер и писать в соответствующую ему ветку.
Во-вторых надо проверить и убедиться что восьмая ножка порта В соответствует седьмому каналу АЦП.
В-третьих, желательно указать отладочная ли это плата и какие перемычки на ней как установлены.

_________________
сочувствующий…


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 2016-авг-25 12:14 
Не в сети

Зарегистрирован: 2010-авг-30 19:12
Сообщения: 379
Цитата:
результат - от 1,16v до 1,92v

Это скорее всего из-за притяжек. Если притяжки включены и в питание и в землю, то где-то в районе средней точки и результат.

_________________
О сколько нам открытий чудных
Готовит просвященья дух,
И опыт - сын ошибок трудных ... (Пушкин)

Пергаменты не утоляют жажду ("Фауст",Гете)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB