Миландр

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

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




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: АЦП
СообщениеДобавлено: 2013-май-18 12:17 
Не в сети

Зарегистрирован: 2013-янв-09 07:06
Сообщения: 35
Посмотрел предварительный вариант спецификации. А в этом МК тоже не будет возможности автоматического запуска преобразования АЦП по событию таймера?
Еще было бы очень удобно, если для каждого канала АЦП мог быть свой регистр результата, как это сделано, например в TMS320F24xx, TMS320F28xx от TI, специализированных для электроприводов и систем управления.
А так если используется много аналоговых входов, то непросто обеспечить сохранение результата преобразования в нужное время


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: АЦП
СообщениеДобавлено: 2015-май-22 15:30 
Не в сети

Зарегистрирован: 2014-дек-29 15:53
Сообщения: 14
Здравствуйте.

Столкнулся с следующей проблемой:
не работает последовательное преобразование нескольких каналов.
Вернее работает, но последовательность каналов случайная. 1-2-3-0-2-1-1-3-2-2-0-3

Процессор 1986ВЕ3. Кварцевый резонатор 4Мгц. HCLK = 4*16 = 64MHz. ADC_CLK = 64/128=500kHz


void adc_cfg(void)
{
MDR_RST_CLK->PER_CLOCK |= RST_CLK_PCLK_ADC;
MDR_ADC->ADC1_STATUS |= ADC_STATUS_ECOIF_IE;
MDR_ADC->ADC1_CHSEL = 0x0000000F; // каналы 0-1-2-3

MDR_ADC->ADC1_CFG =
(15 << ADC1_CFG_DELAY_ADC_Pos) | //задержка перед началом преобразовани¤ при переборе
(7 << ADC1_CFG_DELAY_GO_Pos) | //задержка перед началом преобразовани¤
(0 << ADC1_CFG_TR_Pos) | //подстройка опоры 1,23в
(0 << ADC1_CFG_SEL_VREF_Pos) | //1,23в не выбрано дл¤ оцифровки
(0 << ADC1_CFG_SEL_TS_Pos) | //датчик температуры не выбран дл¤ оцифровки
(0 << ADC1_CFG_TS_BUF_EN_Pos) | //усилитель датчика температуры выключен
(0 << ADC1_CFG_TS_EN_Pos) | //датчик температуры выключен
(0 << ADC1_CFG_SYNC_CONVER_Pos) | //независимые каналы ацп
(7 << ADC1_CFG_REG_DIVCLK_Pos) | //делитель частоты
(0 << ADC1_CFG_M_REF_Pos) | //опора внутренн¤¤
(0 << ADC1_CFG_REG_RNGC_Pos) | //контроль уровней запрещен
(1 << ADC1_CFG_REG_CHCH_Pos) | //переключение используетс¤
(0 << ADC1_CFG_REG_CHS_Pos) | //номер канала
(1 << ADC1_CFG_REG_SAMPLE_Pos) | //не одиночное преобразование
(0 << ADC1_CFG_REG_CLKS_Pos) | //тактирование от кварца
(0 << ADC1_CFG_REG_GO_Pos) | //ацп не запушено
(0 << ADC1_CFG_REG_ADON_Pos); //ацп выключено

MDR_ADC->ADC1_CFG |= ADC1_CFG_REG_ADON;
MDR_ADC->ADC1_CFG |= ADC1_CFG_REG_SAMPLE;
//MDR_ADC->ADC1_CFG |= ADC1_CFG_REG_GO;
NVIC_EnableIRQ(ADC_IRQn);
}


void ADC_IRQHandler(void)
{
adc_channel = (MDR_ADC->ADC1_RESULT & ADC_RESULT_CHANNEL_Msk) >> ADC_RESULT_CHANNEL_Pos;
adc_result = (MDR_ADC->ADC1_RESULT & ADC_RESULT_Msk);
adc_ready = true;
MDR_ADC->ADC1_STATUS = 0;
}

Убрал последовательное преобразование.
В прерывании от АЦП изменяю номер канала, в прерывании от таймера запускаю АЦП.
После первого переключения каналов перестает работать, второе прерывание от АЦП не возникает

void SysTick_Handler(void)
{
MDR_ADC->ADC1_CFG |= ADC1_CFG_REG_GO;
}

void ADC_IRQHandler(void)
{
adc_channel = (MDR_ADC->ADC1_RESULT & ADC_RESULT_CHANNEL_Msk) >> ADC_RESULT_CHANNEL_Pos;
adc_result = (MDR_ADC->ADC1_RESULT & ADC_RESULT_Msk);
adc_ready = true;
MDR_ADC->ADC1_CFG &= ~ADC1_CFG_REG_ADON;
MDR_ADC->ADC1_CFG &= ~ADC2_CFG_REG_CHS_Msk;
MDR_ADC->ADC1_CFG |= (((adc_channel + 1) % 4) << ADC2_CFG_REG_CHS_Pos);
MDR_ADC->ADC1_CFG |= ADC1_CFG_REG_ADON;
MDR_ADC->ADC1_STATUS = 0;
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: АЦП
СообщениеДобавлено: 2015-май-25 13:30 
Не в сети

Зарегистрирован: 2009-май-29 16:09
Сообщения: 590
Откуда: АО "ПКК Миландр"
По моему если CfgREGCHCH=1 и CfgREGSAMPLE=1 то манипуляции с изменением канала и запуска GO бессмысленны, так как всё это делается автоматически и несинхронно с действиями прерывания. Поэтому и получается что один канал два раза подряд идёт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: АЦП
СообщениеДобавлено: 2015-май-26 10:09 
Не в сети

Зарегистрирован: 2014-дек-29 15:53
Сообщения: 14
В варианте с включением бита ГО я отключил автоматическое чередованеи каналов. Там все законно, не возникало второе и последующие прерывания от АЦП из-за обнуления регистра СТАТУС в прерывании от АЦП.

А вот с автоматическим чередованием по прежнему беда.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: АЦП
СообщениеДобавлено: 2015-май-27 13:11 
Не в сети

Зарегистрирован: 2014-дек-29 15:53
Сообщения: 14
Свой вопрос про АЦП я задавал в другой ветке. На следующий день зашел на форум, а вопроса моего нет. Нашел его здесь. Как он оказался здесь???


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

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


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

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


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

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