Ir ao conteúdo
  • Cadastre-se

Outro msp430 adc10 pwm 0/ 2.5v - potenciometro


Posts recomendados

Boa noite, pessoal, foi passado na faculdade uma atividade de programação em MSP430, porém estou com muita dificuldade, será que alguém poderia me ajudar a resolver esse problema? Estou enviando o enunciado e um código que eu e meu colega fez, alguém poderia analisar e dar alguma ajuda?

 

Exercicio: 

Faça um programa em C para realizar a conversão analógica para digital com VR+ = 2,5V, do valor presente no pino P1.1 do MSP430G2553 e gere um sinal PWM proporcional no pino P2.1 de 0 a 100% de “duty cycle”. Verificar o sinal gerado com um osciloscópio e mostrar o funcionamento para o professor. (Obs. observe que neste pino o timer1 (TA1.1) deve ser utilizado para gerar o PWM). 

Opcional: O sinal PWM gerado pode ser utilizado, com o devido "driver", para controlar a potência de um motor DC.

adc.txt

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Vocẽs fizeram baseados em que? Esta base penso que lhe pode dar um bom chão. Pelo enunciado, essencialmente é passar de um registro pra outro. Algo como:

-programe a entrada do mc como analógica

-programe o pino como saída pwm

-loop

-leia o valor analógico

-escreva-o no registro de controle do duttycycle pwm

-volte ao loop

 

Pra entender bit a bit seu próprio programa abaixo, é melhor dar uma olhadela no datasheet do seu mc

A princípio nem vejo necessidade de interrupção. A propósito, não tenho contato com este mc. Mas quase vislumbro que você já fez o que recomendei acima. Dica: use simulador

// Projeto ADC PWM
/*
 * Faça um programa em C para realizar a conversão analógica para digital com VR+ = 2,5V,
 * do valor presente no pino P1.1 do MSP430G2553 e gere um sinal PWM proporcional no
 * pino P2.1 de 0 a 100% de �duty cycle�.
 * Verificar o sinal gerado com um osciloscópio e mostrar o funcionamento para o professor.
 * (Obs. observe que neste pino o timer1 (TA1.1) deve ser utilizado para gerar o PWM).
*/
#include <msp430g2553.h>
#include <intrinsics.h>

unsigned int adcvlr=0;

void main(void) {
  WDTCTL = WDTPW+WDTHOLD; //DESABILITA WATCHDOG
 
  P2DIR = BIT1;
  P2OUT = BIT1;
  ADC10AE0 |= BIT1;  // configura o pino P1.1 como entrada do ADC10
  P2SEL = BIT1; // HABILITANDO TA1.1 SAÍDA PWM

  TA1CTL = TASSEL_2+ID_0+MC_1; // SMCLK=1MHz/1, MODO UP, SEM GERAR INTERRUPÇÃO
  TA1CCR0 = 16666; // T=16,666us => f~=60Hz
  TA1CCR1 = 0; // PWM 0%
  TA1CCTL1 = OUTMOD_6; // MODO DE SAIDA 6>TOOGLE/SET (GERA PWM)

  ADC10CTL1 |=  INCH_1 + SHS_0 + ADC10DIV_7 + ADC10SSEL_0 + CONSEQ_4 + ADC10IE; // Entrada 1 + clock/1 + ADC10OSC + MODO repetindo o canal singular
  ADC10CTL0 |= SREF_1 + ADC10SHT_0 + ADC10ON + MSC + REF2_5V + REFON + ADC10IE; // + ADC10IE; // Vcc>VR+ GND>VR- + SH 4 CICLOS/CLOCK + ATIVA CONVERSOR + HAB INT ADC10
 
  LPM1;
 
  __bis_SR_register(GIE);   //Habilita as interrupções GLOBALMENTE.

   ADC10CTL0 |= ENC + ADC10SC; // inicia a conversão
   

  while(1){
  }
 
}

#pragma vector = ADC10_VECTOR
__interrupt void trata_intADC(void){
   adcvlr =(16666/1023)*ADC10MEM;
   TA1CCR1 = adcvlr;
     
   ADC10CTL0 |= ENC + ADC10SC;// inicia a conversão
 }

Além, claro, de alguma noção de como o compilador trata os registros, ports e afins

 

Um driver é algo como um amplificador de potência. Pode ser um simples transistor.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!