|
|
  |
MSP430 работа с таймером, Помогите разрешить проблемы с таймером, как заставить его работать |
|
|
|
Dec 12 2013, 11:19
|
Группа: Новичок
Сообщений: 5
Регистрация: 12-12-13
Пользователь №: 79 595

|
 Вообщем извиняюсь за свою глупость, я не понимаю почему на MSP430F1611 у меня не работает таймер. Я прочитал уже: http://we.easyelectronics.ru/msp430/uroki-...09-taymery.htmlhttp://habrahabr.ru/post/160769/Вообщем может у кого завалялась прошивка с мигающими светодиодами подходящая для это микроконтроллера!? Мне просто нужна мигалка на таймере для этого микроконтроллер. Что посидеть посмотреть на рабочий код и понять свой ошибки. В заранее благодарен.
|
|
|
|
|
Dec 12 2013, 18:00
|
Группа: Новичок
Сообщений: 5
Регистрация: 12-12-13
Пользователь №: 79 595

|
Цитата(MrYuran @ Dec 12 2013, 17:28)  А без таймера уже мигает? Без таймера не мигает. Ну если конечно вместо таймера задержку не использовать. А мне надо именно с таймером, чтоб понять как он работает. Один нормальный рабочий пример чтоб я посидел и подумал :D
|
|
|
|
|
Dec 13 2013, 05:49
|
Участник

Группа: Участник
Сообщений: 22
Регистрация: 4-04-12
Пользователь №: 71 177

|
Вот ссылка на примеры кода для твоего msp430 от производителя http://www.ti.com/lit/zip/slac015. Там найдешь примеры для работы с таймером и, как раз, подумаешь почему не работает у тебя. А вообще очень полезно внимательно мануал прочитать, сразу понимание резко улучшится.
Сообщение отредактировал mib383 - Dec 13 2013, 05:52
|
|
|
|
|
Dec 18 2013, 19:58
|
Группа: Новичок
Сообщений: 5
Регистрация: 12-12-13
Пользователь №: 79 595

|
Цитата(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; }
|
|
|
|
|
Dec 19 2013, 07:58
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(Timur1992 @ Dec 18 2013, 22:58)  Спасибо, уже побывал, примеры от производителя не компилировался. Какие были ошибки ? Цитата(Timur1992 @ Dec 18 2013, 22:58)  Можете посмотреть код? Ужос-ужос. Он же в инициализации болтается бесконечно. Tip: напишите внятные комментарии к каждой строке, не просто, что делаете, а зачем.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Dec 19 2013, 09:19
|
Участник

Группа: Участник
Сообщений: 29
Регистрация: 8-10-12
Пользователь №: 73 855

|
Код #include <io.h>
_BIC_SR(0x0020); Не понял что вот это за строчка. Если бы тут стоял бит программа бы и не дошла до этого места. По шагам смотрел чего и как? Как по виду, так у тебя бы постоянно крутилось в while(1){}. А с виду просто горение светодиода. У тебя ничего схватывать/сравнивать не будет. Ты же его выключаешь : TACCTL0 = 0; Определись с источником тактирования. Что ты хочешь от INCLK? Ну и да. На лицо полное непонимание работы МК.
|
|
|
|
|
Dec 19 2013, 18:53
|
Группа: Новичок
Сообщений: 5
Регистрация: 12-12-13
Пользователь №: 79 595

|
Всем спасибо, все свободный! В итоге сам нашел нормальный пример, буду его анатомировать :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 }
|
|
|
|
|
Dec 20 2013, 21:07
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Timur1992 @ Dec 19 2013, 23:53)  В итоге сам нашел нормальный пример, буду его анатомировать :D Было бы лучше и гораздо полезнее, если бы вы вместо анатомирования чужих программ, читали вдумчиво и внимательно основной документ MSP430x1xx Family User's Guide (Rev. F) - slau049f.pdf и потихоньку писали свою программу. Если проблема с аглицким, то вот тут про таймер в MSP430 на русском. Или поищите в сети тот же перевод User's Manual на русский из серии библиотеки Компела " Семейство микроконтроллеров MSP430x1xx: Руководство пользователя".
|
|
|
|
|
Dec 21 2013, 03:45
|
Группа: Новичок
Сообщений: 5
Регистрация: 12-12-13
Пользователь №: 79 595

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

Группа: Участник
Сообщений: 46
Регистрация: 23-03-11
Пользователь №: 63 817

|
Цитата(Timur1992 @ Dec 21 2013, 07:45)  Было бы еще лучше если бы и свой процессор разработал, который был бы мне понятней так как соответствовал моему текущему когнитивному опыту :D А так я нашел наилучший вариант для себя. Берем машинку разбираем и смотрим как она работает, параллельно увеличиваем понимание документацией. Люблю исследование! :D Очень хороший сайт по MSP430 посмотри, в частности по таймеру http://www.shelezyakin.ru/?p=1135http://www.shelezyakin.ru/?p=1135
|
|
|
|
|
Jan 7 2014, 16:32
|
Участник

Группа: Участник
Сообщений: 43
Регистрация: 23-01-13
Пользователь №: 75 313

|
Код 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 - Jan 7 2014, 16:34
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|