Autor Tema: Muestrear con ADC de dspic mediante timer  (Leído 2659 veces)

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

Desconectado Atenea

  • PIC10
  • *
  • Mensajes: 5
Muestrear con ADC de dspic mediante timer
« en: 25 de Febrero de 2015, 14:13:27 »
Qué tal!! Estoy viendo la manera de poder muestrear ocho entradas de voltaje variable al dspic33fj32mc204 y de acuerdo al valor de voltaje realizar un evento. Realicé mi configuración ADC pero aún no sé como manejarla mediante "barridos" con ayuda del timer. Debo leer una entrada por vez y en orden para ver cuál a variado y dependiendo de eso realizar otra acción. ¿Cómo hago esas lecturas del ADC con el timer?
Les agradecería su ayuda infinitamente  :-/
Saludos  :)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242

Desconectado Atenea

  • PIC10
  • *
  • Mensajes: 5
Re: Muestrear con ADC de dspic mediante timer
« Respuesta #2 en: 25 de Febrero de 2015, 16:03:43 »
En verdad muy agradecida KILLERJC, trabajaré en base a esa progra haciendo las modificaciones respectivas e iré comentando el desarrollo del proyecto conjuntamente con las dudas que se aparezcan.
De nuevo, gracias  :-/

Desconectado Atenea

  • PIC10
  • *
  • Mensajes: 5
Re: Muestrear con ADC de dspic mediante timer
« Respuesta #3 en: 26 de Febrero de 2015, 12:27:18 »
Hola a todos, luego de implementar el muestreador con 4 canales, quería asegurarme de que obtuviera las lecturas que ingreso sean de los voltajes ingresados. Cómo hago la conversión con el valor directo de ADC1BUFx??
El ADC es de 10 bits.

Esta es la progra para la obtención de datos:

double canal1,canal2, canal3, canal4;

int scanCounter = 0;
int sampleCounter = 0;
double x,a;

void __attribute__((interrupt, no_auto_psv)) _ADC1Interrupt(void) {

    switch (scanCounter) {
        case 0:
            canal1= ADC1BUF0;
            printf("Primer canal \n");
            __delay32(10000000); //500 ms
            printf("%f \n", canal1);
            __delay32(10000000); //500 ms
            break;

        case 1:
            canal2 = ADC1BUF1;
             printf("Segundo canal \n");
             __delay32(10000000); //500 ms
            printf("%f \n", canal2);
            __delay32(10000000); //500 ms
            break;

        case 2:
            canal3 = ADC1BUF2;
            printf("Tercer canal \n");
            __delay32(10000000); //500 ms
            printf("%f \n", canal3);
            __delay32(10000000); //500 ms
            break;

        case 3:
            canal4 = ADC1BUF3;
             printf("Cuarto canal \n");
             __delay32(10000000); //500 ms
            printf("%f \n", canal4);
            __delay32(10000000); //500 ms
            break;
           
        default:
            break;
    }

    scanCounter++;
    if (scanCounter == NUM_CHS2SCAN) {
        scanCounter = 0;
        sampleCounter++;
    }
    IFS0bits.AD1IF = 0; // Clear the ADC1 Interrupt Flag
}

Los valores que imprimen son: 5184.0000, 62912.0000, 58944.0000, 13056.0000
Y los voltajes que marcan los voltímetros son 2.90, 2.30, 2.00 y 3.5

Qué significaría ese valor si no es el nivel de escalón??

Alguien me puede dar una mano?? Les agradecería mucho.  :P
Saludos  :D
« Última modificación: 26 de Febrero de 2015, 13:39:02 por Atenea »

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Muestrear con ADC de dspic mediante timer
« Respuesta #4 en: 26 de Febrero de 2015, 13:51:38 »
Te lo respondi por MP, tenes que usar un float que te permite numeros con coma

            float canal1

            canal1=(float)(ADC1BUF0*5)/1023;
            printf("%.2f", canal1);


Por otra parte siempre deberias de leer ADC1BUF0 ya que este seria tu ultimo valor.
« Última modificación: 26 de Febrero de 2015, 16:27:14 por KILLERJC »

Desconectado Atenea

  • PIC10
  • *
  • Mensajes: 5
Re: Muestrear con ADC de dspic mediante timer
« Respuesta #5 en: 26 de Febrero de 2015, 15:24:45 »
Sí, bueno lo había cambiado para que no me salieran warning pero igual compila ahora que los dejé todos a float xD ahora me incomoda más los valores que lee para poder convertirlos  :?


 

anything