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

 
 
> АЦП и Таймер в контроллере 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
Ответов
mzhelezkin
сообщение Feb 4 2010, 21:03
Сообщение #2





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



Здравствуйте. Спасибо еще раз за подробнейший ответ biggrin.gif По вашему совету скачал статью Using PWM Timer_B as a DAC. И нашел эту же статью, но уже в переводе на русский. Вот ссылка http://www.gaw.ru/html.cgi/txt/app/micros/msp430/slaa116.htm

Эта статья и ваши разъяснения очень сильно помогли, спасибо. Но возникли некоторый вопросы. Вот один из них.

У меня ADC и PWM настроены от тактирования от SMCLK. Но частота тактирования этих устройств должна быть разная. Возьмем тот же пример на котором вы мне все объясняли.
Как я говорил частоту SMCLK на осциллографе показывает 1 МГц. Тогда время выборки (96 тактов) плюс время преобразования (9 тактов, я поставил разрядность ADC 8 бит) деленное на SMCLK, получим время одного периода преобразования. Т. е. Т = (96 + 9)/1000000 = 105 мкс. Получим 9523 SPS. И частоту тактирования для PWM F = 9523*2^8 = 2437888 Гц = 2,4 МГц. Вопрос, я могу увеличить частоту SMCLK только с помощью UCS (Unified Clock System). Но тогда измениться частота SMCLK и для ADC. Тогда опять пересчитывать biggrin.gif Единственная мысль которая приходит, это использовать входной делитель для частоты ADC. Правильно ли я думаю. Может подгонка частот делается как-то по-другому.
Еще один вопрос. В MSP430x5xx Family User's Guide на рис. 17-4 показана временная диагарамма работы ADC при выборе импульсного режима. Судя по рисунку, к полному времени преобразования (96 + 1) нужно прибавить еще один такт SMCLK для синхронизации ADC. Нужно ли это делать. В принципе я пробовал и прибавлять его и не прибавлять, разницы не заметил.

Что еще хотел сказать. Получить голос на наушниках у меня получилось. Но опять же с каким-то гулом (как в самолете) biggrin.gif Получается я опять что-то не так сделал. мне кто-то сказал что нужно фильтр на выходе поставить и все. Но дело в том, что когда я зашил контроллер тестовую программу, скачанную с сайта TI, такого шума не было. Может внутри контроллера какие фильтры стоят. В описании, в разделе ADC что-то было такое что входы можно интерпретировать как ФНЧ. Может это и использовалось в программе от TI.

И последнее biggrin.gif Как вы правильно догадались мне нужно передать голос по радиоканалу. Точнее по радиоканалу передаются данные ADC. Радиопередатчик использую CC1101. Получилось организовать радиопередачу (для этого скачал пример с TI). Но не могу различить голос. Т.е. я так думаю, что опять с частотами накосячил. Начинаю пробовать менять SMCLK, естественно вообще ничего не работает. Так как UART использует тоже частоту SMCLK. Как мне синхронизовать это дело, пока еще не понял biggrin.gif

Ну вот, пока все что у меня получилось, спасибо за объяснения еще раз и, если не сложно,, еще раз ответьте на вопросы.
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 20:47
Рейтинг@Mail.ru


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