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

 
 
> MSP430 - вопросы от чайника, генератор опорного напряжения
Daria
сообщение May 18 2008, 20:05
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Здравствуйте.
Подскажите пожалуйста, генератор тактовой частоты запускается сразу после подачи питания или его надо сначала сконфигурировать? не могу найти регистр, который бы за это отвечал. Тот же вопрос про генератор опорного напряжения.
Подскажите еще, пожалуйста, как в CCE 2.0 войти в режим симулятора, никак не могу понять. Вроде в свойствах проекта на режим отладки устанавливаю - "simulator", но при запуске debuge ничего не происходит.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Jun 16 2008, 20:30
Сообщение #2


Гуру
******

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



Я рад вашим успехам smile.gif
Кстати, если вам требуется округление, то можно (до преобразования в int) при вычислениях с float прибавлять число 0.5f.
Go to the top of the page
 
+Quote Post
Daria
сообщение Jun 17 2008, 19:48
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Цитата(rezident @ Jun 17 2008, 00:30) *
Я рад вашим успехам smile.gif

Зря иронизируете, я медленно(очень медленно), но верно расту biggrin.gif
Цитата(rezident @ Jun 17 2008, 00:30) *
Кстати, если вам требуется округление, то можно (до преобразования в int) при вычислениях с float прибавлять число 0.5f.

Спасибо за совет - пригодится smile.gif



Цитата(VAI @ Jun 17 2008, 07:32) *
если число положительное, и вычитать 0.5, если число отрицательное.
Примерно, в общем виде, где-то так...

Спасибо, VAI.
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 18 2008, 16:28
Сообщение #4


Гуру
******

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



Цитата(Daria @ Jun 18 2008, 01:48) *
Зря иронизируете, я медленно(очень медленно), но верно расту biggrin.gif
Никакой иронии! Это чистосердечно. Смайлик неподходящий выбрал. Вот такие надо было. a14.gif
Go to the top of the page
 
+Quote Post
Daria
сообщение Jun 22 2008, 15:37
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 229
Регистрация: 24-02-08
Пользователь №: 35 345



Здравствуйте, и снова вопросы smile.gif много, много вопросов smile.gif
1.!! Сначала по поводу усреднения отсчетов для уменьшения шума -
предлагали использовать бит MSC в регистре ADC12CTL0. Правильно ли я понимаю, что тогда значения выборок будут постоянно(до сброса бита ENC) записываться в регистры ADC12MEMx, и получить усредненное значение можно считывая значения из разных регистров ADC12MEMx и деля на их количество? Но у меня 16 каналов АЦП, задействовано в дальнейшем будет 5. Т.е. я могу использовать для усреднения только три значения из регистров ADC12MEMx - маловато будет... sad.gif
ну, или я все же не понимаю, поясните тогда принцип использования бита MSC.
Делаю усреднение пока так(знаю, что криво, но)
int filter(int r[10])// среднее арифметическое 10 значений
{
int s, t;
s = 0;
for(t = 0 ; t < 10 ; t++)
s+=r[t];
return s/10;
}
...
ADC12CTL0 = ADC12ON + REFON + SHT0_8;// настройка АЦП
ADC12CTL1 = CSTARTADD0 + CSTARTADD1 + ADC12SSEL_1+ CONSEQ_1+ SHS_1;
ADC12MCTL3 = INCH_3;
ADC12MCTL4 = INCH_4 + EOS;
index = 0;
...
И, собственно
if (TACCTL0 & CCIFG)// если таймер переключился
{

if (P1OUT & BIT5)// и, если вывод все еще в единице,т.е. еще идет длинный импулсьс
{

ADC12CTL0 |= ENC;
Vr[0][index] = ADC12MEM3; // записываем в массив значения из ADC12MEMх
Vr[1][index] = ADC12MEM4;
ADC12CTL0 &= ENC;

index++;
if (index >= 10)// когда значений в массиве 10
{
index = 0;
offset[0] = (Vs[0] - filter(Vr[0]))/2; // Вычисление смещений уровня сигнала
offset[1] = (Vs[1] - filter(Vr[1]))/2;

Vx = filter(Vr[0]) - offset[0]; //вычисление координат вектора маг.индукции
Vy = filter(Vr[1]) - offset[1];

azimut = calculation (Vx,Vy); //вычисление азимута

}


send_int(azimut);

} send_int(azimut) - вычисленный азимут посылается на СOM. Описание send_int было выше в теме, да и не в ней суть, на вычисления тоже можно не обращать внимания smile.gif
ВОПРОС! -
2.!! В данном случае вычисляю азимут 10 раз, а посылаю только один. т.е. 10 раз посылается одно и то же значение. Если переношу строчку send_int(azimut); под строку
azimut = calculation (Vx,Vy); - т.е. сразу после вычисления и отправляю, то программа не работает sad.gif На СOM ничего не приходит! 07.gif Поясните, пожалуйста, если будет время разобраться - ПОЧЕМУ?!
3.!! Вопрос не по теме MSP430, уж извините, но вдруг кто-нибудь знает - Когда считываю уровень сигнала с датчика, он самопроизвольно "плывет", плата лежит неподвижно, а уровень за минуту убегает довольно прилично, при вычислении азимута получается, что в минуту градусов +/- 5 07.gif С чем это может быть связано? Датчик, напоминаю, HMC1002 biggrin.gif Вопрос в основном к Курту, если он заглянет. Да, Kurt, отправила Вам письмо - загляните в ящик - там еще куча вопросов по компасу конкретно biggrin.gif Ну, Вы сами обещали помочь biggrin.gif
Ну вот, пока все - помогите, кто может чем сможет biggrin.gif Не ругайте за безграмотность и всех
с победой сбороной России biggrin.gif yeah.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Jun 22 2008, 18:38
Сообщение #6


Гуру
******

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



Цитата(Daria @ Jun 22 2008, 21:37) *
ну, или я все же не понимаю, поясните тогда принцип использования бита MSC.
Бит MSC не имеет прямого отношения к усреднению. Он лишь позволяет автоматически запускать таймер сэмплирования (Sample Timer) после каждого преобразования (если выбран режим последовательности каналов). На блок-схеме из User's Guide хорошо видно, что устройство выборки-хранения (Sample-and-Hold или УВХ в отечественной терминологии), подключенное к входному 16-и канальному мультиплексору управляется сигналом SAMPCON. Лог.1. SAMPCON включает режим выборки, в котором конденсатор УВХ заряжается до напряжения входного сигнала, подключенного к выбранному входу мультиплексора, а лог.0 отключает УВХ от мультиплексора и запускает преобразование. Длительность лог.1 задается таймером сэмплирования, либо внешним сигналом в обход таймера сэмплирования. Сам таймер сэмплирования запускается по фронту сигнала SHI, который формируется либо программно от ADC12SC, либо одним из трех внешних сигналов от модулей таймера A или таймера B. Так вот установка бита MSC позволяет не ждать фронта сигнала SHI для запуска каждого последующего преобразования, а формировать его аппаратно по окончании предыдущего преобразования. Но это все работает только, если выбран режим управления от Sample Timer и режим последовательности каналов.
Цитата(Daria @ Jun 22 2008, 21:37) *
Делаю усреднение пока так(знаю, что криво, но)
int filter(int r[10])// среднее арифметическое 10 значений
{
int s, t;
s = 0;
for(t = 0 ; t < 10 ; t++)
s+=r[t];
return s/10;
}
Ну некоторая "кривизна" присутствует только при передаче аргумента функции. Передавать следует указатель на массив отсчетов и возможно еще и длину этого массива.
Код
int filter(int *ptr, int size)
{ int s=0, t;
  for(t=0; t<size; t++)
  s+=*ptr;
  ptr++;
  if (size>0)  //проверим на исключение "деление на нуль"
    return (s/size);
  else
    return 0;
}

Вызов функции будет такой
Код
x=filter(r, 10);

или
Код
x=filter(&r[0], 10);

Передавать второй аргумент имеет смысл потому, что если вы неправильно неудачно выбрали времена, то у вас будет заполнен не весь буфер. Т.е. за выбранное время будет меньше 10 преобразований. См. ниже про эту потенциальную ошибку.
Цитата(Daria @ Jun 22 2008, 21:37) *
...
ADC12CTL0 = ADC12ON + REFON + SHT0_8;// настройка АЦП
ADC12CTL1 = CSTARTADD0 + CSTARTADD1 + ADC12SSEL_1+ CONSEQ_1+ SHS_1;
ADC12MCTL3 = INCH_3;
ADC12MCTL4 = INCH_4 + EOS;
index = 0;
...
Еще раз обращаю внимание, что во избежание ошибок при формировании слова из отдельных битов следует пользоваться побитовым ИЛИ '|', а не оператором сложения '+'.
Цитата(Daria @ Jun 22 2008, 21:37) *
И, собственно

if (P1OUT & BIT5)// и, если вывод все еще в единице,т.е. еще идет длинный импулсьс
{
Здесь возможно имеется потенциальная алгоритмическая ошибка. Проверять нужно не только до начала преобразования, но и после окончания преобразования. И если после окончания преобразования бит сменил свое состояние, то результат последнего преобразования нужно отбрасывать. Следовательно у вас может быть не 10 отсчетов, а меньше. Поэтому выше я предложил передавать в функцию фильтрации еще и реальную длину буфера отсчетов.
Цитата(Daria @ Jun 22 2008, 21:37) *
2.!! В данном случае вычисляю азимут 10 раз, а посылаю только один. т.е. 10 раз посылается одно и то же значение. Если переношу строчку send_int(azimut); под строку
azimut = calculation (Vx,Vy); - т.е. сразу после вычисления и отправляю, то программа не работает sad.gif На СOM ничего не приходит! 07.gif Поясните, пожалуйста, если будет время разобраться - ПОЧЕМУ?!
Затрудняюсь сходу дать однозначный ответ, но думаю, что причиной является факт, что получение значения измерения и передача его через UART это процессы вообще-то асинхронные, но вы их пытаетесь принудительно синхронизировать без использования буферов. Вы используете передачу по опросу бита готовности, а не по прерыванию. А каждая передача "тормозит" измерения на время передачи двух символов. Поэтому за тот же самый интервал времени (который у вас фиксированный и определяется таймером) вы получаете меньше отсчетов, чем предполагаемое вами количество (10). Следовательно условие if (index >= 10) не выполняется, результата azimut вы не получаете, и передача через UART тоже не идет. Для решения этой проблемы рекомендую использовать передачу по прерываниям и формировать для передачи свой собственный буфер, линейный или циклический.

По 3-му вопросу ответить не могу. Я не "копенгаген", да и с подобными датчиками я не работал laughing.gif
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Daria   MSP430 - вопросы от чайника   May 18 2008, 20:05
- - rezident   Цитата(Daria @ May 19 2008, 02:05) Подска...   May 18 2008, 20:19
|- - Daria   Большое спасибо, вопрос был именно про LFXT А в ...   May 19 2008, 17:28
|- - rezident   Цитата(Daria @ May 19 2008, 23:28) А в ру...   May 19 2008, 18:13
|- - Daria   Цитата(rezident @ May 19 2008, 21:13) Ну ...   May 22 2008, 20:12
|- - Daria   А вот еще вопрос от чайника. Подскажите, если кто ...   May 25 2008, 19:27
- - rezident   Вам нужен готовый или схема для самостоятельного и...   May 25 2008, 19:58
|- - Daria   Цитата(rezident @ May 25 2008, 22:58) Вам...   May 26 2008, 08:42
|- - Daria   Здравствуйте. Такой вопрос - запускаю таймер( в TA...   Jun 3 2008, 19:24
- - rezident   Что-то полная путаница. При чем тут модуль TimerA,...   Jun 3 2008, 22:07
- - A R T   Цитата(Daria @ Jun 3 2008, 23:24) Здравст...   Jun 4 2008, 04:38
|- - Daria   Спасибо, следуя вашему совету, начинаю разбираться...   Jun 5 2008, 19:51
- - rezident   А у вас высокочастотный кварц 8Мгц куда подключен?...   Jun 6 2008, 01:08
|- - Daria   Цитата(rezident @ Jun 6 2008, 04:08) А у ...   Jun 6 2008, 20:02
- - rezident   При использовании высокочастотного кварца нужна оп...   Jun 6 2008, 20:45
|- - Daria   Большое спасибо! Сделаю в точности так, как вы...   Jun 6 2008, 21:01
|- - Daria   Здравствуйте, снова я Опять проблемы привожу вес...   Jun 8 2008, 17:22
|- - Daria   на строчку send_int не обращайте внимания, она ост...   Jun 8 2008, 18:50
||- - Daria   Нет, тут опять ошибки Vs вычисляется после P1OUT...   Jun 9 2008, 19:52
|- - rezident   Цитата(Daria @ Jun 8 2008, 23:22) Здравст...   Jun 9 2008, 21:21
- - АДИКМ   Посылать по 6 бит никто не запрещает конечно, но в...   Jun 9 2008, 20:24
|- - Daria   Цитата(АДИКМ @ Jun 10 2008, 00:24) Посыла...   Jun 9 2008, 20:47
|- - АДИКМ   Цитата(Daria @ Jun 9 2008, 23:47) Проблем...   Jun 9 2008, 21:10
|- - Daria   Цитата(АДИКМ @ Jun 10 2008, 01:10) Расска...   Jun 9 2008, 22:00
- - АДИКМ   Как зовут магнитный датчик?   Jun 10 2008, 07:32
- - Kurt   Мне нравится с каким упорством девушка двигается к...   Jun 10 2008, 11:36
|- - Daria   Цитата(Kurt @ Jun 10 2008, 15:36) Мне нра...   Jun 10 2008, 20:19
|- - Kurt   Цитата(Daria @ Jun 11 2008, 02:19) С уп...   Jun 11 2008, 03:18
|- - Daria   Господа! Как ни странно, оно работает! ...   Jun 12 2008, 15:35
- - rezident   Да я не забыл про обещание. Просто пока нет времен...   Jun 12 2008, 19:18
|- - Daria   Цитата(rezident @ Jun 12 2008, 23:18) 1. ...   Jun 14 2008, 21:39
|- - Dog Pawlowa   Цитата(Daria @ Jun 15 2008, 00:39) Помоги...   Jun 15 2008, 09:37
|- - rezident   Цитата(Daria @ Jun 15 2008, 03:39) Помоги...   Jun 15 2008, 20:37
|- - Daria   Большое спасибо, rezident, теперь все получилось))   Jun 16 2008, 20:24
|- - Daria   Здравствуйте снова. Rezident, спасибо за подробный...   Jun 24 2008, 19:17
- - VAI   Цитатаприбавлять число 0.5f. если число положитель...   Jun 17 2008, 03:32
- - rezident   Daria, давайте все исходники (весь проект). Вариан...   Jun 24 2008, 20:13
- - Daria   Цитата(rezident @ Jun 25 2008, 00:13) Я б...   Jun 25 2008, 18:18
- - NoName   Цитата(Daria @ Jun 25 2008, 21:18) Функци...   Jun 26 2008, 14:11
- - Daria   Цитата(NoName @ Jun 26 2008, 18:11) Имеет...   Jun 26 2008, 18:44
- - rezident   Цитата(Daria @ Jun 27 2008, 00:44) Спасиб...   Jun 26 2008, 20:30
|- - Daria   Цитата(rezident @ Jun 27 2008, 00:30) 5 а...   Jun 28 2008, 20:14
- - NoName   Цитата(Daria @ Jun 26 2008, 21:44) Спасиб...   Jun 29 2008, 11:23
|- - Daria   Цитата(NoName @ Jun 29 2008, 15:23) Daria...   Jun 29 2008, 21:10
- - Dog Pawlowa   Цитата(Daria @ Jun 26 2008, 21:44) Спасиб...   Jun 30 2008, 06:50
- - Daria   Цитата(Dog Pawlowa @ Jun 30 2008, 10:50) ...   Jun 30 2008, 16:58
- - Т.Достоевский   Цитата(Daria @ Jun 30 2008, 20:58) ...Как...   Jul 1 2008, 00:33
- - Daria   Ау, rezident! Вы там вроде обещали... забыли и...   Jul 3 2008, 18:16
- - Daria   Снова я, здравствуйте Такой вопрос - контроллер...   Jul 15 2008, 19:37
- - NoName   Цитата(Daria @ Jul 15 2008, 22:37) Снова ...   Jul 16 2008, 09:33
- - Daria   Цитата(NoName @ Jul 16 2008, 13:33) вопро...   Jul 16 2008, 18:31


Closed TopicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


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


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