Например TDA7294

Форум РадиоКот • Просмотр темы - MSP430 LaunchPad вопрос по программированию
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Ср июл 30, 2025 23:24:48

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 27 ]  1,  
Автор Сообщение
Не в сети
 Заголовок сообщения: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 14:47:50 
Родился

Зарегистрирован: Ср май 25, 2011 14:46:55
Сообщений: 12
Рейтинг сообщения: 0
Собственно программирую таймер А на микроконтроллере MSP430F2012.
Хочу создать ШИМ с периодом 100 Гц, при нажатии кнопки шаг увеличивается, в начале шаг 10% и так при каждом нажатии увеличивается.
Собственно все не проблема, кроме одного, запутался, как сделать период 100 Гц? Т.е. хочу видеть на осциллографе период в 100 Гц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 16:14:27 
Мявтор!
Аватар пользователя

Карма: 4
Рейтинг сообщений: 15
Зарегистрирован: Ср май 17, 2006 18:39:01
Сообщений: 384
Откуда: Москва
Рейтинг сообщения: 0
Допустим, таймер тактируется частотой 1.000.000 Гц, т.е. за 1 секунду он щёлкнет 1.000.000 раз. Чтобы получить 100 Гц (1/100 с), таймер должен прощёлкать до 10.000 (1.000.000\100). Вот и весь расчет :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 16:27:36 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
Вам бы руководство почитать. Там используются два регистра сравнения таймера и аппаратный выход TA0 (допустим). Соответственно прерывание от таймера не требуется. Частота какая у вас будет? Мб помогу регистры таймера расписать.

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 16:31:24 
Родился

Зарегистрирован: Ср май 25, 2011 14:46:55
Сообщений: 12
Рейтинг сообщения: 0
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 Гц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 16:53:21 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
Ну тык вы же его тактируете от DCO. Он по дефолту 1 Мгц, но естественно у него своя погрешность. Можно вывести на ножку МК сигнал SMCLK и посмотреть частоту. Поэтому у вас и в регистрах не 10000.

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

Можно распаять на плате часовой кварц (что я и сделал) и тактировать таймер от ACLK. С ним у вас частота будет примерно 100,2 гц.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 16:55:42 
Родился

Зарегистрирован: Ср май 25, 2011 14:46:55
Сообщений: 12
Рейтинг сообщения: 0
Psych писал(а):
Ну тык вы же его тактируете от DCO. Он по дефолту 1 Мгц, но естественно у него своя погрешность. Можно вывести на ножку МК сигнал SMCLK и посмотреть частоту. Поэтому у вас и в регистрах не 10000.

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

Можно распаять на плате часовой кварц (что я и сделал) и тактировать таймер от ACLK. С ним у вас частота будет примерно 100,2 гц.

В итоге что в программном коде изменить? CCR0 уж больно долго подгонять придетсяэ
Сделал 100 Гц) это безумие) 12к надо)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:00:23 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
Ну вот значит DCO у вас 1.2 Мгц. 1200000/12к=100


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:01:02 
Родился

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

Спасибо) теперь осталось разобраться с кнопкой, т.к. изменение регистров разрешено только если таймер остановлен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:04:10 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
Необязательно. Можете не останавливать, просто в момент изменения регистров(нажатия кнопки) у вас может произойти один неверный импульс---не думаю что это критично.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:07:01 
Родился

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

Ситуация в том, что когда кнопка нажимается не происходит ничего)) Т.е. убавления содержимого регистра не происходит, а просто проседает сигнал на 0,2 В.
А по идее при нажатии должно происходить следующее:
Период остается таким же, но импульс становится шире.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:09:42 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
А дребезг контактов кто устранять будет?
И во- вторых: Вы его остановили, а запускать по новой кто будет?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:11:22 
Родился

Зарегистрирован: Ср май 25, 2011 14:46:55
Сообщений: 12
Рейтинг сообщения: 0
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 раз
 }

   
 }


А по поводу дребезга, что вы имели ввиду?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:19:04 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
А ну дребезг теперь я вижу что устранили. В начале CCR1 сделайте 10800, а не 11800. Да и условие чтоб CCR1 нулём не стал.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:23:04 
Родился

Зарегистрирован: Ср май 25, 2011 14:46:55
Сообщений: 12
Рейтинг сообщения: 0
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++);
 } 
 }


Ничего не происходит при нажатии кнопки =(


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:27:24 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
У вас ножка на которой кнопка настроена на выход.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:28:56 
Родился

Зарегистрирован: Ср май 25, 2011 14:46:55
Сообщений: 12
Рейтинг сообщения: 0
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++);
    }
}


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:39:11 
Опытный кот
Аватар пользователя

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:40:50 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
hotkey писал(а):

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

Елы палы у вас там как вход настроен.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:42:21 
Родился

Зарегистрирован: Ср май 25, 2011 14:46:55
Сообщений: 12
Рейтинг сообщения: 0
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 Гц, вот изменил поэтому


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: MSP430 LaunchPad вопрос по программированию
СообщениеДобавлено: Ср май 25, 2011 17:48:47 
Опытный кот
Аватар пользователя

Карма: 6
Рейтинг сообщений: 33
Зарегистрирован: Ср мар 02, 2011 07:47:39
Сообщений: 841
Откуда: Уфа
Рейтинг сообщения: 0
Хм.... ну уберите P1REN и P1OUT


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Форум закрыт Эта тема закрыта, Вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 27 ]  1,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y