реклама на сайте
подробности

 
 
> Help с АЦП, Помогите пожалуйста с АЦП
Alex_Al
сообщение May 4 2006, 07:13
Сообщение #1





Группа: Новичок
Сообщений: 8
Регистрация: 3-05-06
Пользователь №: 16 716



Мне нужно вывести напряжение, которое подводится к ноге 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;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 10)
Nemo2000
сообщение May 4 2006, 07:38
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 79
Регистрация: 8-04-05
Из: Санк-Петербург
Пользователь №: 3 972



это вполне логично
while(1) и будет выполнятся вечно, ибо выход из него происходит только при wile(условие=false), а 1 это true... wink.gif

Сообщение отредактировал Nemo2000 - May 4 2006, 07:40
Go to the top of the page
 
+Quote Post
Alex_Al
сообщение May 4 2006, 08:55
Сообщение #3





Группа: Новичок
Сообщений: 8
Регистрация: 3-05-06
Пользователь №: 16 716



подпрограмма
for (i = 0; i<3600; i++) {};
ADC12CTL0 |= ENC;
ADC12CTL0 |= ADC12SC;
while((ADC12IFG & BIT0)==0);
pit = ADC12MEM1;
[/quote]

Логично, но и это ничего не меняет, прога висит, т.к. условие
while((ADC12IFG & BIT0)==0);
не выполняется. sad.gif
Go to the top of the page
 
+Quote Post
Nemo2000
сообщение May 4 2006, 10:06
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 79
Регистрация: 8-04-05
Из: Санк-Петербург
Пользователь №: 3 972



еще одна мысль. Вы используете канал A1 а проверяете А0
попробуйте в строке while((ADC12IFG & BIT0)==0);
BIT0 поменять на BIT1
Go to the top of the page
 
+Quote Post
Alex_Al
сообщение May 4 2006, 10:25
Сообщение #5





Группа: Новичок
Сообщений: 8
Регистрация: 3-05-06
Пользователь №: 16 716



Поменял, не помогло.
Go to the top of the page
 
+Quote Post
Alex_Al
сообщение May 4 2006, 11:31
Сообщение #6





Группа: Новичок
Сообщений: 8
Регистрация: 3-05-06
Пользователь №: 16 716



Написал при инициализации:
P6DIR = 0x64;
P6SEL = 0x02;
ADC12CTL0 = ADC12ON+MSC+SHT0_8;
ADC12CTL1 = SHP+CONSEQ_3;
ADC12MCTL1 = INCH_1;
ADC12IE = 0x08;
ADC12CTL1 |= ADC12SC;
и все заработало!
Go to the top of the page
 
+Quote Post
Alex_Al
сообщение May 4 2006, 12:44
Сообщение #7





Группа: Новичок
Сообщений: 8
Регистрация: 3-05-06
Пользователь №: 16 716



Цитата(Alex_Al @ May 4 2006, 15:31) *
и все заработало!

Но не так как нужно. Он почему-то выдает каждый раз разные значения?
Go to the top of the page
 
+Quote Post
rezident
сообщение May 4 2006, 12:52
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Alex_Al @ May 4 2006, 18:44) *
Цитата(Alex_Al @ May 4 2006, 15:31) *


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

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

Дык все верно. Вы выбрали режим непрерывного преобразования последовательности каналов CONSEQ_3, но при этом не выбрали ни начало последовательности (номер канала, биты CSTARTADDx в ADC12CTL1), ни конец ее (бит EOS в соответствующем ADC12MCTLx).
Go to the top of the page
 
+Quote Post
condor
сообщение May 4 2006, 23:44
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 93
Регистрация: 18-06-05
Из: Kyiv, Ukraine
Пользователь №: 6 126



Цитата(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;
и проверьте.
Go to the top of the page
 
+Quote Post
Alex_Al
сообщение May 5 2006, 04:27
Сообщение #10





Группа: Новичок
Сообщений: 8
Регистрация: 3-05-06
Пользователь №: 16 716



Спасибо большое за помощь, сейчас исправлю.
Go to the top of the page
 
+Quote Post
Alex_Al
сообщение May 5 2006, 05:01
Сообщение #11





Группа: Новичок
Сообщений: 8
Регистрация: 3-05-06
Пользователь №: 16 716



Может быть у кого есть готовыйц кусок проги на Си, буду очень признателен. Нужно по нажатию кнопки считывать напряжение на входе А1, куда подключен вывод элементов питания 2хАА через делитель из 2 резисторов 1:2.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 08:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016