Saber frecuencia de muestreo exacta en PIC's

Pues es eso, es determinar, exactamente la velocidad de frecuencia de muestreo en los pics, como se podria hacer ¿¿, si kiero obtener aprox. 8 ksps como podria ajustar los parametros, o hay que hacer algun retardo o algo por el estilo ¿¿, alguien lo ha hecho¿¿¿. Gracias
 
Leyendo el datasheet, básicamente.
¿Te refieres a una entrada analógica o digital?
 
Pues el conversor tardará X ciclos de máquina y luego tu programa lo lee o no.
Para lo primero lee el datasheet, suele ser como un algo mas de un ciclo ciclo por bit de precisión. Para lo segundo mira a ver que y como programas.
 
creo que tengo que ajustar el timer para que cada que se interrumpa haga una nueva conversion, asi si kiero muestrear voz a 8000 khz, pues entonces lo hara exactamente
 
Hola, hay que tener en cuenta los tiempos de adquisición y de conversión ya que el ADC de aproximaciones sucesivas no es de los mas rápidos y la velocidad depende del valor a muestrear ( aunque puede ser despreciable en algunos casos). Te dejo este link donde puse la máxima frecuencia de muestreo lograble con un PIC18F2550. Yo creo que la mayoría de los pics de baja gama traen el mismo ADC.

saludos.
 
74.5 Khz, y presumen esos micros de covertir a 500ksps?, encontre un appnote donde muestrean a velocidades de 1.1Msps con10 bits, voy a intentar sacar algo de como muestrear a velocidades que queramos y si consigo lo publico.
 
El que yo usaba no era un pic, era un 80c537 con un ciclo de máquina de 1µS
Solo lo he dicho como referencia. 75kHz es suficiente para muchas cosas.
 
También hay que ser un poco cuco, si es eeprom y tarda en escribir se puede lanzar la siguiente lectura mientras se espera la grabación.
De hecho yo no tenía ningún bucle para esperar el resultado, tenía 14 instrucciones de cosas útiles y directamente leía el valor analógico.
 
No se en el pic que estás usando, pero normalmente se le da una instrucción que selecciona la entrada y luego se activa un bit que inicia la conversión, cuando esté lista se activará un bit y/o una interrupción, pero si sabes lo que tarda basta con poner unas cuantas instrucciones útiles y leer.
 
el tiempo Tac es el tiempo de adquisición, que es el tiempo que tarda en cargarse el capacitor de muestreo. Suele ser de algunos micro-segundos. El modulo ADC no avisa cuando se carga este capacitor, por lo tanto el programador debe hacer el cálculo de tiempo y ponerle un delay apropiado. En el datasheet suele estar la fórmula para calcular este tiempo.
Luego hay que sumar el tiempo de conversión. El modulo si avisa cuando la conversión termina. El programador debe especificar el preescaler del modulo ADC de acuerdo a la frecuencia del cristal usado.
 
Buenas que tal, estoy desarrollando un medidor de energía en el cual necesito almacenar muestras de tensión y corriente.
Dichas muestras se toman cada 100us simultáneamente, pero cuando tomo estos valores en la mayoría de los ejemplos dejan un delay de 50us antes de cada read_adc() :

Código:
//TENSIÓN
        set_adc_channel(1);        
        delay_us(50);                  
        Vi[cont]=read_adc(); 
        delay_us(50); 
        //CORRIENTE
        set_adc_channel(0);
        delay_us(50);
        Ii[cont]=read_adc();  
        delay_us(50);

Mi pregunta es: ¿Cuanto puedo reducir estos delay\'s? ¿En caso de tener que emplearlos como podría hacer para que no llegue a ser superior al tiempo de muestreo de 100us? ...
 
Buenas que tal, estoy desarrollando un medidor de energía en el cual necesito almacenar muestras de tensión y corriente.
Dichas muestras se toman cada 100us simultáneamente, pero cuando tomo estos valores en la mayoría de los ejemplos dejan un delay de 50us antes de cada read_adc() :

Código:
//TENSIÓN
        set_adc_channel(1);        
        delay_us(50);                  
        Vi[cont]=read_adc(); 
        delay_us(50); 
        //CORRIENTE
        set_adc_channel(0);
        delay_us(50);
        Ii[cont]=read_adc();  
        delay_us(50);
Mi pregunta es: ¿Cuanto puedo reducir estos delay\'s? ¿En caso de tener que emplearlos como podría hacer para que no llegue a ser superior al tiempo de muestreo de 100us? ...

Hola...Tengo entendido que lo de los 50uS de dealy se hace para darle tiempo al ADC y estabilizar la medición. Con tiempos menores corres el riego de mediciones inestables pero prueba en tu caso en particular como se comporta decrementandolo de a poco.
La informacion exacta sobre el tiempo de adquisición, muestreo y demás se encuentra en la hoja de datos de cada PIC en particular.
Saludos.

Ric.
 
Última edición:
Buenas, les comento que funciona perfectamente con delay's de solamente 8 us!! Es un valor propuesto por la hoja de datos. De otra manera me hubiese sido imposible implementar la interrupción propuesta. Para el que necesite ese dato. EL DELAY SE PUEDE DISMINUIR TANTO COMO EL ACD PERMITA. NO como exijen muchos ejemplos dando vuelta de 50 o 100 us (una barbaridad)
 
Buenas, les comento que funciona perfectamente con delay's de solamente 8 us!! Es un valor propuesto por la hoja de datos. De otra manera me hubiese sido imposible implementar la interrupción propuesta. Para el que necesite ese dato. EL DELAY SE PUEDE DISMINUIR TANTO COMO EL ACD PERMITA. NO como exijen muchos ejemplos dando vuelta de 50 o 100 us (una barbaridad)

Gracias por aclararlo pero seria bueno que especifiques que pic estas usando para que la informacion quede completa por que bien remarcas tú( y te lo advertí yo) depende de la data técnica del pic en sí que estés usando.

Ric.
 
... NO como exigen muchos ejemplos dando vuelta de 50 o 100 us (una barbaridad)

NO, no es así. Como dice foso en los mensajes de arriba, esos tiempos están para que al conectar el capacitor de muestreo del ADC a la señal analógica que se va a medir, ese capacitor tenga tiempo de cargarse a la tensión presente en el pin analógico.

Eso no es instantáneo porque la señal en el pin no es una fuente ideal, tiene una resistencia Thevenin equivalente. La electrónica interna del microcontrolador también agrega la resistencia del multiplexor (que se usa para seleccionar las distintas entradas analógicas), hay corrientes parásitas, etc.

Si esperás muy poco el capacitor de muestreo no llega a cargarse al 100% de la señal analógica, quizás se carga al 90% y eso resulta en que... ahora tu conversor de flamantes 10 bits termina cometiendo un error de hasta 10%, tan bueno como un conversor de 4 bits (suponiendo que el único error que existe es el de cuantización, cosa que no es así).

Para interiorizarse buscar "acquisition time" en la hoja de datos del PIC donde hay fórmulas y todo.
Dependiendo del micro puede que ni siquiera necesites usar retardos, algunos tienen un temporizador para hacer eso mismo por hardware (sampling timer creo que le dicen).

¿Cuando pasa que - como parece ser tu caso - no hace falta preocuparse por el tiempo de adquisición?: cuando la señal analógica a medir es la salida de un amplificador operacional por ejemplo, que actúa como una fuente con resistencia serie muy baja (del orden de 10 ohms o menos).

En cambio si -por ejemplo- estamos midiendo la tensión de una pila botón con un divisor resistivo, y queremos usar resistores grandes (1 Mega ohm por ejemplo) para no gastar energía de la pila para medirla; entonces ahí ya tenemos una resistencia serie equivalente de 500 Kohms.
El tiempo de adquisición va a andar en el orden de cientos de microsegundos. A ver... supongamos Cmuestreo = 25 pF (pic18f4550) y Requiv(divisor) = 500 Kohms, constante de tiempo = R*C = 12.5 us, si queremos que se cargue al 99% esperamos mínimo 4 veces eso, tiempo de adquisición ~ 50 us

Puse 2 casos extremos pero es solo para ilustrar que dependiendo de la situación a veces el tiempo de adquisición puede ser despreciable, y a veces no; pero que es una variable importante a considerar.
 
Última edición:
Atrás
Arriba