Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[Informatica II] Explicacion de la funcion Antirebote
Autor Mensaje
goncar87 Sin conexión
Secretario de la SAE
Y... es fisica cuantica!
******

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 404
Agradecimientos dados: 41
Agradecimientos: 325 en 69 posts
Registro en: Feb 2012
Mensaje: #1
[Informatica II] Explicacion de la funcion Antirebote Apuntes y Guias Informática II (Electrónica)
Hola gente como andan? Fer me pidió que le explique la función de anti-rebote. Hay miles funciones distintas de antirebote. Pero esta es la funcion mas sensilla para mi. Lo dio el año pasado Fresno. No se si siguen usando la misma funcion. pero si entienden esta funcion, pueden entender cualquier otra funcion de antirebote ya que es el mismo objetivo.

Espero no equivocarme en alguna parte. Si encuentran algún error me pueden avisar. No es para compilar ya que es una función nada mas.

Breve explicacion:
La idea del antirebote es basicamente estar seguro que realmente esta presionando/sensando alguna entrada que no sea por ruido.
Generalmente el ruido cambia el estado de un bit y vuelve muy rapido. En cambio en el caso de presionando y sensando, es mucho mayor el tiempo.
Por eso comparamos el Estado_Actual y el Estado_Anterior, si son iguales se suma el contador. Para saber si es ruido o esta realmente Sensando/Presionando, el contador tiene que llegar a 10. (puede ser 5 o 20 o cualquier numero que estes seguro de que el ruido no llega a esa cantidad).

Codigo paso a paso:


Void Antirebote_sensores (void)
{
Estado_Actual= P_Sensores; //copia el estado del puerto donde recibe todas las señales de los sensores.
for(i=0; i< Cant_Sensores; i++)
{
if((Estado_Actual&(0x01<<i))==(Estado_Anterior&(0x01<<i)) //Compara bit por bit de cada variable si son iguales
{
/* (Estado_Actual&(0x01<<i)) si no lo tenes muy en claro, hay que estudiar las mascaras (AND (&), OR (|) y NOT (~)). (INFO 1). Basicamente lo que hace es poner todo en cero todos los bits menos el que esta en la posicion i (que puede estar en cero o en uno)*/
Contador [i]++; // si el bit de cada variable (en la misma posicion) son iguales suma el contador.
if(Contador[i]> Cant_Max_Antirebote) //Cant_Max_Antirebote = 10 por #define, que si el contador llega a 10 es por que realmente estas presionando/sensando. En caso de ruido no llega a contar 10 ciclos del for de la igualdad
{
if(Estado_Actual&(0x01<<i)) //comprueba si el bit de la posicion i del Estado_Actual esta en uno.
{
Estado_Final |=(0x01<<i); //pone en el bit de la posicion i del Estado_Final, en uno.
}
else Estado_Final &=(~(0x01<<i));//pone en el bit de la posicion i del Estado_Final, en cero.
}
else
{
Contador[i]= 0; // pone el contador en cero por que no llego a ser 10, que puede ser ruido.
if(Estado_Actual&(0x01<<i)) //comprueba si el bit de la posicion i del Estado_Actual esta en uno. como el bit de la posicion i de Estado_Actual y anterior no son iguales, lo copia, asi se va actualizando el estado anterior para poder. verificar en la proximo ciclo y a su vez sumar el contador en el caso de que sean iguales. Se repite el proceso.
{
Estado_Anterior |=(0x01<<i); //pone en el bit de la posicion i del Estado_Anterior, en uno.
}
else Estado_Anterior &=(~(0x01<<i)); //pone en el bit de la posicion i del Estado_Anterior, en cero.
}




Ojo: en el primer parcial que yo había subido, me di cuenta que hay algunos errores =P que paso por alto Fresno (Por suerte! jaja).

Saludos!
13-06-2012 12:33
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] goncar87 recibio 5 Gracias por este post
Feer (13-06-2012), JulianD (13-06-2012), matyary (13-06-2012), Alescaramanzia (21-11-2014), fnliendomolina (18-04-2016)
Feer Sin conexión
Presidente del CEIT
win-win
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.565
Agradecimientos dados: 594
Agradecimientos: 2.484 en 411 posts
Registro en: Apr 2010
Mensaje: #2
RE: [Informatica II] Explicacion de la funcion Antirebote
Increiiible!
Muchísimas gracias!

[Imagen: digitalizartransparent.png]
13-06-2012 14:19
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
JulianD Sin conexión
Colaborador
~`☼`~
********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 2.435
Agradecimientos dados: 275
Agradecimientos: 769 en 108 posts
Registro en: Feb 2011
Mensaje: #3
RE: [Informatica II] Explicacion de la funcion Antirebote
Muy bueno chee!

[Imagen: 2r27ldw.jpg]
13-06-2012 17:08
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
matyary Sin conexión
Presidente del CEIT
SORPRENDEME!
********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 1.796
Agradecimientos dados: 65
Agradecimientos: 313 en 77 posts
Registro en: Mar 2011
Mensaje: #4
RE: [Informatica II] Explicacion de la funcion Antirebote
Pffff, CLARÍSIMO... sino hago bien el antirebote de ahora en más soy un completo boludo!!!
Mil gracias, ahora me quea sentar culo JAJA



... and it was good!

Mi web: Von Hexlein
13-06-2012 20:00
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Feer Sin conexión
Presidente del CEIT
win-win
**********

Ing. Electrónica
Facultad Regional Buenos Aires

Mensajes: 4.565
Agradecimientos dados: 594
Agradecimientos: 2.484 en 411 posts
Registro en: Apr 2010
Mensaje: #5
RE: [Informatica II] Explicacion de la funcion Antirebote
Esta buena porque son 10 reglones de código es reee chiquita! Y encima esta re portable.. al lado de la que tenemos nosotros jaja.

[Imagen: digitalizartransparent.png]
13-06-2012 22:24
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.