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

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





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



Здравтсвуйте. получилось у меня воспроизвести голос. Частота дискретизации 32,460 кГц, частота SMCLK 8.424 МГц. В настройке АЦП использую предделитель с коэффициентом деления 8.
Теперь стоит задача, передать голос по радиоканалу, с помощью сс1101. У меня получается передавать голос, но он получается металлический, разобрать что говорят можно, но с трудом. Как настроить радиоканал. Частота тактирования UART получается 526,5 кГц. Я вроде все флаги буферов приемника SPI и передатчика использую. Т.е. жду когда они выставятся. Подскажите где копать.
Или может с настройками SPI что-то не так. Спасибо.
Go to the top of the page
 
+Quote Post
stepper88
сообщение Apr 29 2011, 07:45
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 43
Регистрация: 20-02-09
Пользователь №: 45 138



Здравствуйте, господа!
Так получилось, что у меня возникла сходная проблема - решил запускать АЦП с помощью таймера. На MSP430F149 подобное получалось, но аналогичного примера для F54xx найти не удалось. Написал вот такую программку на основе примера 14х:
Код
#include <msp430x54xA.h>

unsigned char log [16];
unsigned char i=0;

void main (void)
{
  P7SEL=0xff;
  REFCTL0 |= REFMSTR+REFVSEL_2+REFON+REFTCOFF;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog
  ADC12CTL1 = ADC12SHS_1 + ADC12SHP + ADC12CONSEQ_2;       // TA trig., rpt conv.
  ADC12MCTL0 = ADC12SREF_1 + ADC12INCH_14;            // Channel A10, Vref+
  ADC12IE = 0x01;                           // Enable ADC12IFG.0
  ADC12CTL0 = ADC12SHT0_8 + ADC12REF2_5V + ADC12REFON + ADC12ON + ADC12ENC; // Config ADC12
  TA1CCTL1 = OUTMOD_4;                       // Toggle on EQU1 (TAR = 0)
  TA1CTL = TASSEL_2 + MC_2;                  // SMCLK, cont-mode
  _EINT();
  for(;;);
}

#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void)
{
  log[i++]=ADC12MEM0;
}

Но почему-то программа при исполнении не заходит в обработчик прерывания. И еще я правильно включил источник опорного напряжения (Vref)?
Заранее спасибо!
Go to the top of the page
 
+Quote Post



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

 


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


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