Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Help с АЦП
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Alex_Al
Мне нужно вывести напряжение, которое подводится к ноге 60 (Р6.1/А1) микроконтроллера MSP430F133, не входя в прерывание. Согласно документу slac015k (fet140_adc12_02) вставляю кусок программы, в свой проект. При выполнении программа зависает на циклах while( ). Подскажите в чем проблема.

main
.........
P6DIR = 0x64;
P6SEL = 0x02;
ADC12CTL0 = ADC12ON + SHT0_2+REFON + REF2_5V;
ADC12CTL1 = SHP;
ADC12MCTL0 = SREF_1;
.........

подпрограмма
for (i = 0; i<3600; i++) {};
ADC12CTL0 |= ENC;
while (1)
{
ADC12CTL0 |= ADC12SC;
while((ADC12IFG & BIT0)==0);
}
pit = ADC12MEM1;
Nemo2000
это вполне логично
while(1) и будет выполнятся вечно, ибо выход из него происходит только при wile(условие=false), а 1 это true... wink.gif
Alex_Al
подпрограмма
for (i = 0; i<3600; i++) {};
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC;
while((ADC12IFG & BIT0)==0);
pit = ADC12MEM1;
[/quote]

Логично, но и это ничего не меняет, прога висит, т.к. условие
while((ADC12IFG & BIT0)==0);
не выполняется. sad.gif
Nemo2000
еще одна мысль. Вы используете канал A1 а проверяете А0
попробуйте в строке while((ADC12IFG & BIT0)==0);
BIT0 поменять на BIT1
Alex_Al
Поменял, не помогло.
Alex_Al
Написал при инициализации:
P6DIR = 0x64;
P6SEL = 0x02;
ADC12CTL0 = ADC12ON+MSC+SHT0_8;
ADC12CTL1 = SHP+CONSEQ_3;
ADC12MCTL1 = INCH_1;
ADC12IE = 0x08;
ADC12CTL1 |= ADC12SC;
и все заработало!
Alex_Al
Цитата(Alex_Al @ May 4 2006, 15:31) *
и все заработало!

Но не так как нужно. Он почему-то выдает каждый раз разные значения?
rezident
Цитата(Alex_Al @ May 4 2006, 18:44) *
Цитата(Alex_Al @ May 4 2006, 15:31) *


и все заработало!

Но не так как нужно. Он почему-то выдает каждый раз разные значения?

Дык все верно. Вы выбрали режим непрерывного преобразования последовательности каналов CONSEQ_3, но при этом не выбрали ни начало последовательности (номер канала, биты CSTARTADDx в ADC12CTL1), ни конец ее (бит EOS в соответствующем ADC12MCTLx).
condor
Цитата(Alex_Al @ May 4 2006, 10:13) *
P6DIR = 0x64;
P6SEL = 0x02;
ADC12CTL0 = ADC12ON + SHT0_2+REFON + REF2_5V;
ADC12CTL1 = SHP;
ADC12MCTL0 = SREF_1;


Может не работает потому, что Вы преобразовываете канал 0, а он настроен как цифровой вход.
Замените
ADC12MCTL0 = SREF_1 + INCH_1;
и проверьте.
Alex_Al
Спасибо большое за помощь, сейчас исправлю.
Alex_Al
Может быть у кого есть готовыйц кусок проги на Си, буду очень признателен. Нужно по нажатию кнопки считывать напряжение на входе А1, куда подключен вывод элементов питания 2хАА через делитель из 2 резисторов 1:2.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.