TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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);
}
-
¿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.
-
¿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
-
Poniendo el retardo de 50 milisegundos después de la lectura del valor? Lo has probado?
-
Acá veo un problema
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.
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.