Autor Tema: Lectura de ADC a través de varios canales  (Leído 1708 veces)

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

Desconectado Tercio

  • PIC10
  • *
  • Mensajes: 27
Lectura de ADC a través de varios canales
« en: 04 de Agosto de 2014, 18:05:47 »
Hola,

Escribo para aclarar una duda que se me presento con el modulo ADC, resulta que estoy utilizando un PIC que solo tiene un modulo ADC y tiene 14 canales como entradas analógicas. Ya tengo funcionando el ADC a través de 1 un canal analógico, ahora lo que quiero es hacer la lectura de dos entradas analógicas con un solo ADC y lo que hago es un switch cada determinado tiempo intercalando la lectura analógica, pero en los resultados solo me funciona una entrada. Entonces me gustaría saber si esto es posible, como lo puedo hacer o que método puedo implementar.     

Desconectado jhozate

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1698
Re: Lectura de ADC a través de varios canales
« Respuesta #1 en: 04 de Agosto de 2014, 18:13:28 »
como bien dices Es un solo ADC y se multiplexan los canales, pon el código para saber como lo haces
Ser Colombiano es un Premio, Saludos desde CALI-COLOMBIA

Desconectado Tercio

  • PIC10
  • *
  • Mensajes: 27
Re: Lectura de ADC a través de varios canales
« Respuesta #2 en: 04 de Agosto de 2014, 18:34:23 »
void main(void) {

    OSCCON = 0X70;           
    TRISC = 0;                   
    LATC = 0;
    TRISE = 0;                   
    LATE = 0;
                                 //setup ADC

    TRISBbits.TRISB2 = 1;        //Potentiometor connected to RB2... set as input
    ANSELBbits.ANSB2 = 1;        //analog

    TRISAbits.TRISA1 = 1;
    ANSELAbits.ANSA1 = 1;

    ADCON1 = 0b00100000;         //left justified - Fosc/32 speed - Vref is Vdd

                                 //setup PWM
    CCP1CON = 0b00001100;        //PWM mode single output
    CCP2CON = 0b00001100;
    PR2 = 255;                   

    CCPTMRS0bits.C1TSEL = 0b00;  //slect timer2 as PWM source
    CCPTMRS0bits.C3TSEL = 0b00;

    T2CONbits.T2CKPS = 0b00;     //1:1 pre-escaler
    T2CONbits.TMR2ON = 1;        //start the PWM


    while(1){
    __delay_us(5);                              //wait for ADC charging cap to settle
    GO = 1;                                     //start the ADC conversion


    while (GO) continue;                        //wait for conversion to be finished

    ADCON0 = 0b00000101;                   //Select RA1 as source of ADC and enable the module (AN1)
    CCPR2L = ADRESH;                            //put the top 8 MSbs into CCPR2L
    CCP2CONbits.DC2B = (ADRESL>>6);             //put the 2 LSbs into DC1B register to complete the 10bit resolution

    __delay_us(5000);
   
    ADCON0 = 0b00100001;                        //Select RB2 as source of ADC and enable the module (AN8)
    CCPR1L = ADRESH;                            //put the top 8 MSbs into CCPR2L
    CCP1CONbits.DC1B = (ADRESL>>6);             //put the 2 LSbs into DC1B register to complete the 10bit resolution


    }
}

Desconectado Tercio

  • PIC10
  • *
  • Mensajes: 27
Re: Lectura de ADC a través de varios canales
« Respuesta #3 en: 05 de Agosto de 2014, 17:01:44 »
El código que anexo es con el que estoy trabajando entonces quisiera saber si estoy haciendo bien las cosas o estoy cometiendo algún error.

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Lectura de ADC a través de varios canales
« Respuesta #4 en: 05 de Agosto de 2014, 19:09:01 »
Yo veo algo. Pones el GO = 1 solo 1 vez, y si quieres convertir 2 canales deberias ponerlo 2 veces (1 x canal).

Tambien veo que inicias la conversion y luego seleccionas el canal, el orden seria al contrario, primero seleccionas el canal: ADCON0 = 0b00000101;                   //Select RA1 as source of ADC and enable the module (AN1) y luego el GO=1;


 

anything