Autor Tema: PROBLEMA CON ADC  (Leído 1938 veces)

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

Desconectado juankho

  • PIC10
  • *
  • Mensajes: 12
PROBLEMA CON ADC
« en: 19 de Julio de 2008, 15:36:18 »
 amigos del foro tengo el siguente problema deseo realiazrr un programa dependiendo si la llave esta en '0' o en '1' me prenda determinado led (enter o posicion  ) durante un periodo de tiempo hasta aca no hay problema, el inconveniente esta en que despues de hacer esto, debo leer el adc y si el valor de estes es menos a 4.5 V debo volver a prender los led si no es asi no debes hacer nada, el programa conpila bien pero al simularlo en proteus o al montarlo prende los led dependiendo de la seleccion de la llave pero la parte del adc no funciona...
no se si stoy utilizando la sentencia equivocada o configurando mal el dac

adjunto simulacion en proteus y codigo

gracias compañeros....


#include <12F675.h>
#device adc=10     // numero de bits de conversion A/D 1023 conteos
#fuses INTRC_IO,NOWDT,PUT,NOPROTECT,NOCPD,BROWNOUT
#use delay(clock=4000000)

//#use fast_io(A)

#BYTE PuertoPIC = 0x05
#bit  LLAVE        = PuertoPIC.5
#bit  ADC           = PuertoPIC.2
#bit  ENTER         = PuertoPIC.1
#bit  POSICION      = PuertoPIC.0

signed int16 t=0;//variable que almacena la lectura del adc

void retardo_segundos(int n);
 
// retardo de 'n' segundos; 0 <= n => 255
    void retardo_segundos(int n)
     {
          int j;
          for ( j=n; j> 0; j--)
          delay_ms( 1000 ); // 1 segundo
     }




//********************************************************************************
//********************************************************************************
//                                 Programa Principal
//********************************************************************************
//********************************************************************************

void main()
{
 
 // set_tris_a(0x34);
SET_TRIS_A(0b111000);   // Configuro  GP0-GP1 Como Entradas análogas el resto salidas
SETUP_COMPARATOR(NC_NC_NC_NC);//Desactivo comparadores
SETUP_ADC(ADC_CLOCK_INTERNAL);//Reloj para el ADC interno
SETUP_ADC_PORTS(AN3_ANALOG|VSS_VDD);//AN0 entrada análoga, con rango de 0 a Vdd

set_adc_channel(3);//Selecciono el canal cero del ADC
                  t = read_adc();//lee el ADC y guarda el valor leido en t

   //-Fijo las condiciones iniciales
   ENTER =       0;
   POSICION =   0;
   retardo_segundos(5);;
   
do


      
             {
   
                  if (LLAVE == 0)
                     {
                          retardo_segundos(5);
                         ENTER= 1;
                          retardo_segundos(1);
                          
                          ENTER= 0;
                          break;     
                     }
                    
                  if (LLAVE == 1)
                     {
                      
                         retardo_segundos(5);
                        POSICION = 1;
                         retardo_segundos(1);
               
                         POSICION = 0;
                       retardo_segundos(1);
               
                         POSICION = 1;
                         retardo_segundos(1);
                        
                         POSICION = 0;
                       retardo_segundos(1);
               
                         POSICION = 1;
                         retardo_segundos(1);
                        
                         POSICION = 0;
                       retardo_segundos(1);
                        
                          ENTER= 1;
                          retardo_segundos(1);
                          
                          ENTER= 0;
                    
                        break;
               
               
                      }
               
               }

               

// retardo_segundos(10);
 
while(t <= 230);

while(1);                 
}

   
   


Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PROBLEMA CON ADC
« Respuesta #1 en: 19 de Julio de 2008, 16:03:44 »
Hola.

La parte del ADC esta por fuera del do{} while();, ademas cuando sale del while con la condicion del tiempo, se queda en el while(1), solo reseteandolo volveria a leer el dato analogico.

Saludos
El papel lo aguanta todo

Desconectado juankho

  • PIC10
  • *
  • Mensajes: 12
Re: PROBLEMA CON ADC
« Respuesta #2 en: 19 de Julio de 2008, 16:12:37 »
lo que me quieres decir es que la parte de configuracion del adc debe estar dentro del do{} while(); ??

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PROBLEMA CON ADC
« Respuesta #3 en: 19 de Julio de 2008, 16:16:37 »
Hola.

No, lo que debe estar dentro es la parte de la adquisicion, el read_adc().

Saludos
El papel lo aguanta todo

Desconectado juankho

  • PIC10
  • *
  • Mensajes: 12
Re: PROBLEMA CON ADC
« Respuesta #4 en: 21 de Julio de 2008, 12:56:52 »
no conpañeros no he podido resolver mi problema,, espero su colaboracion.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PROBLEMA CON ADC
« Respuesta #5 en: 21 de Julio de 2008, 13:21:23 »
Hola.

No se si seria que se te olvido corregir el programa cuando probaste con algun otro canal, pero si quieres adquirir por el canal cero, debes colocar set_adc_channel(0) y en la configuracion del adc debes colocar SETUP_ADC_PORTS(AN0); y recuerda que la parte de t=read_adc(); debe ir dentro del do{}while()

Saludos
El papel lo aguanta todo