Autor Tema: Ayuda amigos.  (Leído 2303 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Carlos2302

  • PIC16
  • ***
  • Mensajes: 110
Ayuda amigos.
« en: 23 de Agosto de 2017, 19:52:46 »
Amigos y compañeros, estoy empezando a estudiar el micro MSP430G2553, y estoy en la parte del ADC, estoy creando el siguiente codigo
para hacer las practicas.
#include <msp430g2553.h>

/*
 * main.c
 * P1OUT&=~BIT0;         //apaga el LED
 */
int main(void) {
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer

    ADC10CTL1 |= INCH_0|ADC10SSEL_1|CONSEQ_1;//canal0, fuente reloj ACLK, secuencia de canales.
    ADC10CTL0 = SREF_1 | ADC10SHT_3 | REFON | ADC10IE | REF2_5V;
    ADC10AE0  |= BIT0|BIT1;  //Analog Enable
    ADC10CTL0 |= ADC10ON|ENC|ADC10SC;  /*El núcleo es habilitado, Enable conversion, Start conversion */
    //while(ADC10BUSY == 0)
    __delay_cycles(200);

    while(1){
        int temp = ADC10MEM;
        ADC10CTL0 &=~ ADC10ON;  /*Apagamos  */
        ADC10CTL0 &=~ ENC;
        //ADC10CTL0 &=~ ADC10SC;  //no es necesario ya q al terminar la conversion se pone a 0
        ADC10CTL0 |= ADC10ON|ENC|ADC10SC;
          //while(ADC10BUSY == 0)
        __delay_cycles(200);
       

        }

}
Al querer utilizar este ciclo
//while(ADC10BUSY == 0)
no me genera codigo para simular en proteus. Utilizo el Code Composer Studio 6. Mi me pueden ayudar les agradezco.
Sabemos que quiero esperar a que ADC10BUSY == 0 pero no se porque no me funciona el codigo.
No quiero utilizar la rutina de retardos pero no me queda de otra.
« Última modificación: 23 de Agosto de 2017, 19:56:54 por Carlos2302 »
Gracias a Dios por aquellas personas que ayudan sin esperar nada a cambio. Dios los bendiga hoy mañana y siempre.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ayuda amigos.
« Respuesta #1 en: 23 de Agosto de 2017, 20:12:41 »
Tenes un error seguramente.

Código: C
  1. #define ADC10BUSY              (0x0001)       /* ADC10 BUSY */

De este archivo ( el .h del MSP ):
http://web.eng.fiu.edu/watsonh/eel4730/Appendix/msp430g2553.h

entonces ese while queda como while( 0x1 == 0), por lo cual siempre nunca se cumpliria saltando el __delay que le sigue.

Por eso usan:

Código: C
  1. while (ADC10CTL1 & ADC10BUSY);

Donde ADC10CTL1 es el registro y hace una AND con el ADC10BUSY que es la posicion que indica el bit.

Desconectado Carlos2302

  • PIC16
  • ***
  • Mensajes: 110
Re:Ayuda amigos.
« Respuesta #2 en: 23 de Agosto de 2017, 22:19:45 »
Gracias por tu ayudad killerjc mañana voy a probar lo que me planteas. Ahora otra pregunta como hago para apagar dos bits de un registro  al mismo tiempo por ejemplo estos dos:
ADC10CTL0 &=~ ADC10ON;  /*Apagamos  */
        ADC10CTL0 &=~ ENC;
Gracias a Dios por aquellas personas que ayudan sin esperar nada a cambio. Dios los bendiga hoy mañana y siempre.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ayuda amigos.
« Respuesta #3 en: 23 de Agosto de 2017, 23:19:35 »
Asi:

Código: C
  1. ADC10CTL0 &= ~( ADC10ON | ENC );

Desconectado Carlos2302

  • PIC16
  • ***
  • Mensajes: 110
Re:Ayuda amigos.
« Respuesta #4 en: 24 de Agosto de 2017, 10:59:30 »
Killerjc gracias amigo por responder, yo lo estaba haciendo así solo que me estaba comiendo los ().
Gracias a Dios por aquellas personas que ayudan sin esperar nada a cambio. Dios los bendiga hoy mañana y siempre.