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

 
 
> АЦП и Таймер в контроллере MSP430F5438, Не могу кинуть данные в регистр таймера
mzhelezkin
сообщение Feb 1 2010, 14:27
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 15-01-10
Пользователь №: 54 827



Здравствуйте. Подскажите в чем дело. Вот код программы:
CODE
#include "msp430x54x.h"
#include "setup_ustroistva.c"
unsigned char a = 0;
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; // Остановка сторожевого таймера

setup_adc();

setup_tb();

for(;;)
{
ADC12CTL0 |= ADC12SC;
a = ADC12MEM0_L;
TB0CCTL4 = (*((unsigned char*)ADC12MEM0));
}
}


Работаю в IAR Embeddet Workbench v4.20.1. Микроконтроллер MSP430F5438. В функциях setup_adc() и setup_tb() просто настройка АЦП и таймер B. Настроил АЦП на 8 разрядов, соответственно таймер B тоже. Проблема в том, что данные из регистра ADC12MEM0 не могу записать в регистр TB0CCTL4. Пробовал и без указателе, т.е просто
TB0CCTL4 = ADC12MEM0;
Не работает. А в переменную записываеться (выше определена переменная а). Ниже привожу картинку.

Прикрепленное изображение


Вообще мне нужно вывести на наушники голос человека. В качестве ЦАП использую ШИМ. Вот, так сказать и мучаюсь. Новую тему создавать не стал, нашел на этом же форуме обсуждение подобной проблемы. Название темы такое: "ЦАП на ШИМ Atmega, Реализация ЦАП с помощью ШИМ атмеги". Общая идея в принципе понятна. По переполнению таймера счетчика, делаем одну выборку АЦП и кидаем ее сразу в регистр таймера. Но вот закинуть в регистр выборку, что-то не получается.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
rezident
сообщение Feb 2 2010, 22:52
Сообщение #2


Гуру
******

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



Считаете неправильно, т.к. забыли что кроме времени выборки есть еще и время преобразования равное 13, 11 или 9 тактам ADC12CLK. Результирующая формула для определения времени преобразования ADC12 выглядит как tsample+tconvert. Где tsample для выбранного вами режима (можно и другой способ выборки входного сигнала использовать) определяется значением ADC12SHTx, а tconvert разрядностью АЦП. Нужно отметить, что в применяемом вами кристалле (MSP430F5438) модуль АЦП не ADC12, а ADC12_A. Отличия их в том, что ADC12_A может работать с разной разрядностью преобразования: 12 бит, 10 бит и 8 бит. Следовательно tconvert в зависимости от разрядности может быть 13, 11 и 9 тактов ADC12CLK соответственно. Так что для вашего случая время одного преобразования будет как минимум (96+13)/1МГц=109мкс или интерпретируя по-другому - не более 9174 выборок в секунду (SPS - sample per second). В принципе достаточно, но частота весьма нестандартная. Если вы не собираетесь ваш оцифрованный сигнал куда-либо передавать или применять у себя оцифрованный где-либо сигнал, то можно и такую частоту оставить. Я написал "как минимум" и "не более", потому что следует учитывать время, необходимое на "вычитывание" результата преобразования АЦП и передачу его в модуль ШИМ так, чтобы работа была синхронной.
Теперь вам требуется настроить таймер для работы с такой частотой дискретизации. Если вы выберите 12-разрядный (чтобы соответствовать разрешению АЦП) режим работы Timer_B (он лучше, чем Timer_A приспособлен для генерации ШИМ), то частота тактирования таймера должна быть 9174SPS * 2^12=37,576704МГц. Очевидно, что это очень высокая частота для данного таймера. Так что вам следует уменьшить разрядность ШИМ до, скажем, 10-и бит. Тогда частота тактирования таймера должна получаться 9174SPS * 2^10=9,394176МГц, что вполне допустимо для аппаратуры MSP430.
Вообще-то, если более тщательно изучить аппаратуру MSP430, то можно обнаружить способ полностью синхронной работы таймера, вырабатывающего ШИМ, и модуля ADC, при котором временем tsample и запуском преобразования АЦП управляет этот же самый таймер. Правда при этом следует еще и систему прерываний изучить и задействовать. Ищущий, да обрящет wink.gif
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 1st July 2025 - 09:18
Рейтинг@Mail.ru


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