Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

08/03/2010 #1

Avatar de Vegetal Digital

Como no usar delay en la conversión A/D
Normalmente para usar el conversor del pic 16f877 uso estas instrucciones:
Código:
set_adc_channel(0);		//aca selecciono el canal de la conversion
v=read_adc();	delay_us(500);  // aca se guarda el valor de la conversion en la variable “v” y hace una espera de medio milisegundo para que termine la conversion
Mi problema es que no puedo usar el delay porque me traba el programa, probe sin poner el delay pero el valor que toma es erroneo o inestable.
Me dijeron que hay un registro que te avisa cuando la conversion esta lista, pero nose cuál es ni como usarlo en ccs. Alguien me puede ayudar?
Gracias y saludos
08/03/2010 #2

Avatar de george.manson.69

Respuesta: Como no usar delay en la conversión A/D
Bueno Vegetal Digital yo usaria una interrupcion por timer 0 o 1, que cada 1mS se desbordara y tome el valor del read_adc.

por ejemplo..

#INT_TIMER0 //Se cumplio el desbordamiento cada 1mS
void timer1(void){
set_adc_channel(0);
x=read_adc();
set_timer0(tiempo para 1mS);
}

algo asi....

para que tenga tiempo para hacer la conversion
08/03/2010 #3


Respuesta: Como no usar delay en la conversión A/D
Si la idea es realizar un muestreo cada cierto tiempo se puede utilizar el modulo CCP en modo de comparacion
09/03/2010 #4

Avatar de Vegetal Digital

Respuesta: Como no usar delay en la conversión A/D
Gracias morris888 y george.manson.69 por sus respuestas, hice lo que me dijo george.manson porque me resulta mas familiar y quedo andando bien.
De nuevo, muchas gracias!!
09/03/2010 #5

Avatar de Ferny

Respuesta: Como no usar delay en la conversión A/D
Hola

Creo que es incorrecto lo que comentabas. Cuando pones v = readadc(), lee el ADC y te devuelve inmediatamente el valor (lo que tarde en leerse el ADC). Si después de eso añades el delay(), lo que consigues es:

- Lees el ADC
- Y luego esperas (¿para qué, si ya lo has leído? -> El delay después sobra)

Espero que se entienda... Si lo que quieres es tener la medida estable, tendrías que poner el delay después de seleccionar el canal y antes de leerlo:

set_adc_channel(0);
delay_us(500);
v=read_adc();

Un saludo
09/03/2010 #6

Avatar de Vegetal Digital

Respuesta: Como no usar delay en la conversión A/D
Si ferny, tenés razón, yo creía que mientras esperaba se completaba la conversión, pero no es así. Lo comprobe haciendo mas pruebas.
gracias!!
09/03/2010 #7


Respuesta: Como no usar delay en la conversión A/D
Para mejorar las medidas lo mejor es hacer un promediado o una mediana.

Tomas ocho medidas y las sumas y despues las divides por ocho. o lo que es lo mismo mides y sumas ocho veces y rotas a la derecha 3 veces.

Un metodo mejor es el siguiente:
while
resultado=(resultado_tmp+ medida) >>1 "divido por 2"
resultado_tmp=resultado;


Pero tiene un inconveniente que las primeras medidas son malas, aunque si sabemos mas o menos los valores de partida rapidamente tomara el valor mas proximo al real.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.