Amigos : tengo un problema que necesita solucion ya que me estan esperando por un trabajo...
tengo una persiana horizontal que va desde A hasta B , y de B a A , a peticion del usuario y utilizo un encoder para el conteo de distancia.
como el sistema tiene inercia mecanica , el encoder le va a decir al programa : el conteo llegó al seteo y lo para , pero el sistema mecanico sigue una distancia R.
es por eso que dejo que , mas alla de la orden de parar , que el encoder detecte la cantidad de pulsos reales hasta el paro total.
R es la diferencia entre el seteo y el valor real de conteo , y la idea es cargar a R para que lo sume a la vuelta cuando vaya de B a A .
Al volver , se produce a su vez una R' , que es la consecuencia de que el sistema mecanico paró más allá de A.
lo que no puedo hacer es que calcule la vuelta y asu vez ya cargue el R' para la proxima
pego el pedazo de programa:
// LLEGADA A DESTINO 2 nueva!!! //
if ( llego == 0 && cal == 0 ) // para que no entre siempre una vez que llegó
{
if ( cont == pare + dif ) // si llegó a destino...( pare es el valor de seteo )
{
x = ~x ;
unico_pare = 1 ; // evita mas de una apretada de stop
write_eeprom ( 0x04 , 1 ) ; // guarda un 1 para avisar que no hubo corte de energia
h1 = h2 = 0 ; delay_ms ( 1 ) ; // apaga el alto del puente , delay de zona muerta
l1 = 1 ; l2 = 1 ; delay_ms ( 500 ) ;// freno
l1 = l2 = 0 ; // apago el freno
delay_ms ( 2000 ) ; // inercia mecanica , el encoder sigue la cuenta
disable_interrupts ( global ) ; // para de contar el encoder
real_cont = cont ; // este es el verdadero valor con inercia mecanica
if ( x == 0 )
{
dif = 0 ;
led = real_cont = 0 ;
}
else
{
dif = real_cont - pare ;
led = real_cont = 0 ;
write_eeprom ( 0x02 , 0x00 ) ; // borro cont parte baja
write_eeprom ( 0x03 , 0x00 ) ; // borro cont parte alta
cont = 0 ;
llego = 1 ; // flag para distinguir que llegó
write_eeprom ( 0x06 , llego ) ; // graba que llego
write_eeprom ( 0x05 , sentido ) ; //graba el sentido con que venia
}
}
sentido = read_eeprom ( 0x05 ) ;
}
el conteo lo hace la int rb0
desde ya gracias!!