Autor Tema: Problemas con adc del pic 16f877  (Leído 6276 veces)

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

Desconectado pipipi

  • PIC12
  • **
  • Mensajes: 91
Problemas con adc del pic 16f877
« 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:


[font=Verdana#include <16f877.h> //pic a utilizar
#FUSES XT,NOWDT,NOPROTECT,NOPUT
#device adc=10
#use delay (clock=4000000) //Fosc=4Mhz
#include <LCD.C>
#use fast_io(a)


void main(void)
{

float temperatura;//Variable para el voltaje


lcd_init(); //Inicializa LCD
setup_adc(ADC_CLOCK_INTERNAL );



while(TRUE)//Ciclo
{
   
   
   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.


Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Problemas con adc del pic 16f877
« Respuesta #1 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.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Problemas con adc del pic 16f877
« Respuesta #2 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
  1. setup_adc(ADC_CLOCK_INTERNAL );//oscilador interno para el ADC
  2. (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.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pipipi

  • PIC12
  • **
  • Mensajes: 91
Re: Problemas con adc del pic 16f877
« Respuesta #3 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.

#include <16f877.h> //pic a utilizar
#FUSES XT,NOWDT,NOPROTECT,NOPUT
#device adc=10
#use delay (clock=4000000) //Fosc=4Mhz
#include <LCD.C>
#use fast_io(a)


void main(void)
{

float temperatura;//Variable para el voltaje


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



while(TRUE)//Ciclo
{
   
   
   
   set_adc_channel( 0 );
   delay_us(20);
   temperatura = read_adc();
   lcd_gotoxy(1,1);
   printf(lcd_putc,": %.1f  ",temperatura);
 
   

   set_adc_channel( 1 );
   delay_us(20);
   temperatura = read_adc();
   lcd_gotoxy(1,2);
   printf(lcd_putc,": %.1f  ",temperatura);
   
   
   
   set_adc_channel( 4 );
   delay_us(20);
   temperatura = read_adc();
   lcd_gotoxy(9,1);
   printf(lcd_putc,": %.1f  ",temperatura);
   
   
}

}

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas con adc del pic 16f877
« Respuesta #4 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!
No contesto mensajes privados, las consultas en el foro

Desconectado d4n13l4

  • PIC16
  • ***
  • Mensajes: 107
Re: Problemas con adc del pic 16f877
« Respuesta #5 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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas con adc del pic 16f877
« Respuesta #6 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!
No contesto mensajes privados, las consultas en el foro

Desconectado d4n13l4

  • PIC16
  • ***
  • Mensajes: 107
Re: Problemas con adc del pic 16f877
« Respuesta #7 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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Problemas con adc del pic 16f877
« Respuesta #8 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!
No contesto mensajes privados, las consultas en el foro

Desconectado alextreme7

  • PIC10
  • *
  • Mensajes: 1
Re: Problemas con adc del pic 16f877
« Respuesta #9 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  :)


 

anything