Easyelectronics.ru

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

Часовой пояс: 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 часов


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

Сейчас этот форум просматривают: Google [Bot]


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

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

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