Autor Tema: Ayuda con una entrada analogica usando un ldr  (Leído 2135 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Skenlrk

  • PIC10
  • *
  • Mensajes: 3
Ayuda con una entrada analogica usando un ldr
« 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);
}

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Ayuda con una entrada analogica usando un ldr
« Respuesta #1 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.

Desconectado Skenlrk

  • PIC10
  • *
  • Mensajes: 3
Re: Ayuda con una entrada analogica usando un ldr
« Respuesta #2 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

Desconectado ppyote

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 929
Re: Ayuda con una entrada analogica usando un ldr
« Respuesta #3 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?
PPyote... siempre estareis en mi corazon.... Te quiero Hermano...

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re: Ayuda con una entrada analogica usando un ldr
« Respuesta #4 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.
Un saludo desde Pereira - Colombia


 

anything