Configuração do ADC no msp430f149

Software e Hardware para uC Texas

Moderadores: andre_luis, 51

Configuração do ADC no msp430f149

Mensagempor denis neves » 29 Jan 2010 09:06

Olá a todos do fórum,

estou trabalhando à algum tempo com o msp430f149 e estou gostando bastante dele.

Tenho que configurar dois canais PWM (já estão funcionando certinho) e um canal AD (estou com dificuldades).Estou usando o IAR como compilador e programando em C.

Meu programinha:

#include "io430.h"
#include <io430x14x.h>
#include <intrinsics.h>
unsigned int i,delay;
unsigned int pwm1,pwm2;
float tempo_ativo1,tempo_ativo2; // porcentagem do pwm

#pragma vector = TIMERA0_VECTOR
__interrupt void trata_ccp0(void)
{
TACCR1= pwm1; //joga o valor do PWM1 no registrador de comparação 1
TACCR2= pwm2; //joga o valor do PWM2 no registrador de comparação 2
}


int main(void)
{
WDTCTL = WDTPW + WDTHOLD; //desabilita o watchdog
P1DIR_bit.P1DIR_0 = 1; //configura o pino P1.0 como saída
P1DIR_bit.P1DIR_2 = 1; //configura o pino P1.2 como saída
P1DIR_bit.P1DIR_3 = 1; //configura o pino P1.3 como saída
P4DIR = 0xff; //configura os pinos do port 4 como saida

//****************************************configuração dos canais de PWM*********************************************************
P1SEL_bit.P1SEL_2 = 1; //habilita a função alternativa para a saida P1.2
P1SEL_bit.P1SEL_3 = 1; //habilita a função alternativa para a saida P1.3
TACTL = TASSEL_2 + MC_1; //configura o timer A para clock secundário com contagem progressiva com módulo(0 até o valor de TACCR0)
TACCR0 = 11000; //configura a frequência do PWM para 71Hz
TACCR2 = pwm2; //configura a percentagem de ciclo ativo do canal 2 do pwm
TACCR1 = pwm1; //configura a percentagem do ciclo ativo do canal 1 do PWM
TACCTL1 = OUTMOD_7; //configura o canal 1 do PWM para saída ser apagada na comparação e setada ao atingir o valor do TACCR0
TACCTL2 = OUTMOD_7; //configura o canal 2 do PWM para saída ser apagada na comparação e setada ao atingir o valor do TACCR0
TACCTL0 = CCIE; //habilita a interrupção de captura/comparação do sinal
__enable_interrupt(); //habilita as interrupções
tempo_ativo1=50; //percentagem do tempo ativo do pwm 1
tempo_ativo2=25; //percentagem do tempo ativo do pwm 2
delay = 30000;
//*******************************************************************************************************************************

//*************************************configuração do conversor AD******************************************************************************************************************
P6DIR_bit.P6DIR_0 = 0; //habilita o pino P6.0 (A0) como entrada
P6SEL_bit.P6SEL_0 = 1; //habilita a função especial para a entrada P6.0 (A0)
ADC12CTL1 = CONSEQ_0 + CSTARTADD_0 + SHP; //um canal de conversão + salvar na memoria ADC12MEM0 + modo temporizado
ADC12CTL1 = SHS_0 + ADC12SSEL_0 + ADC12DIV_0; //disparo por software + clock ADC12OSC + divisor do clock por 1
ADC12CTL0 = REFON + REF2_5V + SHT0_0; //referencia interna ligada + referencia interna de 2V5 + tempo de amostragem = 4
ADC12MCTL0 = INCH_0; //AD com entrada no canal 0

ADC12CTL0 = ADC12ON + ENC + ADC12SC; //liga o ADC + habilita a conversão + inicia a conversão

//************************************************************************************************************************************************************************************
while(1)
{
pwm1 = (tempo_ativo1/100)*11000; //calcula o valor da percentagem para jogar no comparador 1

pwm2 = (tempo_ativo2/100)*11000; //calcula o valor da percentagem para jogar no comparador 2

P1OUT = 0x01;
for(i=0; i<= delay; i++)
{

}
P1OUT = 0x00;
for(i=0; i<= delay; i++)
{

}

ADC12MEM0 = P4OUT;

}

}

Na parte do AD estou lendo uma entrada (A0) e quero mostrar o valor dessa entrada na porta P4.
Mas a porta P4 fica apenas mostrando um valor estranho que nunca muda, creio que meu hardware esteja certo...Alimentei o AVcc e aterrei o AVss para funcionamento do modulo AD.

Gostaria que os senhores me dessem uma ajudinha para configurar o conversor AD certinho e/ou me indicar algum erro que eu tenha cometido no meu programa.

Muito obrigado a todos,

Denis.
HEY HO LET'S GO !!!
denis neves
Byte
 
Mensagens: 117
Registrado em: 25 Jul 2007 17:16

Mensagempor alessandro » 24 Fev 2010 08:36

Não vi sua configuração, mas passando o olho rapidamente:

ADC12MEM0 = P4OUT;

Não seria:

P4OUT = ADC12MEM0;


Alessandro
Alessandro
Avatar do usuário
alessandro
Byte
 
Mensagens: 278
Registrado em: 12 Out 2006 19:32


Voltar para Texas

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

cron

x