Porgrama en C para cambio de giro de un motor de DC mediante PICS. No funciona.

Hola bueno no puedo hacer que cambie de giro mi motor de DC mediante la programación que tengo dejo las instrucciones:
Realizar un programa para operar un motor de DC empleando el circuito integrado L293D (Puente H). Realizar una rampa de aceleración con las siguientes caracteristicas: de cero a maxima velocidad en 3 segundos(para ambos sentidos).Visualizar magnitud de velocidad por el puerto B, y establecer magnitud maxima mediante potenciometro empleando el modulo de conversion analogico digital por el canal AN0(RA0). Incluir botones para tener control del sentido de giro y paro con RC0 y RC1 respectivamente.
Esta es mi programación en C:

PHP:
#include<16F883.h>
#fuses INTRC_IO,NOMCLR,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT
#use delay(clock=8000000)
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#use fast_io(E)
#byte PUERTO_A=0x05
#byte PUERTO_B=0x06
#byte PUERTO_C=0x07
#byte PUERTO_E=0x09
#bit RA0=0x05.0
#bit RA1=0x05.1
#bit RA2=0x05.2
#bit RA3=0x05.3
#bit RA4=0x05.4
#bit RA5=0x05.5
#bit RA6=0x05.6
#bit RA7=0x05.7
#bit RBO=0x06.0
#bit RB1=0x06.1
#bit RB2=0x06.2
#bit RB3=0x06.3
#bit RB4=0x06.4
#bit RB5=0x06.5
#bit RB6=0x06.6
#bit RB7=0x06.7
#bit RC0=0x07.0
#bit RC1=0x07.1
#bit RC2=0x07.2
#bit RC3=0x07.3
#bit RC4=0x07.4
#bit RC5=0x07.5
#bit RC6=0x07.6
#bit RC7=0x07.7
int16 Velocidad=0;
int16 i=0;
int16 Tiempo=0;
int Bandera_1=0;
int Bandera_2=0;
int En_stop=1;
void inicializar(void)
{
                      setup_adc(ADC_CLOCK_INTERNAL);
                      setup_port_a(sAN0);
                      set_adc_channel(0);
                                          
                       set_tris_a(0b11111111);
                       set_tris_b(0b00000000);
                       set_tris_c(0b11100011);
                      
                      PUERTO_B=0;
                      RC3=0;
                      RC4=0;
                      
                      setup_ccp1(CCP_PWM);
                      setup_timer_2(T2_DIV_BY_4,255,1);
                      set_pwm1_duty(0);
                      
}
void Rampa(void)
{
Velocidad=read_adc();
if(Velocidad>0)
{
Tiempo=3000/Velocidad;
}
for(i=0;i<Velocidad;i++)
{
set_pwm1_duty(i<<2);
PUERTO_B=i;
delay_ms(Tiempo);
}
}
void Stop(void)
{
set_pwm1_duty(0);
RC3=0;
RC4=0;
En_Stop=1;
PUERTO_B=0;
}
//Rutina Principal
 void main (void)
 {
 inicializar();
 while (TRUE)
 {
 if ((RC0==1)&&(Bandera_1==0))
 {
 Bandera_1=1;
 if((En_Stop==11)||(En_Stop==1))
 {
 En_Stop=10;
 RC3=1;
 RC4=0;
 Rampa();
 }
 else
 {
 Stop();
 }
 }
 else
 {
 if(RC0==0)
 {
 Bandera_1=0;
 delay_ms(100);
 }
 }
if ((RC1==1)&&(Bandera_2==0))
 {
 Bandera_2=1;
 if((En_Stop==10)||(En_Stop==1))
 {
 En_Stop=11;
 RC3=0;
 RC4=1;
 Rampa();
 }
 else
 {
 Stop();
 }
 }
 else
 {
 if(RC1==0)
 {
 Bandera_2=0;
 delay_ms(100);
 }
 }
           
                      }//Fin del While
            }//Fin del Main

Segun esto ya esta bien la programación pero cuando lo simulo en proteus no funciona nadamas que el primer boton pero el segundo no que es el de cambio de giro...
si alguien me pudiera ayudar se los agradesco...
anexo la simulación en proteus
 

Adjuntos

  • Motor DC.doc
    34.5 KB · Visitas: 73
Última edición por un moderador:
úes la verdad no se programar en c pero si algo en basic si quieres me dices y hay vemos que se hace
 
Atrás
Arriba