Перейти к содержанию
    

MSP430 работа с таймером

:smile3046: Вообщем извиняюсь за свою глупость, я не понимаю почему на MSP430F1611 у меня не работает таймер.

Я прочитал уже:

http://we.easyelectronics.ru/msp430/uroki-...09-taymery.html

http://habrahabr.ru/post/160769/

Вообщем может у кого завалялась прошивка с мигающими светодиодами подходящая для это микроконтроллера!?

Мне просто нужна мигалка на таймере для этого микроконтроллер. Что посидеть посмотреть на рабочий код и понять свой ошибки.

В заранее благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А без таймера уже мигает?

 

Без таймера не мигает. Ну если конечно вместо таймера задержку не использовать.

А мне надо именно с таймером, чтоб понять как он работает. Один нормальный рабочий пример чтоб я посидел и подумал :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот ссылка на примеры кода для твоего msp430 от производителя http://www.ti.com/lit/zip/slac015.

Там найдешь примеры для работы с таймером и, как раз, подумаешь почему не работает у тебя.

 

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

Изменено пользователем mib383

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот ссылка на примеры кода для твоего 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;
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

 

Можете посмотреть код?

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

 

Tip: напишите внятные комментарии к каждой строке, не просто, что делаете, а зачем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#include <io.h>


_BIC_SR(0x0020);

Не понял что вот это за строчка. Если бы тут стоял бит программа бы и не дошла до этого места.

По шагам смотрел чего и как?

Как по виду, так у тебя бы постоянно крутилось в while(1){}. А с виду просто горение светодиода.

У тебя ничего схватывать/сравнивать не будет. Ты же его выключаешь : TACCTL0 = 0;

Определись с источником тактирования. Что ты хочешь от INCLK?

 

Ну и да. На лицо полное непонимание работы МК.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Всем спасибо, все свободный!

В итоге сам нашел нормальный пример, буду его анатомировать :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
}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В итоге сам нашел нормальный пример, буду его анатомировать :D

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Было бы еще лучше если бы и свой процессор разработал, который был бы мне понятней так как соответствовал моему текущему когнитивному опыту :D

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

Люблю исследование! :D

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Было бы еще лучше если бы и свой процессор разработал, который был бы мне понятней так как соответствовал моему текущему когнитивному опыту :D

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

Люблю исследование! :D

 

Очень хороший сайт по MSP430 посмотри, в частности по таймеру http://www.shelezyakin.ru/?p=1135

http://www.shelezyakin.ru/?p=1135

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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, соответственно. Контролируют прерывание таймера, об этом чуть ниже.

Изменено пользователем Cruz21

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...