|
|
  |
ADC10_A в режиме Repeat-Sequence-of-Channels, MSP430F5510 |
|
|
|
Feb 17 2012, 07:13
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612

|
Добрый день!
В User-guide на стр. 533 рис. 23-9. показана работа АЦП10 в режиме Repeat-Sequence-of-Channels. Допустим, АЦП10 обрабатывает 2 канала, А0 и А1. Интересует как обрабатывается прерывание при ADC10_A conversion is completed когда ADC10MSC = 1; ADC10SHP = 1; ADC10ENC = 1;
|
|
|
|
|
Feb 17 2012, 17:33
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612

|
Цитата Прерывание генерируется при каждом готовом результате Если было бы все так просто, я бы не спрашивал. Под отладкой я вижу, что в прерывании содержание регистра результата преобразования, меняется на значение для другого канала. Цитата Лучше в дополнении к этому использовать DTC У этого АЦП нет DTC, но в кристалле есть DMA. Хотя вопрос не в этом.
|
|
|
|
|
Feb 17 2012, 23:00
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(usercod @ Feb 17 2012, 12:13)  Интересует как обрабатывается прерывание при ADC10_A conversion is completed Обработка прерывания (функция обработки прерывания) это задача программиста. Как напишите, так и будет. Аппаратура АЦП только лишь формирует запрос прерывания в соответствии с описанными условиями. Цитата The ADC10IFG0 bit is set when the ADC10MEM0 memory register is loaded with the conversion result. An Interrupt request is generated if ADC10IE0 bit and the GIE bit are set. The ADC10OV condition occurs when a conversion result is written to the ADC10MEM0 before its previous conversion result was read. The ADC10TOV condition is generated when another sample-and-conversion is requested before the current conversion is completed. The DMA is triggered after each conversion. С другой стороны посудите сами логически - вот готов результат преобразования, куда его АЦП должен девать, если другого места кроме ADC10MEM0 для него не предусмотрено? А запись в ADC10MEM0 приводит к установке флага ADC10IFG0 и если разрешено прерывания, то к вызову его обработчика. Так что прерывание будет возникать на каждое преобразование. Цитата(usercod @ Feb 17 2012, 22:33)  Если было бы все так просто, я бы не спрашивал. Под отладкой я вижу, что в прерывании содержание регистра результата преобразования, меняется на значение для другого канала. А вы надеялись что-то иное увидеть? АЦП работает независимо от ядра, поэтому с учетом выбранного вами режима работы АЦП и задержек обновления регистров в окне дебаггера вы можете увидеть в окне значение любого из преобразований, вне зависимости от вашего желания. Можете убедиться в этом, проверив значение флагов переполнения ADC10OVIFG. Если хочется определенности, то реализуйте "программные триггеры" и смотрите результаты преобразования во временных переменных, используемых для них.
|
|
|
|
|
Feb 19 2012, 04:36
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612

|
rezident, спасибо. Все работает.
|
|
|
|
|
Mar 14 2012, 14:44
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612

|
Запустил АЦП10, работает два канала A0 и А1. Результат канала А1 накапливаю, а потом усредняю. Заметил одну странность, во-первых, никогда не получал результат 512 (АЦП 10бит).Опора внешняя - 2.5В, подстроечный резистор на середину и смотрю на усредненные значения. Довожу значения до 511, все нормально, но как только должен появиться результат 512, АЦП начинает сыпать данные = 512 +-50. Во времени это выглядит как шум с постоянкой 1.25В. После - 513, 514 все опять нормально, как и должно быть. Резистор менял, не в нем дело.
Что происходит с АЦП на середине диапазона? Кто-нибудь что-то подобное видел?
|
|
|
|
|
Mar 15 2012, 11:03
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612

|
Удивительно! Взял два подстроечных резистора (один 2кОм, другой 100 Ом) соединил последовательно для более плавной регулировки. Довел до 511 -нормально
, далее плавной регулировкой подвел до следующего значения, где должно быть 512, а там это -(руда)
кручу дальше 513 -все нормально
. Как раскрутить? Кто работал с подобным АЦП, отпишитесь в середине диапазона нормально себя вел АЦП или нет?
|
|
|
|
|
Mar 17 2012, 20:14
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612

|
Конденсатор на входе АЦП 1uF. Аналоговое и цифровое питание на микроконтроллере развязаны через LC цепь, согласно рекомендациям. Все стандартно. Я думаю, что эта проблема все же не связана с внешней обвязкой, потому что до и после значения АЦП-512 все нормально. Я надеюсь, что это моя ошибка при инициализации АЦП, а не проблема MSP.
|
|
|
|
|
Mar 19 2012, 12:14
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612

|
Начну по порядку: Все тот же режим, Repeat-sequence-of-channels. Схема: (Уточнение, на вход А1 заведен сигнал, через такую же цепь как и на А0). Вместо резистора 1кОм, подстроечный резистор 2кОм на входе А1.
Мне удалось немного уменьшить колебания на середине диапазона, баги в инициализации, но тем не менее они остались. Привожу рисунок только проблемного участка, т.к на всех остальных- все нормально рис.1 unsigned
рис.2 signed
Частота кварца 10МГц. Далее, сомнению также подвергается и инициализация АЦП, а потому вот она: CODE //********************************* ADC_10 ************************************** P6SEL |= BIT0 + BIT1; // Enable A/D channel A0 and A1 ADC10CTL0 = ADC10ON + ADC10SHT_4 + ADC10MSC; // ADC10ON - ADC10_A on; // ADC10SHT_8 - ADC10_A sample-and-hold time (256 * 1/5MHz*4) ~200uS // ADC10MSC - ADC10_A multiple sample and conversion. ADC10CTL1 = ADC10SHP + ADC10CONSEQ_3 + ADC10SSEL_2 + ADC10DIV_1; // /* // ADC10CONSEQ_3 - Repeat-sequence-of-channels // ADC10SSEL_2 - MCLK // ADC10DIV_1 - Divide by 2 // ADC10ISSH = 0 - The sample-input signal is not inverted. // ADC10SHP - SAMPCON signal is sourced from the sampling timer. // ADC10SHS_0 - ADC10_A sample-and-hold source select (ADC10SC bit) ADC10CTL2 = ADC10RES; // ADC10SR - ADC10_A buffer supports up to ~50 ksps. // ADC10DF = 0 - Binary unsigned format of result // ADC10RES - 10 bit (12 clock cycle conversion time) // ADC10PDIV_0 - ADC10 predivider /1
ADC10MCTL0 = 0x01 + ADC10SREF_3; // Two chanell are enabled A0 and A1 + DC10SREF_3 - VR+ = VEREF+ and VR- = AVSS ADC10IE = 0x01; // Enable ADC10IFG.0 ADC10CTL0 |= ADC10ENC; // Enable conversions
Вопрос по userguide. на стр. 524.(slau208i), написано: Цитата 12 individually configurable external input channels где они?
|
|
|
|
|
Mar 21 2012, 13:35
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612

|
Пробовал менять режим работы АЦП на одиночный однократный и повторяющийся. результат один и тот же. Также заметил, что это проблема связана не только с серединой диапазона 512. К примеру, на 128 бьет тоже, но поменьше, такого же рода проблемы и на 64, но на этом значении это явление можно принять за шум, так как выбивает всего 1 бит. Установил резистор на середину, должно быть 512. В прерывании поставил такое условие: Код temp = ADC10MEM0; if(temp > 512) {Synch_1;} if(temp < 511) {Synch_0;} Под отладкой смотрю что выдает АЦП. Так вот результаты бывают просто необъяснимые: 0xFF, 0x300, 0x3FF а иногда и 0x00!Честно говоря, у меня уже кончились идеи.
Сообщение отредактировал usercod - Mar 21 2012, 13:39
|
|
|
|
|
Mar 22 2012, 08:20
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(usercod @ Mar 19 2012, 17:14)  Вопрос по userguide.
на стр. 524.(slau208i), написано:
где они? А никто и не обещал вывести все каналы в малоногом кристалле. Банально не хватает пинов для вывода всех альтернативных функций всех модулей. Цитата(usercod @ Mar 21 2012, 18:35)  Честно говоря, у меня уже кончились идеи. За то время, что вы боретесь с описанным багом уже можно было изучить всю документацию вдоль и поперек. В Erratasheet на страничке продукта ваша проблема описана на стр. 19 под именем ADC31. Программный медианный фильтр должен несколько облегчить вашу участь. Так, что выходит ваш баг и не баг вовсе, а документированная фича. Ибо "баг, описанный в документации, становится фичей"
|
|
|
|
|
Mar 22 2012, 10:50
|
Участник

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612

|
Нашел уже. Xотел написать что в SLAZ059J описан этот процесс и вопрос снят, но Вы меня опередили, эх, если бы немного раньше на 2-3 дня. Тем не менее, уважаемый rezident, спасибо за ответ. Насколько я могу судить, т.к. я новичок на этой ветке, Вы, к сожалению, единственный, кто отвечает на вопросы как тому подобает инженерная этика (ИМХО).
Сообщение отредактировал usercod - Mar 22 2012, 11:00
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|