MSP430 LaunchPad вопрос по программированию

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

MSP430 LaunchPad вопрос по программированию

Сообщение hotkey »

Собственно программирую таймер А на микроконтроллере MSP430F2012.
Хочу создать ШИМ с периодом 100 Гц, при нажатии кнопки шаг увеличивается, в начале шаг 10% и так при каждом нажатии увеличивается.
Собственно все не проблема, кроме одного, запутался, как сделать период 100 Гц? Т.е. хочу видеть на осциллографе период в 100 Гц.
Реклама
Аватара пользователя
Pavel V.
Мявтор!
Сообщения: 384
Зарегистрирован: Ср май 17, 2006 18:39:01
Откуда: Москва
Контактная информация:

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Pavel V. »

Допустим, таймер тактируется частотой 1.000.000 Гц, т.е. за 1 секунду он щёлкнет 1.000.000 раз. Чтобы получить 100 Гц (1/100 с), таймер должен прощёлкать до 10.000 (1.000.000\100). Вот и весь расчет :)
Реклама
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

Вам бы руководство почитать. Там используются два регистра сравнения таймера и аппаратный выход TA0 (допустим). Соответственно прерывание от таймера не требуется. Частота какая у вас будет? Мб помогу регистры таймера расписать.

PS Тоже взял се чудо дешёвую штуковину--хочу сделать на ёе основе полноценный программатор MSP-FET430UIF.
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

Re: MSP430 LaunchPad вопрос по программированию

Сообщение hotkey »

Psych писал(а):Вам бы руководство почитать. Там используются два регистра сравнения таймера и аппаратный выход TA0 (допустим). Соответственно прерывание от таймера не требуется. Частота какая у вас будет? Мб помогу регистры таймера расписать.

PS Тоже взял се чудо дешёвую штуковину--хочу сделать на ёе основе полноценный программатор MSP-FET430UIF.
Есть код

Код: Выделить всё

#include  <msp430f2012.h>

void main(void)
{

  WDTCTL = WDTPW + WDTHOLD;
  P1SEL |= 0x06; //P1.1 = CCR0, P1.2 = CCR1
  P1DIR |= 0x0E;

 TACTL = TASSEL_2 + MC_1;
 CCTL0 = OUTMOD_3;
 CCTL1 = OUTMOD_3;
 CCR0 = 11480;
 CCR1 = 11280;
    _BIS_SR(LPM0_bits + GIE);
 for(;;)
 {
     if (!(0x08 & P1IN))  
     {
        TACTL = MC_0;
              CCR1 -= 200; 
     }
         else   
              CCR1 += 0;   
 }

   
 }
Что суда вписать, чтобы стало ровно 100 Гц, сейчас на осцилле 105,3 Гц
Мне бы принцип понять, а уже сколько будут регистры и тд, тогда пойму.
Т.к. тут подгонять не получается.
Хотел бы чтобы было в Регистре CCR0=1000, CCR1=800 и частота периода 100 Гц.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

Ну тык вы же его тактируете от DCO. Он по дефолту 1 Мгц, но естественно у него своя погрешность. Можно вывести на ножку МК сигнал SMCLK и посмотреть частоту. Поэтому у вас и в регистрах не 10000.

Можно подогнать CCR0 под 100 гц--он отвечает за частоту. CCR1 отвечает за скважиность...в вашем случае она равна 1,75%.

Можно распаять на плате часовой кварц (что я и сделал) и тактировать таймер от ACLK. С ним у вас частота будет примерно 100,2 гц.
Реклама
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

Re: MSP430 LaunchPad вопрос по программированию

Сообщение hotkey »

Psych писал(а):Ну тык вы же его тактируете от DCO. Он по дефолту 1 Мгц, но естественно у него своя погрешность. Можно вывести на ножку МК сигнал SMCLK и посмотреть частоту. Поэтому у вас и в регистрах не 10000.

Можно подогнать CCR0 под 100 гц--он отвечает за частоту. CCR1 отвечает за скважиность...в вашем случае она равна 1,75%.

Можно распаять на плате часовой кварц (что я и сделал) и тактировать таймер от ACLK. С ним у вас частота будет примерно 100,2 гц.
В итоге что в программном коде изменить? CCR0 уж больно долго подгонять придетсяэ
Сделал 100 Гц) это безумие) 12к надо)
Реклама
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

Ну вот значит DCO у вас 1.2 Мгц. 1200000/12к=100
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

Re: MSP430 LaunchPad вопрос по программированию

Сообщение hotkey »

Psych писал(а):Ну вот значит DCO у вас 1.2 Мгц. 1200000/12к=100
Спасибо) теперь осталось разобраться с кнопкой, т.к. изменение регистров разрешено только если таймер остановлен.
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

Необязательно. Можете не останавливать, просто в момент изменения регистров(нажатия кнопки) у вас может произойти один неверный импульс---не думаю что это критично.
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

Re: MSP430 LaunchPad вопрос по программированию

Сообщение hotkey »

Psych писал(а):Необязательно. Можете не останавливать, просто в момент изменения регистров(нажатия кнопки) у вас может произойти один неверный импульс---не думаю что это критично.
Ситуация в том, что когда кнопка нажимается не происходит ничего)) Т.е. убавления содержимого регистра не происходит, а просто проседает сигнал на 0,2 В.
А по идее при нажатии должно происходить следующее:
Период остается таким же, но импульс становится шире.
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

А дребезг контактов кто устранять будет?
И во- вторых: Вы его остановили, а запускать по новой кто будет?
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

Re: MSP430 LaunchPad вопрос по программированию

Сообщение hotkey »

Psych писал(а):А дребезг контактов кто устранять будет?
И во- вторых: Вы его остановили, а запускать по новой кто будет?
Конечный код такой на данный момент.

Код: Выделить всё

#include  <msp430f2012.h>

void main(void)
{

  WDTCTL = WDTPW + WDTHOLD;
  P1SEL |= 0x06; //P1.1 = CCR0, P1.2 = CCR1
  P1DIR |= 0x0E;

 TACTL = TASSEL_2 + MC_1;
 CCTL0 = OUTMOD_3;
 CCTL1 = OUTMOD_3;
 CCR0 = 12000;
 CCR1 = 11800;
    _BIS_SR(LPM0_bits + GIE);
 for(;;)
 {
     if (!(0x08 & P1IN))
     {
        TACTL = MC_0;                     //остановка
              CCR1 -= 1200;               //изменение регистра
        TACTL = TASSEL_2 + MC_1; // снова запуск
     }
           for( unsigned int s = 0; s< 20000; s++); //задержка, чтобы кнопка при нажатом состоянии выполнила изменение 1 раз
 }

   
 }
А по поводу дребезга, что вы имели ввиду?
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

А ну дребезг теперь я вижу что устранили. В начале CCR1 сделайте 10800, а не 11800. Да и условие чтоб CCR1 нулём не стал.
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

Re: MSP430 LaunchPad вопрос по программированию

Сообщение hotkey »

Psych писал(а):А ну дребезг теперь я вижу что устранили. В начале CCR1 сделайте 10800, а не 11800. Да и условие чтоб CCR1 нулём не стал.

Код: Выделить всё

#include  <msp430f2012.h>
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  P1SEL |= 0x06; //P1.1 = CCR0, P1.2 = CCR1
  P1DIR |= 0x0E;
    TACTL = TASSEL_2 + MC_1;
    CCTL0 = OUTMOD_3;
    CCTL1 = OUTMOD_3;
    CCR0 = 12000;
    CCR1 = 10800;
    _BIS_SR(LPM0_bits + GIE);
  for(;;)
 {
     if (!(0x08 & P1IN ))
     {
       if (CCR0!= 0)
     {
        TACTL = MC_0;
              CCR1 -= 1200;
        TACTL = TASSEL_2 + MC_1;
     }
     }
  for( unsigned int s = 0; s< 20000; s++);
 }  
 }
Ничего не происходит при нажатии кнопки =(
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

У вас ножка на которой кнопка настроена на выход.
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

Re: MSP430 LaunchPad вопрос по программированию

Сообщение hotkey »

Psych писал(а):У вас ножка на которой кнопка настроена на выход.
Суть в том, что данное условие, что кнопка нажата, работает в моем прошлом программировании. Не думаю, что в этом ошибка..

Вот пример с чем баловался и где все работало нормально

Код: Выделить всё

#include <msp430g2231.h>
int main(void)
{
    WDTCTL = WDTPW + WDTHOLD;                 
    P1DIR = 0x41;
    
    P1OUT = 0x00;
    
    unsigned char i=0;  

    for(;;)
    {
      if (!(0x08 & P1IN))     
     {
          if (i++ % 2)
              P1OUT = 0x01;  
          else   
             P1OUT = 0x40;          
      }
    
      for( unsigned int s = 0; s< 20000; s++);
    }
}
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

:shock: Может че то путаете? но P1DIR=0x0E не даст использовать P1.3 в качестве входа. Вбейте P1DIR|=0x06
P1REN|=0x08
P1OUT|=0x08
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

hotkey писал(а):
Вот пример с чем баловался и где все работало нормально
Елы палы у вас там как вход настроен.
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

Re: MSP430 LaunchPad вопрос по программированию

Сообщение hotkey »

Psych писал(а)::shock: Может че то путаете? но P1DIR=0x0E не даст использовать P1.3 в качестве входа. Вбейте P1DIR|=0x06
P1REN|=0x08
P1OUT|=0x08

Код: Выделить всё

#include  <msp430f2012.h>
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  P1SEL |= 0x06; //P1.1 = CCR0, P1.2 = CCR1
  P1DIR |= 0x06;
  P1REN |= 0x08;
  P1OUT |= 0x08;
    TACTL = TASSEL_2 + MC_1;
    CCTL0 = OUTMOD_3;
    CCTL1 = OUTMOD_3;
    CCR0 = 12100;
    CCR1 = 10800;
    _BIS_SR(LPM0_bits + GIE);
  for(;;)
 {
     if (!(0x08 & P1IN ))
     {
       if (CCR0!= 0)
     {
        TACTL = MC_0;
              CCR1 -= 1200;
        TACTL = TASSEL_2 + MC_1;
     }
     }
  for( unsigned int s = 0; s< 20000; s++);
 }  
 }
Не помогло(

А 12100, потому что оказалось немного не докрутил) там был период 101 Гц, вот изменил поэтому
Аватара пользователя
Psych
Опытный кот
Сообщения: 848
Зарегистрирован: Ср мар 02, 2011 07:47:39
Откуда: Уфа

Re: MSP430 LaunchPad вопрос по программированию

Сообщение Psych »

Хм.... ну уберите P1REN и P1OUT
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»