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

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

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

Сообщение hotkey »

Psych писал(а):Хм.... ну уберите P1REN и P1OUT
Спасибо, заработало))

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

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

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

Сообщение Psych »

В начале не забудьте CCR1=10890.
Реклама
hotkey
Родился
Сообщения: 12
Зарегистрирован: Ср май 25, 2011 14:46:55

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

Сообщение hotkey »

Psych писал(а):В начале не забудьте CCR1=10890.
Спасибо) Потом думаю через case сделать без минуса из регистра.. только вот не соображу никак, забыл case напрочь..
К примеру..

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

#include  <msp430f2012.h>
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  P1SEL |= 0x06; //P1.1 = CCR0, P1.2 = CCR1
  P1DIR |= 0x06;
    TACTL = TASSEL_2 + MC_1;
    CCTL0 = OUTMOD_3;
    CCTL1 = OUTMOD_3;
    CCR0 = 12100;
    CCR1 = 10810;
    int i=0;
  for(;;)
 {
     while (!(0x08 & P1IN ))
     {
       switch(i){
         
i++;
            case 1:  
       TACTL = MC_0;
       CCR1 = 9600;
       TACTL = TASSEL_2 + MC_1;
            case 2:  
       TACTL = MC_0;
       CCR1 = 8400;
       TACTL = TASSEL_2 + MC_1;
            case 3:  
       TACTL = MC_0;
       CCR1 = 7200;
       TACTL = TASSEL_2 + MC_1;
            case 4:  
       TACTL = MC_0;
       CCR1 = 6000;
       TACTL = TASSEL_2 + MC_1;
            case 5:  
       TACTL = MC_0;
       CCR1 = 5800;
       TACTL = TASSEL_2 + MC_1;
            case 6:  
       TACTL = MC_0;
       CCR1 = 4600;
       TACTL = TASSEL_2 + MC_1;
            case 7:  
       TACTL = MC_0;
       CCR1 = 3400;
       TACTL = TASSEL_2 + MC_1;
            case 8:  
       TACTL = MC_0;
       CCR1 = 2200;
       TACTL = TASSEL_2 + MC_1;
       i=0;

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

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

Сообщение Psych »

switch(i)
{
case 1: {всякая хня}
break;
case 2: {всякая хня}
break;
......
}

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

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

Сообщение hotkey »

Psych писал(а):switch(i)
{
case 1: {всякая хня}
break;
case 2: {всякая хня}
break;
......
}

PS а нафига так код раздувать??
Вспомнить старое доброе) а то голова гуляет, а так оставлю с минусом)

Спасибо вам, очень помогли, тяжело, когда не с кем посовещаться)))
Реклама
Softcan
Родился
Сообщения: 17
Зарегистрирован: Пт апр 27, 2012 15:27:07

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

Сообщение Softcan »

Доброго дня!
Прошу сильно не пинать, только вливаюсь в тему ланчпада.

Собственно необходимо сформировать ШИМ 1 кгц со скважностью 10-100%

Для управления думал поставить инкрементный энкодер, хотя для начала и пару кнопок сгодятся.
Алгоритм такой: при включении устройства устанавливается определенный (допустим 20%) уровень скважности. Ну и далее управляя энкодером или кнопками, варьируем уровнем от 10% до 100%.

Может кто поможет в программировании под такую задачу :oops:
Реклама
Аватара пользователя
uldemir
Друг Кота
Сообщения: 7359
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

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

Сообщение uldemir »

Читать даташит на таймер и правильно его запрограммировать. Вот и весь ШИМ. Дальше написать обработку энкодера и по его событиям менять один регистр этого таймера. Ну, конечно, если нужна особая обработка "пограничных" случаев, то может потребуется обработка прерываний. А так... ничего сложного. Только читать даташиты.

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

  TACCR0 = 2000; // divider coefficient
  TACCR1 = 5;
  
  TACCTL0 = CCIE;  // включает прерывания, вроде
  TACCTL1 = OUTMOD2 + OUTMOD1 + OUTMOD0;// set/reset
    
  TACTL = TASSEL1 // SMCLK
        + MC0; // UP mode
TACCR0 делаете такой, чтобы от своей тактовой получить 1кГц, а TACCR1 - вроде, сам ШИМ и есть. Только, я не помню, выведен он у меня наружу или нет.

Судя по формулировке вопроса, обработка энкодера у вас проблем не вызывает.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Закрыто

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