PWM y LEDS

Hola buenas,

es la primera vez que escribo en el foro, así que espero estar posteando en el lugar apropiado jeje!!

Tengo la siguiente duda:
He hecho un programa para poder regular la velocidad y sentido de giro de dos motores a la vez que hago que se encienda y apaguen un par de leds; sé como actuar por ellos en separado pero cuando intento hacer que vayan las dos cosas juntas los leds van a su aire con respecto a los motores. Os pego el código que he usado y ya me decis:
///////////////
#include <movimientos.h>
#include <16F877A.h>
#device adc=16
#FUSES NOWDT, HS, NOPUT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, NOPROTECT
#use delay(clock=4000000)

#byte TRISB=0X86
#byte TRISC=0X87
#define M_IZQ PIN_B2
#define M_DER PIN_B3

////////////////////////////////////////////////////////////////////////////////
//Función: Ini_motores //
//Con esta función podemos configurar los motores. //
////////////////////////////////////////////////////////////////////////////////
void Ini_motores(void)
{
delay_ms(400);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_CLOCK_DIV_2);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_16,255,1);
setup_ccp1(CCP_PWM);
setup_ccp2(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
bit_clear(TRISC,1);
bit_clear(TRISC,2);
bit_clear(TRISB,2);
bit_clear(TRISB,3);
set_pwm1_duty(0);
set_pwm2_duty(0);
return;

}

//////////////////////////////////////////////////////////////////////////////////
//Función: Atras //
//Con esta función podemos hacemos que el seguidor vaya hacia atras, //
//además los leds parpadearán. //
//////////////////////////////////////////////////////////////////////////////////
void Atras(void)
{
output_low(M_IZQ); //El motor izquierdo gira adelante
output_low(M_DER); //El motor derecho gira hacia atras
set_pwm1_duty(1023); //Metemos un pulso del 100% en M. Izq.
set_pwm2_duty(1023); //Metemos un pulso del 100% en M. Der.
while(a<100)
{
output_high(PIN_A2); //enciendo el led
output_high(PIN_A3); //enciendo el led
delay_ms(1000); //retardo de 1s
output_low(PIN_A2); //apago
output_low(PIN_A3); //apago
delay_ms(1000);
a++;
}
output_low(PIN_A2);
output_low(PIN_A3);
return;
}

////////////////////////////////////////////////////////////////////////////////
//Función: Parada //
//Con esta función podemos hacemos que el seguidor pare. //
// //
////////////////////////////////////////////////////////////////////////////////
void Parada(void)
{
set_pwm1_duty(0); //Metemos un pulso del 0% en M. Izq.
set_pwm2_duty(0); //Metemos un pulso del 0% en M. Der.
return;
}

void main()
{
while(TRUE)
{
while(!input(PIN_C0)){}
Ini_motores();
delay_ms(2000);

Atras(); //llamo a esta función para ir atras
delay_ms(6000); //retardo para ejecutarla por 6s
Parada(); //llamo a esta función para para
delay_ms(2000); //estoy para 2s con este retardo

}
}



Es evidente que hay más funciones jeje, pero esta es de ejemplo.

Espero que me podais ayudar please.

Saludos,

Antonio.
 
Atrás
Arriba