// 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 #include 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 }