Autor Tema: Coversor A/D que funciona en ISIS pero no en realidad  (Leído 2239 veces)

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

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Coversor A/D que funciona en ISIS pero no en realidad
« en: 23 de Mayo de 2012, 18:15:11 »
Hola a todos, estoy intentando realizar un ejemplo sencillo para un conversor A/D, uso la entrada AN0 del 16F877A como entrada analógica, según el valor de esta se encenderá un led u otro (de un total de 4).

Todo ello funciona correctamente en la simulación pero en el montaje no lo hace bien, algunas veces se encienden todos los leds otras ninguno, otras el segundo, vamos según le da.

Apuntar que en la realidad no he montando el LCD para no complicarlo más y además para simular la entrada analógica lo uníco que hago es poner la entrada AN0 a 1 o 0, es decir que debería ver enciendio el primer o último led, pero nada. ((MCLR está a 1 permanente)

Bueno llevo bastante tiempo intentando ver que ocurre pero nada, decir también que he probado con varios pics y no funciona con ninguno, también he cargado en el pic un programa simple de parpadeo de un led y si lo hace correctamente. (el pic y programador está bien)

Cualquier comentario será bienvenido.

De nuevo gracias a todos `por el interés

Desconectado solapower

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 209
Re: Coversor A/D que funciona en ISIS pero no en realidad
« Respuesta #1 en: 24 de Mayo de 2012, 04:45:02 »
Piensa que el puerto B tiene las salidas en colector abierto y tal como tienes el esquema y el código por ahí no aparecerá un 1 cuando se lo mandes.
Si te es fácil cambia el puerto de salida B por otro que no es de colector abierto.
Saludos

Desconectado betatierradelsur

  • PIC10
  • *
  • Mensajes: 16
Re: Coversor A/D que funciona en ISIS pero no en realidad
« Respuesta #2 en: 24 de Mayo de 2012, 14:50:48 »
Hola modifique un poco tu programa, pero ya funciona. Personalmente he tenido problema con los "fast ports" y las "ADC".

Código: [Seleccionar]
#include "18f4550.h"                    // Pic a utilizar
#device adc=10                         // Usa resolución de 10 bits
#use delay(clock=20000000)       // Cristal a utilizar
//#fuses hs,nowdt,nobrownout,nolvp,noprotect   // Fusibles
//#include "lcd.c"
//#use fast_io(b)

void main (void)
{

 float valor1,valor2;
 
 output_b(0);
 setup_adc_ports( AN0 );
 set_adc_channel(0);
 setup_adc( VSS_VDD );                     // Se indica el rango de voltaje que tendrá la entrada análoga
 setup_adc( ADC_CLOCK_div_16 );             // Indica la frecuencia que se usará el reloj del ADC ADC_CLOCK_DIV_16

 while (1)
 {
  valor2=read_adc ();                  // Hace conversión A/D
  valor1=valor2*3;               // Pasar a W/m2


  if (valor1<100)
  {
   output_b(1);
  }

  if (valor1>=100&&valor1<300)
  {
   output_b(2);
  }
   
  if (valor1>=300&&valor1<500)
  {
   output_b(3);
  }
   
  if (valor1>=500)
  {
   output_b(5);
  }
 
  delay_ms (100);
 
 }
}

Espero te funcione, saludos!

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Coversor A/D que funciona en ISIS pero no en realidad
« Respuesta #3 en: 25 de Mayo de 2012, 16:17:22 »
Gracias por vuestras respuestas, ahora tengo dos cuestiones con respecto a las dos respuestas anteriores:

1.- He leído algunos hilos sobre las resistencias pull-up. Para el puerto B del 16F877A, ¿Cual es el valor ideal de esta resistencia? (lo más leido ha sido 4k7)

2.- El puerto B, tiene unas resistencias internas pull-up que se pueden configurar, pero si no entiendo mal, estas resistencias solo las puedo utilizar si utilizo el puerto como entrada, para utilizarlo como salida, debo de instalar resistencias exteriores (4k7). ¿Esto es cierto)

3.- Como he dicho, estoy utilizando un 16F877A y al intentar compilar los cambios que nos ha hecho betatierradelsur, obtengo un error en la línea:

setup_adc( VSS_VDD );                     // Se indica el rango de voltaje que tendrá la entrada análoga

ESta línea supongo que es válida para el 18f4550 que utiliza betatierradelsur, pera para el 16f877a ¿tiene algún equivalente?

Otra vez gracias a todos por vuestra colaboración.

Desconectado ramirez

  • PIC16
  • ***
  • Mensajes: 195
Re: Coversor A/D que funciona en ISIS pero no en realidad
« Respuesta #4 en: 28 de Mayo de 2012, 17:38:55 »
He logrado que funcione, lo he hecho quitando todas las líneas del LCD, así que si no me equivoco el problema está en que el LCD debería estar en el puerto B. Ahora bien, sigo teniendo la duda de colector abierto del puerto B, ya que por lo menos los led's si se iluminan con normalidad.

¿El puerto B es a colector abierto?
¿Debo de poner resistencias pull up? ¿El valor de estas resistencias es de 4k7? (Puerto B como entrada)
Si no pongo estas resistencias ¿podría atacar un optocoplador y este un relé para obtener una salida con potencia? ¿peligraría el pic si no instalo estas resistencias pull up?

Todas estas dudas las tengo ya que no lo veo claro en el datasheet del pic.

De nuevo gracias por vuestra colaboración.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Coversor A/D que funciona en ISIS pero no en realidad
« Respuesta #5 en: 28 de Mayo de 2012, 19:28:26 »
He logrado que funcione, lo he hecho quitando todas las líneas del LCD, así que si no me equivoco el problema está en que el LCD debería estar en el puerto B. Ahora bien, sigo teniendo la duda de colector abierto del puerto B, ya que por lo menos los led's si se iluminan con normalidad.

¿El puerto B es a colector abierto?
¿Debo de poner resistencias pull up? ¿El valor de estas resistencias es de 4k7? (Puerto B como entrada)
Si no pongo estas resistencias ¿podría atacar un optocoplador y este un relé para obtener una salida con potencia? ¿peligraría el pic si no instalo estas resistencias pull up?

Todas estas dudas las tengo ya que no lo veo claro en el datasheet del pic.

De nuevo gracias por vuestra colaboración.

realmente el que cumple con esa condicion solo es el puerto RA4,

Desconectado betatierradelsur

  • PIC10
  • *
  • Mensajes: 16
Re: Coversor A/D que funciona en ISIS pero no en realidad
« Respuesta #6 en: 06 de Junio de 2012, 18:44:29 »
Pues con quitar la linea de "setup_adc( VSS_VDD ); " deberia funcionar. Por defecto funciona asi!

Con respecto a conectar un rele directo al pic, si corre peligro el pic ya que consume mas corriente de la que da el pic (experiencia propia, 2 pics muertos jeje)

Saludos!


 

anything