hola de nuevo, les molesto ahora porque estoy teniendo un problema con una función que estoy implementando en CCS C para el pic 16f877a, el cual lo que hace es detectar todo el tiempo las pulsaciones de dos botones, donde estos pueden ir presionados a distinto tiempos, para cada botón y por X pulsaciones genera una pequeña aplicación. el punto es que el conteo de las pulsaciones de los botones me va mal, porque siempre que un botón queda a la disposición del otro. ósea que supongamos que presiono el botón 1 y 2 a distinto ritmo, lo que me pasa es que el botón 2 queda sujeto a las pulsaciones que genera el botón 1. si el botón 1 está marcando las pulsaciones más lentas y el boton2 mas rápidas, esta ultima = queda contando de forma lenta igual, y no sé por qué.
además tengo que tener en consideración de los rebotes de estos botones por el cual le aplico el código:
if(!input(PIN_B4)){ //contador de posición del pistón
while(!input(PIN_B4)){} //elimino revotes
j=j-1; //decremento j para saber cuando llega al 50% (1146) el pistón
}
bueno y esta línea es la misma para el otro botón.
el código de esta parte de mi programa, la que está en la función es:
////////////////////////////////////////////////////////////////////////////////////
//
// Funcion para poner lastres a piston a su 50% de su recorrido
//
////////////////////////////////////////////////////////////////////////////////////
void lastre_piston(void){
////////////////////////////////////////////////////////////////////////////////////
//
// Variables en RAM
//
////////////////////////////////////////////////////////////////////////////////////
int h=0,i=0;
float g=0,j=0;
while(TRUE){
////////////////////////////////////////////////////////////////////////////////////
// Control lastre 1
////////////////////////////////////////////////////////////////////////////////////
if(input(PIN_B5) && h==0){ //detecta que no este a su 100% el recorrido del piston
output_high(PIN_B6); //activo la reversa del piston para dejarlo al 100% del recorrido (puente H)
output_low(PIN_B7); //desactivo el avance del piston para que retroceda (puente H)
}
else if(!input(PIN_B5) && h==0){ //detecta que el piston esta al 100% del recorrido...
g=2292; //pulsos que generado al 100% del recorrido por C0
h=1; //vandera para poner el piston al 50% de su recorrido
output_low(PIN_B6); //desactivo la reversa del piston (puente H)
output_low(PIN_B7); //desactivo el avance del piston (puente H)
delay_ms(100); //tiempo de espera antes de poner el piston al 50%
}
if(h==1 && g>1146){ //detecta que el piston todavia es mayor al 50% de su recorrido
output_low(PIN_B6); //desactivo la reversa del piston (puente H)
output_high(PIN_B7); //activo el avance del piston para dejarlo al 50% (puente H)
if(!input(PIN_C0)){ //contador de posicion del piston
while(!input(PIN_C0)){} //elimino revotes
g=g-1; //decremento g para saver cuando llega al 50% (1146) el piston
}
}
else if(h==1 && g<=1146){ //detecta que el piston esta al 50% y desactiva el puente H
output_low(PIN_B6); //desactivo la reversa del piston (puente H)
output_low(PIN_B7); //desactivo el avance del piston (puente H)
k=1; //vandera que indica que el lastre esta a 50%
}
lcd_gotoxy(1,1);
printf(lcd_putc,"M1 %f %i",g,h);
////////////////////////////////////////////////////////////////////////////////////
// Control lastre 2
////////////////////////////////////////////////////////////////////////////////////
if(input(PIN_B1) && i==0){ //detecta que no este a su 100% el recorrido del piston
output_high(PIN_B2); //activo la reversa del piston para dejarlo al 100% del recorrido (puente H)
output_low(PIN_B3); //desactivo el avance del piston para que retroceda (puente H)
}
else if(!input(PIN_B1) && i==0){ //detecta que el piston esta al 100% del recorrido...
j=2256; //pulsos que generado al 100% del recorrido por B4
i=1; //vandera para poner el piston al 50% de su recorrido
output_low(PIN_B2); //desactivo la reversa del piston (puente H)
output_low(PIN_B3); //desactivo el avance del piston (puente H)
delay_ms(100); //tiempo de espera antes de poner el piston al 50%
}
if(i==1 && j>1128){ //detecta que el piston todavia es mayor al 50% de su recorrido
output_low(PIN_B2); //desactivo la reversa del piston (puente H)
output_high(PIN_B3); //activo el avance del piston para dejarlo al 50% (puente H)
if(!input(PIN_B4)){ //contador de posicion del piston
while(!input(PIN_B4)){} //elimino revotes
j=j-1; //decremento j para saver cuando llega al 50% (1146) el piston
}
}
else if(i==1 && j<=1128){ //detecta que el piston esta al 50% y desactiva el puente H
output_low(PIN_B2); //desactivo la reversa del piston (puente H)
output_low(PIN_B3); //desactivo el avance del piston (puente H)
m=1; //vandera que indica que el lastre esta al 50%
}
lcd_gotoxy(1,2);
printf(lcd_putc,"M2 %f %i",j,i);
if(k==1 && m==1){
break;
}
}}