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

 
 
> MSP430F135. Осциллятор с цифровым управлением (DCO), Затактировать таймер от 200Гц
jjjjjjein
сообщение Jan 25 2012, 05:32
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 31-10-11
Пользователь №: 68 059



Нужно затактировать Таймер А от 200Гц. SMCLK тактируется от DCO, не знаю как нужную частоту получить (200Гц).
Код
void InitializationTimersMSP430 (void)                                          // Функция инициализации внутренних аппаратных таймеров микроконтроллера MSP430F135
     {
       // Общая инициализвция модуля тактирования микроконтроллера
    
       BCSCTL1 = 0x00;                                                          // Обнуление управляющего регистра BCSCTL1
       BCSCTL2 = 0x00;                                                          // Обнуление управляющего регистра BCSCTL2
       BCSCTL1 = RSEL0;                                                        // Сопротивление внутреннего резистора -> минимальное    
       BCSCTL2 = SELM_0 |                                                     // Источник тактирования MCLK -> DCO
                 DIVM_3 |                                                            // Делитель MCLK -> 8
                 SELS_0   |                                                           // Источник тактирования SMCLK -> DCO
                 DIVS_3;                                                            // Делитель SMCLK -> 8  
       DCOCTL = DCO0 |                                                        // Частота генератора ->  (??? Гц)
                MOD0 | MOD1 | MOD2 | MOD3 | MOD4;                 // Модулятор тактовой частоты DCO -> МАКСИМУМ
      LPM4;                                                                           // Низкое энергопотребление
    

       // Инициализация таймера А
       TACTL = TASSEL_2 |                                                       // Источник тактирования таймера -> сигнал SMCLK (???МГц)
               ID_3 |                                                                   // Предделитель таймера -> 8  
                MC_1;                                                                  // Режим работы таймера -> счёт вверх до значения TACCR0
            
       TACCR0 = 10000;                                                          // Счёт до значения -> 10000      
       TACCTL0 = CCIE;                                                          // Разрешение прерывания по захвату/сравнению, разрешение запроса прерывания от флага CCIFG
}
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
jjjjjjein
сообщение Jan 26 2012, 04:59
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 41
Регистрация: 31-10-11
Пользователь №: 68 059



А правильно ли написанна программа, чтобы изменять скважность ШИМа отправляя число по UART через гипертерминал от ПК к MSP430? Не знаю, как основной код программы написать, который под комментарием // Передача данных по UART.

Код
int main( void )
  {
    WDTCTL = WDTPW + WDTHOLD;                                                   // Stop watchdog timer to prevent time out reset
    _DINT();                                                                    // Запрещаем прерывания
    InitializationPortIO ();                                                    // Вызов функции инициализации портов ввода/вывода микроконтроллера
    InitializationTimersMSP430 ();                                              // Вызов функции инициализации внутренних аппаратных таймеров микроконтроллера MSP430F135
    InitializationUSART ();                                                     // Вызов функции инициализации модуля USART
    _EINT();                                                                    // Разрещаем прерывания

    while (1)
          {                                                                     // Передача данных по UART

if (Flag_1s == true)
               {
                 Transmit_UART_Debug_Info ();  
                }
     Flag_1s = false;
           }
//********************************************************************************
*********************************************************************************
******************************
void InitializationTimersMSP430 (void)                                          // Функция инициализации внутренних аппаратных таймеров микроконтроллера MSP430F135
     {
       // Общая инициализвция модуля тактирования микроконтроллера
       BCSCTL1 = 0x00;                                                          // Обнуление управляющего регистра BCSCTL1
       IFG1 &= ~XT2OFF;                                                         // XT2 = HF XTAL
         int y;                                                                 // Включение XT2
         do
           {
             IFG1 &= ~OFIFG;                                                    // Очистка флага OFIFG
            for (y = 0xFF; y > 0; y--);                                         // Задержка
           }
         while (IFG1 & OFIFG);                                                  // проверка
      
       BCSCTL2 = 0x00;                                                          // Обнуление управляющего регистра BCSCTL2
       DCOCTL = DCO0 | DCO1 | DCO2 |                                            // Частота генератора -> МАКСИМУМ (8000000 Гц)
                MOD0 | MOD1 | MOD2 | MOD3 | MOD4;                               // Модулятор тактовой частоты DCO -> МАКСИМУМ
       BCSCTL1 = RSEL0 | RSEL1 | RSEL2;                                         // Сопротивление внутреннего резистора -> МАКСИМУМ    
       BCSCTL2 = SELM_2 |                                                       // Источник тактирования MCLK -> XT2CLK
                 DIVM_0 |                                                       // Делитель MCLK -> 1
                 SELS   |                                                       // Источник тактирования SMCLK -> XT2CLK
                 DIVS_0;                                                       // Делитель SMCLK -> 1  
       LPM4;                                                                    // Генераторы DCO и LFXT1 отключены

       // Инициализация таймера А
       TACTL = TASSEL_2 |                                                       // Источник тактирования таймера -> сигнал SMCLK (8МГц)
               ID_0 |                                                           // Предделитель таймера -> 1  
                MC_1;                                                           // Режим работы таймера -> счёт вверх до значения TACCR0
            
       TACCR0 = 40000;                                                          // Счёт до значения -> 40000      
       TACCTL0 = CCIE;                                                          // Разрешение прерывания по захвату/сравнению, разрешение запроса прерывания от флага CCIFG
       CCR1 = CCR0 * PWM_value;                                                       // Скважность ШИМа
       TACCTL1 = OUTMOD_7;                                                      // Конфигурация выхода, режим сброс/установка
}


//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void InitializationPortIO (void)                                                // Функция инициализации портов ввода вывода микроконтроллера
     {
      
       // Инициализация порта ввода/вывода №3
       P3SEL |= BIT4 | BIT5;                                                    // Выводы 4 и 5 порта 3 настроены как выводы альтернативных функций (USART)
       P3DIR |= BIT4;                                                           // Вывод 4 порта 3 настраиваем как выход - TXD
       P3DIR &= ~BIT5;                                                          // Вывод 5 порта 3 настраиваем как вход - RXD0
      
       // Инициализация порта ввода/вывода №4
       P4SEL = 0x00;                                                            // Все выводы порта настроены как цыфровые линии
       P4OUT = 0x00;                                                            // На всех выводах порта установлены логические "0"
       P4DIR = 0xFF;                                                            // Все выводы порта настроены как выходы

      
       // Инициализация порта ввода/вывода №6
       P6SEL |= BIT0 | BIT1 | BIT2;                                             // Выводы 0, 1 и 2 порта 6 настроены как выводы альтернативных функций (ADC)
//       P6SEL = 0x07;
       P6DIR &= ~BIT0;                                                          // Вывод 0 порта 6 настраиваем как вход - канал ADC0
       P6DIR &= ~BIT1;                                                          // Вывод 1 порта 6 настраиваем как вход - канал ADC1
       P6DIR &= ~BIT2;                                                          // Вывод 2 порта 6 настраиваем как вход - канал ADC2
//       P6DIR = 0xF8;
       P6OUT = 0x00;
      
     }

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void InitializationUSART (void)                                                 // Функция инициализации модуля USART микроконтроллера
     {
       // Инициализации модуля USART0        
       UTCTL0 = SSEL1 | SSEL0;                                                  // Источник тактирования таймера -> сигнал SMCLK
       UCTL_0 = CHAR;                                                           // Количество бит во фрейме -> 8
       UBR00 = 0x45;                                                            // Установка коэффициента предделителя USART для скорости приёма/передачи = 115200 при тактовой частоте 8000000 МГц
       UBR10 = 0x00;                                                            // ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
||||||||||||||||||||||||||||||||||||||||||
       UMCTL0 = 0xBA;                                                           // Установка коэффициента модулятора USART для скорости приёма/передачи = 115200 при тактовой частоте 8000000 МГц
       ME1 = UTXE0 |                                                            // Включаем передатчик UART
             URXE0;                                                             // Включаем приёмник UART
       IE1 |= URXIE0;                                                           // Enable USART0 RX interrupt
//      U1CTL &= ~SWRST;                                                       //reset UART logic
     }  

//-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void UART_putChar (char c)                                                     // UART1 Transmit Subroutine. Send ony byte via UART. @param c Character to send.
      {
        while ((IFG1 & UTXIFG0) == 0);                                          // Wait for ready U1TXBUF
        U0TXBUF = c;                                                            // send data
      }

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void UART_write (const char *buf, int length)                                   // Write string buffer to UART. @param buf String buffer to send. @param length Length of string buffer.
     {
       int i;
       for (i = 0; i < length; i++)
           {
             UART_putChar (buf[i]);
           }
     }

//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 29th July 2025 - 23:58
Рейтинг@Mail.ru


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