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

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





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



rezident, огромное спасибо за подробный ответ, ваши указания на мои ошибкидумаю помогут. Особо заострю на этом внимание.

И если не сложно проясните ситуацию с частотой дискретизации. Про теорему котельникова я слышал biggrin.gif (частота дискретизации должна быть в два раза больше максимальной частоты сигнала, вроде так). В описании "Семейство микроконтроллеров MSP430x4xx" (это описание есть на русском, поэтому я его читаю, думаю что принципиальных отличий от msp430x5xx нет). Так вот, в этом описании написано, цитирую: "Биты SHT0x регистра ADC12CTL0 определяют число циклов ADC12CLK в периоде выборки для регистров с ADC12MEM0 по ADC12MEM7". И приводится таблица значений этих битов для разного количества циклов. Вопрос, правильно ли я считаю частоту дискретизации? Я установил тактирование от SMCLK (для наглядности, вывел эту частоту на порт и посмотрел на осциллографе, получилось примерно 1 МГц). К примеру, установил число циклов в периоде выборки-хранения = 96. Я нахожу период SMCLK (1/1 МГц = 0.000001 с). Дальше 96*0.000001 с = 0.000096 с. И нахожу частоту дискретизации (я так думаю) 1/0.000096 с = 10416 Гц (скорее всего я не правильно считаю). Так вот, вроде бы условие теоремы Котельниково соблюдается. Или нет. Просто я беру максимальную частоту голоса примерно 4000 Гц.
Go to the top of the page
 
+Quote Post



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

 


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


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