Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MSP430 работа с таймером
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
Timur1992
smile3046.gif Вообщем извиняюсь за свою глупость, я не понимаю почему на MSP430F1611 у меня не работает таймер.
Я прочитал уже:
http://we.easyelectronics.ru/msp430/uroki-...09-taymery.html
http://habrahabr.ru/post/160769/
Вообщем может у кого завалялась прошивка с мигающими светодиодами подходящая для это микроконтроллера!?
Мне просто нужна мигалка на таймере для этого микроконтроллер. Что посидеть посмотреть на рабочий код и понять свой ошибки.
В заранее благодарен.
MrYuran
А без таймера уже мигает?
Timur1992
Цитата(MrYuran @ Dec 12 2013, 17:28) *
А без таймера уже мигает?


Без таймера не мигает. Ну если конечно вместо таймера задержку не использовать.
А мне надо именно с таймером, чтоб понять как он работает. Один нормальный рабочий пример чтоб я посидел и подумал :D
mib383
Вот ссылка на примеры кода для твоего msp430 от производителя http://www.ti.com/lit/zip/slac015.
Там найдешь примеры для работы с таймером и, как раз, подумаешь почему не работает у тебя.

А вообще очень полезно внимательно мануал прочитать, сразу понимание резко улучшится.
Timur1992
Цитата(mib383 @ Dec 13 2013, 11:49) *
Вот ссылка на примеры кода для твоего msp430 от производителя http://www.ti.com/lit/zip/slac015.
Там найдешь примеры для работы с таймером и, как раз, подумаешь почему не работает у тебя.

А вообще очень полезно внимательно мануал прочитать, сразу понимание резко улучшится.

Спасибо, уже побывал, примеры от производителя не компилировался.

Вообщем я сидел, читал русское руководство к msp430x1xxx, и кое что стало проясняться
Я написал такую вот программу мигалка-метроном, но либо она не работает, либо она работает не корректно ><
Можете посмотреть код?
На изменение значение TACCR0 практический не какой реакций.

Код
#include <io.h>

void timerA_init(){
_BIC_SR(0x0020);
BCSCTL2 =0;
BCSCTL1 = 0xC4;
TACTL = TACLR; // TACTL регистр управления таймеро А, TACLR очистка таймера А
TACCTL0 = 0;  // управления захватом сравнением
TACCR0 = 0x0F0; // захват/сравнение таймер А
TACTL =0x3F0;
//TACTL =0x113;
}

int main() {

WDTCTL = WDTPW + WDTHOLD;
P1SEL&=~(0xFF);
P1DIR |= 0x1C;     //умераций с конца
P5SEL&=~(0xFF);
P5DIR |= 0xFF;

while(1){
timerA_init();
TACCTL0 &= ~CCIFG;
P1OUT ^= 0xFF;
P5OUT ^= 0xFF;

}

return 0;
}
Dog Pawlowa
Цитата(Timur1992 @ Dec 18 2013, 22:58) *
Спасибо, уже побывал, примеры от производителя не компилировался.

Какие были ошибки ?

Цитата(Timur1992 @ Dec 18 2013, 22:58) *
Можете посмотреть код?

Ужос-ужос. Он же в инициализации болтается бесконечно.

Tip: напишите внятные комментарии к каждой строке, не просто, что делаете, а зачем.
PRidon
Код
#include <io.h>


_BIC_SR(0x0020);

Не понял что вот это за строчка. Если бы тут стоял бит программа бы и не дошла до этого места.
По шагам смотрел чего и как?
Как по виду, так у тебя бы постоянно крутилось в while(1){}. А с виду просто горение светодиода.
У тебя ничего схватывать/сравнивать не будет. Ты же его выключаешь : TACCTL0 = 0;
Определись с источником тактирования. Что ты хочешь от INCLK?

Ну и да. На лицо полное непонимание работы МК.
Timur1992
Всем спасибо, все свободный!
В итоге сам нашел нормальный пример, буду его анатомировать :D

Код
#include  <signal.h>
#include  <io.h>

int main(void)
{
  WDTCTL = WDTPW + WDTHOLD;             // Stop WDT
  TACTL = TASSEL1 + TACLR;              // SMCLK, clear TAR
  CCTL0 = CCIE;                         // CCR0 interrupt enabled
  CCR0 = 0xFFF;
  P1DIR |= 0xFF;                        // P1.1 output
  TACTL |= MC1;                         // Start Timer_A in continuous mode
  _EINT();                              // Enable interrupts

  for (;;)                              
  {
    _BIS_SR(CPUOFF);                    // CPU off
    _NOP();                             // Required only for C-spy
  }
  return 0;
}

// Timer A0 interrupt service routine
interrupt(TIMERA0_VECTOR) Timer_A (void)
{
  P1OUT ^= 0xFF;                        // Toggle P5.1
CCR0 += 0xFFFF;                        // Add Offset to CCR0
}

interrupt(TIMERA1_VECTOR) Timer_A (void)
{
  P1OUT ^= BIT3;                        // Toggle P5.1
CCR0 += 0xFFF6;                        // Add Offset to CCR0
}
rezident
Цитата(Timur1992 @ Dec 19 2013, 23:53) *
В итоге сам нашел нормальный пример, буду его анатомировать :D

Было бы лучше и гораздо полезнее, если бы вы вместо анатомирования чужих программ, читали вдумчиво и внимательно основной документ MSP430x1xx Family User's Guide (Rev. F) - slau049f.pdf и потихоньку писали свою программу. Если проблема с аглицким, то вот тут про таймер в MSP430 на русском. Или поищите в сети тот же перевод User's Manual на русский из серии библиотеки Компела "Семейство микроконтроллеров MSP430x1xx: Руководство пользователя".
Timur1992
Цитата(rezident @ Dec 21 2013, 03:07) *
Было бы лучше и гораздо полезнее, если бы вы вместо анатомирования чужих программ, читали вдумчиво и внимательно основной документ MSP430x1xx Family User's Guide (Rev. F) - slau049f.pdf и потихоньку писали свою программу. Если проблема с аглицким, то вот тут про таймер в MSP430 на русском. Или поищите в сети тот же перевод User's Manual на русский из серии библиотеки Компела "Семейство микроконтроллеров MSP430x1xx: Руководство пользователя".

Было бы еще лучше если бы и свой процессор разработал, который был бы мне понятней так как соответствовал моему текущему когнитивному опыту :D
А так я нашел наилучший вариант для себя. Берем машинку разбираем и смотрим как она работает, параллельно увеличиваем понимание документацией.
Люблю исследование! :D
BigallS
Цитата(Timur1992 @ Dec 21 2013, 07:45) *
Было бы еще лучше если бы и свой процессор разработал, который был бы мне понятней так как соответствовал моему текущему когнитивному опыту :D
А так я нашел наилучший вариант для себя. Берем машинку разбираем и смотрим как она работает, параллельно увеличиваем понимание документацией.
Люблю исследование! :D


Очень хороший сайт по MSP430 посмотри, в частности по таймеру http://www.shelezyakin.ru/?p=1135
http://www.shelezyakin.ru/?p=1135
Cruz21
Код
TACTL = TACLR; // TACTL регистр управления таймеро А, TACLR очистка таймера А

ты просто таймер не включил, т.е не присвоил нужные регистры

TACTL – Timer_A Control Register, Регистр управления Таймера А. Используется для связи таймера с тактовыми сигналами и выбора режимов работы.
TASSELx, биты 8 и 9, указывают таймеру, какой из тактовых сигналов использовать.
IDx, биты 6 и 7, указывают, какой делитель частоты тактового сигнала использовать, 2, 4 или 8. Делится частота, полученная уже после применения делителя в самом генераторе тактового сигнала.
MCx, биты 4 и 5, указывают на режим работы таймера. Если они равны 0 (стоит по умолчанию) таймер полностью остановлен.
TACLR, бит 2. Если в него вписать 1, это приведет к сбросу таймера. Микроконтроллер автоматически вписывает в этот бит 0, после перезапуска таймера.
TAIE и TAIFG, биты 0 и 1, соответственно. Контролируют прерывание таймера, об этом чуть ниже.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.