Easyelectronics.ru

Электроника для всех
Текущее время: 23 окт 2018, 23:35

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: ADC10- многоканальный режим без использования DTC=fail
СообщениеДобавлено: 29 ноя 2015, 22:16 
Только пришел

Зарегистрирован: 23 дек 2012, 12:45
Сообщения: 11
хочу запустить ADC10 в g2553 в многоканальном (последовательном) однократном режиме. настраиваю.

#define CNT 3
unsigned int adc[CNT];
int ready_channel;


void ADC_Init(void)
{
ADC10CTL0 = MSC | // выборка запускается по ADC10SC, каждая последующая- автоматически.
ADC10SHT_0 | // выборка занимает 4 клока АЦП
ADC10ON | // АЦП включен
ADC10IE; // прерывания разрешены
ADC10CTL1 = INCH_5 | // стартуем с 5-го канала к нулевому.
SHS_0 | // старт выборки будет по ADC10SC (а не по таймеру)
ADC10SSEL_2 | // тактирование от маинклока
ADC10DIV_2 | // делитель частоты на 4. (16 тактов МЦЛК на выборку с учетом ADC10SHT_0
CONSEQ_1; // режим работы однократный последовательный (многоканальный)
ADC10AE0 = BIT3 | BIT4 | BIT5 ; // P1.3, P1.4, P1.5

ADC10CTL1 = CNT; // константа CNT= 3, три канала оцифровывать.
ADC10CTL0 |=ENC; // разрешение преобразования.
}


#pragma vector = ADC10_VECTOR
__interrupt void ADC0_ISR(void) {
if (ready_channel < CNT) { // ready_channel- переменная, куда пишется номер обработанного канала.
unsigned int tmp = ADC10MEM; // скопировали результат
adc[ready_channel]= tmp; // скинули в буфер.
ready_channel++; // увеличили счетчик канала.
// ADC10CTL0 |= ADC10SC; // с этой строкой тоже не работает.
}
}

по приходу с уарта команды на оцифровку каналов пускаю код
switch (UART_data) {
case cmd_conversion_start: {
ADC_Init();
ready_channel=0;
ADC10CTL1 = CNT;
ADC10CTL0 |= ADC10SC; // начинаем новое преобразование

delay(10000);
if ( ready_channel != CNT ) {
UART_send("error");
}
else {
UART_sendInt( adc[0] );
UART_sendInt( adc[1] );
UART_sendInt( adc[2] );
}
break;
}
default: {
UART_send("error");
break;
}

так вот: в прерывание попадаю, но в ADC10MEM лежит 0. постоянно.
когда переключаю на одноканальный однократный режим- все нормально, в ADC10MEM лежит 0x03FE - 1023, то есть AVCC- на одну из ног проброшен для теста проводок с питания.
когда ставлю многоканальный- нули. вопрос- ЧЯДН?

в руководстве сказано, что в многоканальном режиме после установки ADC10SC мы оцифруем канал с максимальным номером, после чего запишем результат в ADC10MEM и установим флаг прерывания. собственно, флаг прерывания я вижу- прерывание вызывается. но в адэцэмем пусто. затем, бит MSC нулевой- мы попадем в "ожидание запуска", из которого по приходу сигнала SAMPCON пойдем оцифровывать следующий канал. если MSC единичка- то мы сразу пойдем оцифровывать следующий канал.
сигнал SAMPCON придет сам,


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ADC10- многоканальный режим без использования DTC=fail
СообщениеДобавлено: 29 ноя 2015, 22:46 
Только пришел

Зарегистрирован: 23 дек 2012, 12:45
Сообщения: 11
Цитата:
ADC10CTL1 = CNT; // константа CNT= 3, три канала оцифровывать.

и тут Зоркий глаз заметил, что у сарая три стены.
это первое.
второе. решил таки проверить, и....
вот так- работает.

ready_channel=0;
ADC10CTL0 &= ~ENC;
ADC10CTL1 = INCH_5 | SHS_0 | ADC10SSEL_2 | ADC10DIV_2 | CONSEQ_1;
ADC10CTL0 |= ADC10SC|ENC; // начинаем новое преобразование
// ожидание оцифровки и выдача результата.

а вот так
ready_channel=0;
ADC10CTL0 &= ~ENC;
ADC10CTL0 |= ADC10SC|ENC; // начинаем новое преобразование
// ожидание оцифровки и выдача результата.

не работает.

хотя, в документации написано, что если старт преобразования осуществляется по установке бита ADC10SC-то в этом случае дергать бит ENC _не надо_ дергать, да и еще при этом надо INCH устанавливать заново, черным по белому написано, что INCH после преобразования установится САМ. а оказывается, надо и дергать, и ченнел устанавливать. всем спасибо, тема закрыта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ADC10- многоканальный режим без использования DTC=fail
СообщениеДобавлено: 13 фев 2018, 21:22 
Только пришел

Зарегистрирован: 17 ноя 2011, 20:24
Сообщения: 9
Откуда: Киев
А кто-то делал многоканальный режим через DMA ?
Чтобы без прерывания и процессора, ADC по концу счета само через DMA записывало результат в память, и переключалось на новый канал мультиплексора?
в описании вроде как можно...
меня этот режим очень интересует.


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

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


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

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


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB