TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Skenlrk en 08 de Noviembre de 2012, 01:21:35

Título: Ayuda con una entrada analogica usando un ldr
Publicado por: Skenlrk en 08 de Noviembre de 2012, 01:21:35
Hola que tal soy nuevo en este mi proyecto es usando un pic 16f887 activar una entrada analogica que reciba señales de un ldr para dependiendo el voltaje active el giro de un motor de DC en un sentido o en el inverso aqui adjunto el programa que realize ayudenme si ven un error

#include <16f887.h>
#device ADC=10
#fuses noprotect, nowdt, mclr, intrc_io
#use delay(clock=8000000)


int16 l,x;       ///cambio de variable


void main()
{

setup_adc_ports(sAN0);
setup_adc(ADC_clock_internal);

do
{
delay_ms(50);
l=read_adc();
if(l!=x){
 
if(x<=410){
 output_low(pin_d0);
 output_low(pin_d1);
 }



if(x>411&&x<=612){
            output_high(pin_d0);
            output_low(pin_d1);
            delay_ms(1000);
            output_low(pin_d0);
 }


if(x>613&&x<=918){ 
            output_low(pin_d0);
            output_high(pin_d1);
            delay_ms(1000);
            output_low(pin_d1);
}
if(x>917){ 
            output_high(pin_d0);
            output_low(pin_d1);
            delay_ms(1000);
            output_low(pin_d1);
}

x=l;
}
}
while(true);
}
Título: Re: Ayuda con una entrada analogica usando un ldr
Publicado por: alperez en 08 de Noviembre de 2012, 17:25:26
¿Pero no te funciona?,
¿Por qué?
¿No hace lo que quieres que haga?
¿Y el esquema?
Para invertir el giro del motor ¿utilizas un puente H?
¿Cual es la tension de referencia del ADC?
¿VSS-VCC?

Para empezar prueba a poner el delay() despues del read_adc(). Se trata de que le de tiempo al ADC de completar la integración. Este tiempo seguramente estará en el datasheet, mira a ver que a lo mejor te quedaste corto.

Deberias agregar comentarios en los programas, es buena costumbre.
A ver con qué patas activas el motor y qué drivers utilizas.
¿Has mirado la corriente de tu motor? a ver si no puedes conectarlo directamente a la pata de la cucaracha  :5]

Espero haberte ayudado, y busca en el foro, hay muuuuuucho escrito, para CCS más todavía.
Título: Re: Ayuda con una entrada analogica usando un ldr
Publicado por: Skenlrk en 09 de Noviembre de 2012, 00:32:15
¿Pero no te funciona?,
¿Por qué?
¿No hace lo que quieres que haga?
¿Y el esquema?
Para invertir el giro del motor ¿utilizas un puente H?
¿Cual es la tension de referencia del ADC?
¿VSS-VCC?

Para empezar prueba a poner el delay() despues del read_adc(). Se trata de que le de tiempo al ADC de completar la integración. Este tiempo seguramente estará en el datasheet, mira a ver que a lo mejor te quedaste corto.

Deberias agregar comentarios en los programas, es buena costumbre.
A ver con qué patas activas el motor y qué drivers utilizas.
¿Has mirado la corriente de tu motor? a ver si no puedes conectarlo directamente a la pata de la cucaracha  :5]

Espero haberte ayudado, y busca en el foro, hay muuuuuucho escrito, para CCS más todavía.
No no funciona el motor es de 6v y si estoy utilizando el puente H estoy aliementando al micro con 5 volts y lo que se supone que qiero que realize es que por medio de una fotoresistncia me mande una señal para que mueva el motor para abrir unas persianas o para cerrarlas dependiendo dela intensidad de la luz que recibe
Título: Re: Ayuda con una entrada analogica usando un ldr
Publicado por: ppyote en 10 de Noviembre de 2012, 18:58:27
Poniendo el retardo de 50 milisegundos después de la lectura del valor? Lo has probado?
Título: Re: Ayuda con una entrada analogica usando un ldr
Publicado por: Chenao en 10 de Noviembre de 2012, 19:28:05

Acá veo un problema

Código: [Seleccionar]
delay_ms(50);
l=read_adc();

No estas seleccionando el canal por donde deseas realizar la conversión y tampoco configuras la tensión de referencia; yo la haría así para una conversión de 10 bits, observa como primero selecciono el canal y después capturo el valor de la conversión, recuerda que la conversión AD demora unos instantes así que hay que poner una delay.

Citar
void main()
  {
    int a,b;
    long conversion;
    setup_adc_ports(RA0_RA1_ANALOG_RA3_REF);
    setup_adc(adc_clock_div_32);                  // configuro el conversor análogo digital
    set_tris_b(0x00);
    set_tris_a(0xff);
    set_tris_c(0x00);
    puerto_b = 0;
    puerto_c = 0;
    do
     {
      set_adc_channel(1);
      delay_ms(10);
      conversion = read_adc();
      delay_ms(10);
     }
    while(true);
  }

Saludos.