Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вопрос по ADC10
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Denisnovel
Опрашиваю АЦП по таймеру.
Код
ADC10CTL1 = INCH_3;         // Канал 3
            ADC10CTL0 |= REFOUT+REFON+SREF_1+ ADC10ON+ADC10SHT_2+ ADC10IE+REFBURST;
          TI_CC_Wait(50);
           for (char k=0;k<10;k++)
            {
              ADC10CTL0 |= ENC + ADC10SC;//Запускаем АЦП
             _BIS_SR(CPUOFF + GIE);        // Засыпаем до появления прерывания от АЦП
              ADC_Sum=ADC_Sum+ADC10MEM;//Суммируем
            }
            ADC_Sum=ADC_Sum/10;//Находим среднее
            ADC10CTL0 &= ~(ADC10ON+ ENC );//ADC off


В режиме сна МК потребляет 250 мкА. Если мерить только напряжение батарейки, то все нормально, потребление около 7 мкА.
MrYuran
Цитата(Denisnovel @ Jul 10 2009, 11:59) *
Если мерить только напряжение батарейки, то все нормально, потребление около 7 мкА.

А чем отличается измерение батарейки?
Denisnovel
Другой канал и не используется вывод внутреннего опорного напряжения на внешний пин.
Код
ADC10CTL1 = INCH_11;//bat
               ADC10CTL0 |= REFON+SREF_1+ ADC10ON+ADC10SHT_2+ ADC10IE;
              TI_CC_Wait(50);
              ADC10CTL0 |= ENC + ADC10SC;
              _BIS_SR(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
              BatV=ADC10MEM/34;
              ADC10CTL0 &= ~(ADC10ON+ ENC + ADC10SC+REFON);//ADC off
              ADC10CTL1 = INCH_15;


Причем, если закоментировать строки в коде из первого поста то потребление тоже упадет
Код
              //ADC10CTL0 |= ENC + ADC10SC;//Запускаем АЦП
             _//BIS_SR(CPUOFF + GIE);        // Засыпаем до появления прерывания от АЦП
MrYuran
Цитата(Denisnovel @ Jul 10 2009, 13:14) *
Другой канал и не используется вывод внутреннего опорного напряжения на внешний пин.

Я так и думал.
А оно там очень нужно?
Если да, ищите, куда стекает ток. Может, в электролит?
Denisnovel
Какой электролит?
11 канал это измерение напряжения питания. При включении 11-ого канала питание подается на делитель напряжения. После измерения АЦП переключается на 3 канал и отключает делитель.
Выводить опорное напряжение нужно. Но после измерения я его тоже отключаю.
ADC10CTL0 &= ~(ADC10ON+ ENC + ADC10SC+REFBURST+REFON+REFOUT);//ADC off
rezident
Цитата(Denisnovel @ Jul 10 2009, 15:14) *
Причем, если закоментировать строки в коде из первого поста то потребление тоже упадет
Код
              //ADC10CTL0 |= ENC + ADC10SC;//Запускаем АЦП
             _//BIS_SR(CPUOFF + GIE);        // Засыпаем до появления прерывания от АЦП
Вполне логично. У вас выбран режим Reference burst (биты REFOUT и REFBURST в регистре ADC10CTL0). Закомментировав строки, вы не запускаете преобразование и в соответствии с выбранным режимом REF не включается до тех пор, пока не поступит управляющий сигнал SAMPCON, для запуска выборки входного сигнала. REF включается только во время выборки сигнала перед преобразованием.
Цитата(MrYuran @ Jul 10 2009, 15:26) *
Если да, ищите, куда стекает ток. Может, в электролит?
Поскольку установлен REFON в регистре ADC10CTL0, то REF соединяется с соответствующим внешним пином, на котором теоретически конденсатор висеть должен.
Denisnovel
На внешнем пине висит 10нФ. Но после преобразования REF выключается. По осциллографу видно, что опорное только при измерении, около 100 мкс.
rezident
Цитата(Denisnovel @ Jul 10 2009, 16:21) *
На внешнем пине висит 10нФ. Но после преобразования REF выключается. По осциллографу видно, что опорное только при измерении, около 100 мкс.

Какой именно у вас кристалл? Регистр ADC10AE вы программируете?
Denisnovel
Кристалл f2012
ADC10AE0 |= 0x18;
rezident
Цитата(Denisnovel @ Jul 10 2009, 15:53) *
Выводить опорное напряжение нужно. Но после измерения я его тоже отключаю.
ADC10CTL0 &= ~(ADC10ON+ ENC + ADC10SC+REFBURST+REFON+REFOUT);//ADC off
Обратите внимание, что некоторые биты регистров ADC10CTL0 и ADC10CTL1 должны модифицироваться только когда бит ENC сброшен. Попробуйте сначала сбрасывать ENС и только потом использовать эту команду для выключения ADC10.
Denisnovel
Вроде помогло. Спасибо
rezident
Цитата(Denisnovel @ Jul 10 2009, 17:52) *
Вроде помогло. Спасибо
Что именно и как помогло? Потребление упало? Из-за предварительного сброса бита ENC? Т.е. "до того как" ADC реально не выключался?
Denisnovel
Теперь так
Код
           ADC10CTL0 &= ~ENC;
           ADC10CTL0 &= ~(ADC10ON+ ADC10SC+REFBURST+REFON+REFOUT);//ADC off


Потребление около 80 мкА
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.