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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> MSP430F2013 из eZ430-F2013 + IAR для начинающих, MSP430F2013 из eZ430-F2013 + IAR для начинающих
Сергей Борщ
сообщение Sep 18 2007, 11:39
Сообщение #16


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(AlexandrM @ Sep 18 2007, 14:30) *
Есть это все, мучаю исходники. Но озарение не приходит пока sad.gif .
Начните с моргания светодиодом. Потом поморгайте через таймер. И так постепенно дойдете до
Цитата
- итого вся память занята


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Sep 18 2007, 11:42
Сообщение #17


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Цитата(jorikdima @ Sep 18 2007, 15:33) *
не готов отвечать за 2 семейство, так как работаю с 1. Что касается 1 семейства, то по крайней мере Ацп может тактироваться от MCLK. АЦП - перефирия.


Да, извиняюсь, это я мануал не вкурил до конца, оказывается АЦП от MCLK можно включить.
Go to the top of the page
 
+Quote Post
AlexandrM
сообщение Sep 18 2007, 12:25
Сообщение #18


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 9-07-07
Пользователь №: 28 991



Цитата(Юрий Санвальд @ Sep 18 2007, 14:38) *
AlexandrM, разрешите вопрос, почему именно MSP? Для какого применения хотите делать устройство? Я вот изучение микроконтроллеров в институте начинал с Atmel AVR, и хотя сейчас в основном работаю с LPC и MSP, но мне кажется что проще всего начать с какой-нибудь ATMEGA16 от Atmel, там все просто и линейно, нет кучи всяких разных клоков, спящих режимов и т.п. ИМХО конечно. Или выбрали MSP просто из-за наличия eZ430?


Прием передача по радиоканалу.
Изза того что хорошие отзывы о MSP430 + CC110x и наличия eZ430.

Цитата(Сергей Борщ @ Sep 18 2007, 14:39) *
Начните с моргания светодиодом. Потом поморгайте через таймер. И так постепенно дойдете до


Помигал smile.gif А вот на таймерах ничего не пойму:
Код
#include  <msp430x20x3.h>

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  P1DIR |= 0x01;                            // P1.0 output
  CCTL0 = CCIE;                             // CCR0 interrupt enabled
  CCR0 = 1000-1;
  TACTL = TASSEL_1 + MC_1;                  // ACLK, upmode

  _BIS_SR(LPM3_bits + GIE);                 // Enter LPM3 w/ interrupt
}

// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= 0x01;                            // Toggle P1.0
}


Вот недоходит мне что это за "1000-1". Читаю что ACLK = TACLK = 32768Hz но как вычислить чему равно должно быть CCR0 чтобы получилась 1 секунда.
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Sep 18 2007, 12:41
Сообщение #19


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Цитата(AlexandrM @ Sep 18 2007, 16:25) *
Вот недоходит мне что это за "1000-1". Читаю что ACLK = TACLK = 32768Hz но как вычислить чему равно должно быть CCR0 чтобы получилась 1 секунда.


В этом примере "1000-1" - число тактов ACLK, досчитав до которого таймер выдаст прерывание и обнулится. Если ACLK у вас 32,768 кГц то, чтобы прерывание происходило каждую секунду CCR0 = 2*32768-1.
Go to the top of the page
 
+Quote Post
AlexandrM
сообщение Sep 18 2007, 13:16
Сообщение #20


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 9-07-07
Пользователь №: 28 991



Цитата(Юрий Санвальд @ Sep 18 2007, 15:41) *
В этом примере "1000-1" - число тактов ACLK, досчитав до которого таймер выдаст прерывание и обнулится. Если ACLK у вас 32,768 кГц то, чтобы прерывание происходило каждую секунду CCR0 = 2*32768-1.


Не обижайтесь sad.gif обясните почему * 2 какая связь 2*32768-1 и 1 секундой?

Сообщение отредактировал AlexandrM - Sep 18 2007, 13:23
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Sep 18 2007, 13:42
Сообщение #21


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Цитата(AlexandrM @ Sep 18 2007, 17:16) *
Не обижайтесь sad.gif обясните почему * 2 какая связь 2*32768-1 и 1 секундой?


Насчет *2 это я ошибся wacko.gif надо "32768/2".
Смотрите: таймер считает импульсы ACLK, его частота 32,768 кГц, значит за секунду происходит 32768/2 =16384 импульсов. Т.е. если вы хотите, чтоб прерывание происходило через секунду, то в CCR0 нужно записать это число - 1 ("нулевой" такт тоже считается), за секунду счетчик дойдет до этого числа и случиться прерывание.

Только вы уверены что у вас там на плате есть внешний кварц (32768кГц обычно) для ACLK? по-моему его на плате просто нет: http://focus.ti.com/lit/ug/slau176b/slau176b.pdf
страница №10 там к XIN/XOUT ничего не подключено, есть только ВЧ-кварц на ХТ2.
Во втором семействе там вроде внутренний осциллятор есть, но может какие то особенности есть с его настройкой, я не знаю, т.к. не работал никогда 05.gif
Попробуйте переключить таймер на SMCLK, как это у меня в примере было (поменяйте только регистры под ваш контроллер), по идее он по умолчанию от DCO работает, так нормально все должно быть. Главное не сдаваться! smile.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 18 2007, 13:42
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Я же вам привел формулу. Период перезагрузки таймера равен частному от частоты тактирования и значения регистра, определяющего период перезагрузки (CCR0). Если нужен период мерцания 1Гц, то частота перезагрузки таймера нужна вдвое выше 2Гц, т.к. у светодиода будет два состояния: включен и выключен. При частоте тактирования ACLK=32768Гц значение для регистра CCR0 получается 32768Гц/2Гц-1=16384-1=16383. При частоте тактирования SMCLK=DCO (по-умолчанию без инициализации источников тактирования SMCLK около 1.1МГц) 1100000Гц/2Гц-1=550000-1=549999 Но это число больше разрядности таймера (макс. 65535). Поэтому при такой частоте тактирования 1Гц не получить. Нужно использовать предделители для SMCLK и TACLK. Предделитель SMCLK (1, 2, 4, 8) находится в регистре BCSCTL2, предделитель TACLK (1, 2, 4, 8) - в регистре TACTL. Вы в конце-концов User's Guide читали или нет?
Цитата
Блин больше все не люблю когда примеры не работают sad.gif
Вот пример, в итоге не происходит прерывания. sad.gif
В чем я не прав?

Вы правы, но не понимаете смысла инициализации WDTimer
Код
WDTCTL = WDT_MDLY_32;

Если вы загляните в хидер msp430x20x3.h, то там увидите строку
Код
#define WDT_MDLY_32         (WDTPW+WDTTMSEL+WDTCNTCL)                         /* 32ms interval (default)

которая означает, что WDTimer тактируется от SMCLK с предделителем 32768. И при значении SMCLK по-умолчанию (т.к. тактирование вы опять же не настроили) период прерываний от WDT получается 1.1МГц/32768=33,56Гц. А частота мерцаний светодиода получается около 17Гц. Т.е. вы просто не видите его мерцаний.
Go to the top of the page
 
+Quote Post
AlexandrM
сообщение Sep 18 2007, 13:50
Сообщение #23


Участник
*

Группа: Новичок
Сообщений: 46
Регистрация: 9-07-07
Пользователь №: 28 991



Цитата(Юрий Санвальд @ Sep 18 2007, 16:42) *
Насчет *2 это я ошибся wacko.gif надо "32768/2".
Смотрите: таймер считает импульсы ACLK, его частота 32,768 кГц, значит за секунду происходит 32768/2 =16384 импульсов. Т.е. если вы хотите, чтоб прерывание происходило через секунду, то в CCR0 нужно записать это число - 1 ("нулевой" такт тоже считается), за секунду счетчик дойдет до этого числа и случиться прерывание.


Извините если уже дастал но:
CCR0 = (32768 / 2)-1;
в результатет мигание индикатора приблизительно 27 сек.

Пожалуйста дайте рабочий код sad.gif Я что не попробую все не работает sad.gif
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Sep 18 2007, 14:21
Сообщение #24


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Цитата(AlexandrM @ Sep 18 2007, 17:50) *
Извините если уже дастал но:
CCR0 = (32768 / 2)-1;
в результатет мигание индикатора приблизительно 27 сек.

Пожалуйста дайте рабочий код sad.gif Я что не попробую все не работает sad.gif


Ну я выше написал уже, что не работал со вторым семейством, реального кода для него у меня нет, но все эти вещи должны работать. Обратите внимание на мое замечание насчет ACLK, почитайте юзергид насчет внутреннего осциллятора, какая у него частота по умолчанию? И светодиод не самый лучший способ отладки, он может мигать с большой частотой и вы просто этого не увидите, осциллографа часом нету? Без него сложновато с МК работать. Но можно.


Посмотрел сам (стало интересно): http://focus.ti.com/lit/ds/symlink/msp430f2013.pdf

Ничего не понял (точнее почти ничего просто не написано в разделе "oscillator and system clock") sad.gif

Тут кто-нибудь работал со второй серией MSP? Какие там особенности есть в плане этого "the internal LF oscillator"?
Go to the top of the page
 
+Quote Post
rezident
сообщение Sep 18 2007, 15:29
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата
Тут кто-нибудь работал со второй серией MSP? Какие там особенности есть в плане этого "the internal LF oscillator"?

Да ничего там сложного. Все то же самое что и в серии 1xx за исключением наличия доп. встроенного низкочастотного DCO под названием VLO и возможности переключать номиналы встроенных нагрузочных конденсаторов на выводах XIN/XOUT. А для "просветления" нужно читать не столько datasheet MSP430F2013 сколько MSP430x2xx Family User's Guide wink.gif
Хм, кварца в EZ430 похоже действительно нету. Но при желании можно припаять.
А чтобы поморгать светодиодом на EZ430 с частотой 1Гц попробуйте такую программу. Накидал быстро, но вроде без ошибок smile.gif
Код
#include <msp430x20x3.h>

void main (void)
{ WDTCTL = WDTPW + WDTHOLD;                 // остановим WD_Timer
// ---------------------------------- Инициализация источников тактирования ACLK, MCLK, SMCLK
  DCOCTL = CALDCO_1MHZ;                     // выбор DCO_1MHz
  BCSCTL1 = CALBC1_1MHZ;                    // ACLK=XT2/2=1MHz,
  BCSCTL2 = SELM_0|DIVM_0|DIVS_3;           // MCLK=DCO/1=1МГц, SMCLK=DCO/8=125кГц
// ---------------------------------- Инициализация Port1
  P1OUT = 0;                                // Port 1 сбросим
  P1DIR = BIT0;                             // P1.0 как выход
// ---------------------------------- Инициализация Timer_A
  TACTL = TASSEL_2|ID_1|TACLR;              // выбрать источник тактирования SMCLK/2=62,5кHz
  TACCR0 = 31249;                           // значение регистра CCR0, таймер считает от 0 до CCR0
  TACCTL0 = CCIE;                           // прерывание от CCR0 разрешено
  TACTL |= MC_1;                            // режим Count_UP
//-----------------------------------
  _EINT();                                  // разрешим прерывания
  while(1)                                  // основной программный цикл
  { _NOP();
  }                                         // end while
}                                           // end main

#pragma vector = TIMERA0_VECTOR
#pragma type_attribute=__interrupt
void TimerA0_ISR(void)
{ P1OUT^=BIT0;                              // инвертируем состояние LED
}


P.S. Если вы уже умудрились стереть калиброванные константы для DCO, то строки
Код
  DCOCTL = CALDCO_1MHZ;                     // выбор DCO_1MHz
  BCSCTL1 = CALBC1_1MHZ;                    // ACLK=XT2/2=1MHz,

можно закоментарить. Частота моргания светодиода изменится, но незначительно.
Go to the top of the page
 
+Quote Post
jorikdima
сообщение Sep 19 2007, 08:18
Сообщение #26


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

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



у автора нету кварца. А значит нет 32768!

Автор, решение проблемы временной задержки - тактирование таймера от SMCLK.

Честно говоря, СС1100 + MSP430 вам ПОКА не потянуть.
Go to the top of the page
 
+Quote Post
Tech
сообщение Sep 19 2007, 09:01
Сообщение #27


Участник
*

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



По MSP430 читать здесь:
http://www.compel.ru/library
http://www.gaw.ru/html.cgi/txt/app/micros/msp430/index.htm
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Sep 19 2007, 09:03
Сообщение #28


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Для AlexandrM:
Только что проверил код представленный rezident'ом, на eZ430 который есть у нас на фирме - все работает. Частоту мигания осциллографом не замерял, но визуально - 1с или очень близко. Значит и у вас все должно работать.
Go to the top of the page
 
+Quote Post

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

 


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


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