control motor dc pwm con flancos positivos(pulsadores)

buenas noches, a estas alturas mi cerebro ya no responde ni colocandome un disipador de calor jeje :confused:en fin...quisiera que alguien me ayude respecto al control de un motor dc, el esquema va asi:cool:: en el portb.f0 tengo un pulsador y en el portb.f1 otro pulsador, los dos activan con flancos positivos es decir envian "1" al pic 16f877a en el portc.f2(que es el cpp1) esta el motor dc( claro esta en el proteus jeje:)) la idea que tengo es la de controlar la velocidad del motor con los pulsadores, por ejemplo con el pin0 del portb incrementar y con el otro decrementar,pero el problema es como guardo el valor de la tabla para despues decrementarlo?:unsure: me explico mejor:si por ejemplo con el boton de incremento llegue a 40% de la velocidad...como hago para decrementar la tabla? mi otra duda que si es en lo que estoy perdido es en los flancos, es decir que solo debe permitir el incremento por pulsos y no si lo mantengo presionado bueno aqui les dejo el programa que hice...permite incrementar y decrementar la velocidad del motor pero de forma automatica uso el pic 16f877a y como compilador el mikroc espero que puedan ayudarme y darme una manito jeje desdea ya gracias por la atencion suerte!:D

void main()
{
int a,b;
//estas tablas las uso para guargar las velocidades del duty cicle
int velup[14]={10,20,35,45,55,65,80,100,120,150,180,200,220,240};
int veldown[14]={240,220,200,180,150,120,100,80,65,55,45,35,20,10};
trisc=0;
pwm_init(333);
pwm_start();
x1:
//esto vendria a ser como un apuntador de tabla
for(a=0;a<14;++a)
{
b=velup[a]; //guardo en "b"el valor en el que apunta "a" en la tabla
pwm_change_duty(b);//y lo enviao el pin rc2
delay_ms(3000);
}
delay_ms(8000);
//lo mismo seria para decrementar
for(a=0;a<14;++a)
{
b=veldown[a];
pwm_change_duty(b);
delay_ms(3000);
}
delay_ms(8000);
goto x1;
}
 
Que tal, yo también voy un poco safado!!!, espero te ayude...
Haber, para reemplazar eso por pulsadores debes de manejar el puntero teniendo como límite la longitud del array y no es necesario dos array con los mismo datos... seria algo así:

Código:
inicia PWM con velocidad baja (por ejemplo),
inicia 'Index' en cero,
inicia 'IndexB' en cero 

Bucle:
   > Si pulsador A = 1, entonces 'Index' + 1 sin superar el límite del array.
         y espera a que pulsador A = 0 para continuar...
   > Si pulsador B = 1, entonces 'Index' - 1 pero solo hasta el mínimo del array.
         y espera a que pulsador B = 0 para continuar...
   > Si 'Index' es distinto a 'IndexB' (hay un nuevo dato), entonces
         actualiza 'IndexB' = 'Index'
         y carga PWM con el nuevo valor.
   > continua en Bucle.

saludos.
 
Atrás
Arriba