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

 
 
> ADC12, прерывания по таймеру А
jorikdima
сообщение Aug 5 2008, 19:24
Сообщение #1


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Приветствую.
Два дня парюсь уже с непонятной мне проблеммой. Хочу, чтобы АЦП срабатывал периодически и период бы этот определялся по таймеру А. Настраиваю таймер на работу и проверяю по частоте миганий светодиода правильно ли установлена периодичность прерывания от таймера. Оказывается правильно. Теперь хочу, чтобы ровно с этим же периодом у меня запускался АЦП на измерение и вызывалось его прерывание, но это происходит почему то в 4 раза реже, чем прерывания от таймера. Код следующий.

Код
TACCTL1 = OUTMOD_3;
TACTL = TASSEL_1;   // ACLK = 32768kHz
    
TACCR1 = 0x4000; // 0x4000/32768 = 0.5
TACCR0 = 0x4000;

Это настройка таймера, который тактируется от часового кварца. Режим Up (ниже выбор этого режима) и в этом случае если разрешить прерывание от CCR1 или CCR2 то оно будет происходить с частотй пол секунды. Так и есть. Первой строчкой я выбрал режим Set/Reset. Таким образом таймер досчитав до 0х4000 сигнал out сделает единицей, а на следующем такте при обнулении таймера сделает его 0. Следующий код настраивает АЦП

Код
ADC12CTL1 = SHS_1 + SHP + ADC12SSEL_3 + CONSEQ_3 + CSTARTADD_0;

/* 16 us sampling time is enough for correct sampling
SMCLK is chosen for ADC12 oscillator. For 250 kHz = 4 us
SHT1=SHT2=0 (4 clocks) -> 4us * 4 = 16 us for sampling */
ADC12CTL0 = SHT0_2 + SHT1_0;

/* Setup channels for conversation */
ADC12MCTL0 = SREF_0 + INCH_0;
ADC12MCTL1 = SREF_0 + INCH_1;
ADC12MCTL2 = SREF_0 + INCH_2;
    
/* Last channel is for reference, to estimate the bias of measurements*/
ADC12MCTL3 = SREF_3 + INCH_15 + EOS;

4 канала, тактируется от относительно быстрого SMCLK.


Код
void StartMeasuring()
{
    ADC12IE = BIT(4);
    ADC12IE = BIT(2);
    ADC12IFG = 0;
    TACTL |= TACLR + MC_1;
    ADC12CTL0 |= ADC12ON + ENC;
}

Эта функция запускает таймер и включает АЦП.

Так вот, если сделать обработчик прерывания на таймер, то он активируется с нужным периодом, но обработчик прерывания для АЦП (он вызывается по rising edge сигнала out, по идее с тем же периодом, что и прерывание таймера) вызывается в 4 раза реже 07.gif 07.gif
Что это?
Спасибо.
Go to the top of the page
 
+Quote Post



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

 


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


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