Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: pipipi en 08 de Septiembre de 2010, 19:34:48
Título: Problemas con adc del pic 16f877
Publicado por: pipipi en 08 de Septiembre de 2010, 19:34:48
Hola amigos del foro:
Recurro a ustedes por q necesito nuevamente de sus conocimientos, estoy realizando un programa con el pic 16f877 en el cual su objetivo es realizar 3 lecturas diferentes con los pines del adc del pic, ocupo voltajes de referencia para el adc, el problema que tengo es que al realizar las tres lecturas consecutivas estas se interfieren y afecta la lectura no logro conmutar las tres lecturas las cuales deben quedar bien ya que necesito realizar un control que tiene que ver con cada una de las lecturas. El programa es el siguiente:
setup_adc(ADC_CLOCK_INTERNAL );//oscilador interno para el ADC (setup_adc_ports(AN0_AN1_AN4_AN5_VREF_VREF ));//configuramos adc y voltajes de referencia
set_adc_channel( 0 ); temperatura = read_adc(); lcd_gotoxy(1,1); printf(lcd_putc,": %.1f ",temperatura);
set_adc_channel( 1 ); temperatura = read_adc(); lcd_gotoxy(1,2); printf(lcd_putc,": %.1f ",temperatura);
set_adc_channel( 4 ); temperatura = read_adc(); lcd_gotoxy(9,1); printf(lcd_putc,": %.1f ",temperatura);
}
}
[/font]
Si pudueran ayudarme porfavor se los agradeceria mucho. Gracias.
Título: Re: Problemas con adc del pic 16f877
Publicado por: pablomanieri en 08 de Septiembre de 2010, 20:04:29
Antes de realizar la lectura del canal adc y justo después de seleccionar el canal a convertir, debes esperar un cierto tiempo, hasta que se estabilice internamente el multiplexor, este tiempo está dado en la hoja de datos.
Título: Re: Problemas con adc del pic 16f877
Publicado por: AngelGris en 08 de Septiembre de 2010, 23:27:31
Además de lo expuesto por pablomanieri yo sacaría del bucle "while" las dos primeras líneas
Código: C
setup_adc(ADC_CLOCK_INTERNAL );//oscilador interno para el ADC
(setup_adc_ports(AN0_AN1_AN4_AN5_VREF_VREF ));//configuramos adc y voltajes de referencia
Y las dejaría antes que comienze el "while"; de hecho, veo que ya pusiste "setup_adc(ADC_CLOCK_INTERNAL)" antes del while.
Después de setear el canal podrías esperar unos 20uS que es a lo que se refiere pablomanieri. Como bien dijo él, en el datasheet está justo el calculo para ese tiempo.
Título: Re: Problemas con adc del pic 16f877
Publicado por: pipipi en 09 de Septiembre de 2010, 11:44:27
Hola amigos:
quiero agradecer su ayuda, el problema quedo resuelto con su aportacion, unicamente necesitaba poner un tiempo de 20us despues de seleccionar el adc a ocupar. Acontinuacion les posteo el programa para quienes necesiten algo similar. Gracias.
lcd_init(); //Inicializa LCD setup_adc(ADC_CLOCK_INTERNAL );//oscilador interno para el ADC (setup_adc_ports(AN0_AN1_AN4_AN5_VREF_VREF ));//configuramos adc y voltajes de referencia
Título: Re: Problemas con adc del pic 16f877
Publicado por: Suky en 09 de Septiembre de 2010, 12:04:26
No es para que se estabilice el multiplexor, sino para darle tiempo al capacitor interno a que se cargue con el nuevo valor de tensión. En los PIC16F ronda los 20us, pero también depende de la resistencia de la fuente. En los 18F se reduce a 2.5us!
Saludos!
Título: Re: Problemas con adc del pic 16f877
Publicado por: d4n13l4 en 09 de Septiembre de 2010, 21:37:24
hola veo que sabes como hacer programas cosa que yo desconozco, sabrias como puedo hacer un programa para el 16f877a que me entregue un valor alto cuando presiono un 1 y un valor bajo cuando presione un 2.
Saludos
Título: Re: Problemas con adc del pic 16f877
Publicado por: Suky en 09 de Septiembre de 2010, 22:20:35
La librería te devuelve en un char (Variable) la tecla pulsada, haces un if o switch y haces lo que pida la tecla presionada.
Saludos!
Título: Re: Problemas con adc del pic 16f877
Publicado por: d4n13l4 en 09 de Septiembre de 2010, 22:26:32
y esta parte del comienzo del codigo #include <16F877.h> #FUSES XT,NOWDT #use delay(clock=4000000) #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)
segun lei el fuses xt es porque se usara un oscilador externo pero yo no usare eso o es un decir y el use rs232 deberia cambiar si voy a utilizar un modulo bluetooth?
Saludos
Título: Re: Problemas con adc del pic 16f877
Publicado por: Suky en 09 de Septiembre de 2010, 22:29:20
Que vas a usar si no es un oscilador externo en un PIC16F877? Respecto a la comunicación RS232, no sé a que velocidad trabajará el módulo, pero muchos cambios no sufrirá esa directiva :?
Saludos!
Título: Re: Problemas con adc del pic 16f877
Publicado por: alextreme7 en 29 de Octubre de 2010, 12:28:34
Oye pipipi porfavor podrias poner el esquematico en Proteus para saber como conectar el circuito, de antemano gracias esque si me interesa mucho esto del ADC del PIC, Saludos :)