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

 
 
> использование Timer A для генерации частоты
cornflyer
сообщение Mar 27 2008, 19:21
Сообщение #1


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

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



Надо сгенерить на выходе P1.2 частоту 38000 Гц
Кварц - внешний, 3.6 МГц
код:

// timer_A1

TACTL = 0 ; // stop

P1DIR |= BIT2 ; // output
P1SEL |= BIT2 ; // Bit = 1: Peripheral module function is selected for the pin

TACCR1 = 48 ; //
TACCTL1 = OUTMOD_4; // toggle

TACTL = BIT4 | BIT9 ;
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
cornflyer
сообщение Apr 5 2008, 10:25
Сообщение #2


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

Группа: Свой
Сообщений: 166
Регистрация: 11-07-06
Из: Dubna
Пользователь №: 18 729



Приведенный ниже код - работает!!!!
При нажатии кнопки генерация частоты ключаеца и выключаеца!
Только я вижу глазом моргание светодиода
Получилась какая-то низкая частота!
См. в конце кода продолжение экспериментов...

#include "io.h"
#include "signal.h"

#define KEYB_TEST_QUAN 1000

unsigned int i = 0 ;
unsigned int j = 0 ;
unsigned char cur = 0 ;
unsigned char last = 0 ;
unsigned int key_cnt = 0 ;
unsigned char KeybState = 0 ;


////////////////////////////////////////////////////////////////////////////////


void sound_on ( void )
{
P1OUT |= BIT7 ;
}


/////////////////////////////////////////////////////


void sound_off ( void )
{
P1OUT &= ~BIT7 ;
}


/////////////////////////////////////////////////////


int main(void)
{
volatile unsigned int i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL
BCSCTL3 |= LFXT1S_2; // 3-16 MHz range


do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?

//BCSCTL2 |= SELM_3; // MCLK = LFXT1 (safe)
BCSCTL2 |= BIT7 | BIT6 | BIT3 ;


// button
P1REN |= BIT0 ; // pull-up/pull-down option enabled
P1OUT |= BIT0 ; // pull-up selected
P1IES |= BIT0 ; // high to low interrupt
P1IE |= BIT0 ; // enable interrupt


// test pin
P1DIR |= BIT7 ; // output
P1SEL &= ~BIT7 ; // port
P1OUT &= ~BIT7 ;


// GUN
//P1DIR |= BIT2 ; // output
//P1OUT &= ~BIT2 ;


// timer_A1

TACTL = 0 ; // stop
TACCTL0 = 0 ; // toggle
TACCTL1 = BIT7 ; // toggle
TACCR1 = 0xFFFF ;
TACCR0 = 0xFFFF ;
TACTL = BIT4 | BIT9 ;

//P1DIR |= BIT2 ;
P1DIR &= ~BIT2 ;
P1SEL |= BIT2 ; // Bit = 1: Peripheral module function is selected for the pin



_EINT () ;

for ( ;; )
{
for ( i = 0 ; i < 0xFFFF ; i ++ )
for ( j = 0 ; j < 0x30 ; j ++ ) ;
//P1OUT ^= BIT2 ;
//P1DIR ^= BIT2 ;
}
return 0 ;


}


/////////////////////////////////////////////////////


interrupt ( PORT1_VECTOR ) Keyboard_Handler_1 ( void )
{
P1IE &= ~BIT0 ;

// debounce
last = P1IN ;
key_cnt = KEYB_TEST_QUAN ;
while ( key_cnt )
{
if ( ( KeybState = P1IN ) == last )
{
-- key_cnt ;
}
else
{
key_cnt = KEYB_TEST_QUAN ;
last = KeybState;
}
}

// check key
if ( ! ( KeybState & BIT0 ) )
{
//P1OUT ^= BIT2 ;
P1DIR ^= BIT2 ;
}

P1IE |= BIT0 ;
P1IFG = 0 ;
}


//////////////////////////////////////////////////////

но если я ставлю TACCR0 = 0x0064 ;
то работать перестает!
делаю так:
TACCTL0 = BIT7 ; // toggle
TACCTL1 = BIT7 ; // toggle
TACCR1 = 0x0032 ;
TACCR0 = 0x0064 ;
включаю питание - светодиод не горит
нажимаю кнопку - включился светодиод
нажимаю кнопку - продолжает гореть....
похоже проц перестает обрабатывать прерывание от кнопки....
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- cornflyer   использование Timer A для генерации частоты   Mar 27 2008, 19:21
- - rezident   КодTACTL=TASSEL_2|ID_0|TACLR; //TACLK=SMCLK/1=3.6М...   Mar 27 2008, 20:46
|- - cornflyer   мне нужно по нажатию кнопки включать/выключать ген...   Apr 1 2008, 08:35
|- - MrYuran   Цитата(cornflyer @ Apr 1 2008, 11:35) мне...   Apr 1 2008, 08:56
|- - gotty   Цитата(cornflyer @ Apr 1 2008, 11:35) мне...   Apr 1 2008, 08:58
|- - MrYuran   Цитата(gotty @ Apr 1 2008, 11:58) Вероятн...   Apr 1 2008, 09:02
- - cornflyer   сделал включение ))))) выключение почему-то не раб...   Apr 2 2008, 17:19
- - MrYuran   Цитатано когда я еще раз нажимаю на кнопочку - дио...   Apr 3 2008, 05:24
- - CAHTA_1939   у меня тут задачка, может подскажете как лучьше сд...   Apr 4 2008, 16:57
|- - CAHTA_1939   у меня тут задачка, может подскажете как лучьше сд...   Apr 4 2008, 18:00
|- - rezident   Цитата(CAHTA_1939 @ Apr 4 2008, 22:57) ну...   Apr 4 2008, 18:01
|- - CAHTA_1939   Цитата(rezident @ Apr 4 2008, 21:01) А чт...   Apr 4 2008, 18:04
- - rezident   Лучше (проще) все же оперировать битом OUT в регис...   Apr 4 2008, 17:59
- - rezident   Ну а в чем проблема-то? ТаймерА тактируется от 1-2...   Apr 4 2008, 18:23
- - cornflyer   разобрался... прерывание кнопки висело на том же п...   Apr 5 2008, 11:54


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

 


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


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