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);
}