TODOPIC

Simuladores, editores de PCB, etc => Simuladores de circuitos => Mensaje iniciado por: pocher en 27 de Enero de 2003, 13:28:00

Título: Conversor A/D para PIC16F873 (by Ratsman)
Publicado por: pocher en 27 de Enero de 2003, 13:28:00
Hola a todos y en particular a tí Rastman.

Estoy probando el conversor A/D del PIC16F873 en PROTEUS, para ello encontré un ejemplo tuyo (el que le pones voz) en C de CCS y aunque convierte no saca la resolución que debiera. En lugar de sacar VRES=39mV me saca 34mV (todo ello para VREF=10V) y luego
el siguiente escalón de la rampa no se dá en 68mV (como sería lógico aunque esté mal) sino que lo saca en 73mV

¿Te importaría mandarme el archivo de dibujo .SDI del PROTEUS ?

Veo que alimentas con 10V al pin de reset

He probado también a poner los 10V en VREF+ y 0V en VREF- haciendo el cambio setup_adc_ports(RA0_ANALOG); por setup_adc_ports(RA0_RA1_ANALOG_RA3_REF); y tampoco sale bien.

La verdad es que me estoy desmoralizando, he puesto varias consultas en el foro referentes a fallos míos o del programa PROTEUS y como respuesta el más absoluto silencio.
Joer..., a ver si alguno de los que saben se hecha "pa lante" y le hecha una mano a esta alma en pena.


Un saludo
Título: RE: Conversor A/D para PIC16F873 (by Ratsman)
Publicado por: MGLSOFT en 27 de Enero de 2003, 14:06:00
Menos mal que es un simulador , sino el micro ya hubiera saltado por los aires...
Si miran las hojas tecnicas de los micros, todos los PIC y la mayoria de las marcas, la tension entre VSS y VDD sera como maximo 5 Volts.
Ademas la tension del conversor interno y su referencia sera como maximo VDD - 0,2 o 0,3 Volts.
Es posible que el Proteus reaccione en forma inteligente, respetando estas reglas de la vida real y simule que pasaria de alimentar con esa tension.

Esto para que no digas que nadie te contesta en el foro..

Je..JE...
Título: RE: Conversor A/D para PIC16F873 (by Ratsman)
Publicado por: pocher en 28 de Enero de 2003, 00:09:00
Hola a todos.

Voy a contestarme a mi mismo a ver si alguien me dice que estoy haciendo mal.
En C de CCS con la programación setup_adc_ports(RA0_ANALOG); se obtiene una entrada analógica por RA0 y se ha de utilizar como tensión de referencia la
interna de 5V (nada pues conectado en los pines 5 (VREF+) y 4 (VREF-)).
Con 5V y 8 bits la resolución es: VRES = VREF/(2 elevado a n) = 5V/256 = 19.5mV, sin embargo el simulador saca VRES= 34mV .Se utiliza como entrada analógiva una onda cuadrada con amplitud variable mediante potenciómetro a una f=1Hz.

Parámetros internos del simulador que afectan al conversor:

- ADC RC Clock Period: 4us
- ADC Minimum Adquisision Time: 20us
- ADC Sample Delay: 100ns

La programación es la siguiente:


//         ADCRastman.C

#include <16F873.h>
#device adc=8  // Representación de 10 bits por omisión
#use delay(clock=4000000,RESTART_WDT)
#fuses XT, NOWDT, PUT, BROWNOUT
#byte port_b=6

int valor;

void main()
{
   set_tris_b(0x00);
   port_b_pullups(TRUE);
   port_b=0;
   setup_adc_ports(RA0_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_adc_channel(0);
   while(1)
   {
      delay_ms(500);
      valor=read_adc();
      port_b=valor;
   }
}


Envio el fichero de dibujo .DSN y el .C por si alguien lo quiere probar y encontrar la solución a este problema.

Un saludo
Título: RE: Conversor A/D para PIC16F873 (by Ratsman)
Publicado por: pocher en 28 de Enero de 2003, 00:21:00
No han subido los ficheros. Los envio de nuevo.
Título: RE: Conversor A/D para PIC16F873 (by Ratsman)
Publicado por: adolfoadc en 28 de Enero de 2003, 02:42:00
Mira el adquisition time, para el pic16f877 a 20MHz necesita un tiempo de adquisicion minimo de 19.72us, hay una formula en los data para calcular este tiempo, puede que no le des el tiempo necesario, ademas del Tad (tiempo de adquisicion), mira si cumples estos requisitos que vienen en el data.
Título: RE: Conversor A/D para PIC16F873 (by Ratsman)
Publicado por: pocher en 29 de Enero de 2003, 06:47:00
Gracias adolfoadc, me imagino que los tiros iran por ahí.

De todas formas ya he conseguido un circuito de ADC con PIC, lo tenía delante y no lo veía: es uno de los ejemplos que vienen con el PROTEUS, eso sí está escrito en ensamblador.

Lleva una tensión de referencia de 10V en el pin VREF+ y este ejemplo sí que funciona correctamente: saca la resolución que toca (milivoltio arriba - abajo).

Para sintetizar prácticamente la resolución que saca he sustituido el potenciómetro de entrada (ya que este dá saltos de voltio en voltio) por un generador de alterna de amplitud 10V y muy baja frecuencia (mHz) y simular activando-desactivando el pause. También hay que conectar un milivoltímetro y apuntar entre cambio y cambio a qué tensiones se producen los cambios en las salidas, luego se restan estas y tienes la resolución aproximada.

Se me olvidaba si le pones el aparato del generador de señal (el que lleva ajuste fino para frecuencia y voltaje) ya no sale bien.

Habrá que investigar un poco más.

Un saludo