Haz una pregunta
  Foros de Electrónica » Diseño analógico » Diseño de circuitos en general
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

11/03/2016 #1


Dude sobre un anti-rebote
Hola, tengo una duda con este ejercicio "Diseñe un circuito anti-rebote que detecte rebotes de hasta 10 milisegundos de duración. Asuma que su reloj es 40KHz. Su diseño debe contener un divisor de frecuencia." a que se refiere que tenga una duración de 10ms y que puedo hacer con ese reloj. Tengo que implementarlo en VHDL ...
11/03/2016 #2
Moderador general

Avatar de Fogonazo

Muestra lo que llevas hecho y donde esta la duda.
11/03/2016 #3


Fogonazo dijo: Ver Mensaje
Muestra lo que llevas hecho y donde esta la duda.
Hola, gracias por responderme. Lo que he investigado es que los 40 Khz es mi reloj inicial, y el ejercicio me dice que el anti-rebote detecte hasta 10 ms de duración.

Lo que hice fue:
1. tomar esos 10ms como el periodo de un ciclo de reloj (el cual sería mi nuevo reloj)
2. Hallar la frecuencia de eso que me dio 100 Hz (f = 1/10[ms] )
3. Halle el "modulo" (asi le dicen en mi clase de sistemas digitales) de la forma Reloj_actual/Reloj_nuevo.
es decir 40[kHz]/100[Hz] y eso me da 400 [adimensional] ese valor que me dio lo pasé a binario de tal forma que al implementar el contador del divisor de frecuencia que lleva el anti-rebote solo llegue hasta 400 y cuente un ciclo de reloj.

No sé si me hice entender, soy malo para explicarme y mi duda es ¿Lo que hice estará bien? aun no he implementado, lo empezaré hacer.
11/03/2016 #4

Avatar de Chelouruguay

Hola, supongo por lo que explicas arriba, que se te pide que diseñes un circuito anti rebotes que sea inmune a rebotes de 10ms de período.
El reloj lo utilizas para tener una referencia del Delay que necesitas para lograr los 10ms de inmunidad al rebote.
En mi caso no manejo VHDL pero en C se utiliza un loop utilizando for(; para lograr x (equis) tiempo en el mismo estado y luego si ejecutar la acción.
Puedes también volver a comprobar el estado del pulsador por ejemplo para ver si se mantuvo en el mismo estado que hizo que se disparara.

Por ejemplo:
//Genero un delay especifico para la velocidad del micro en tu caso 40Khz por lo que debes calcular cuantos ciclos de reloj son necesarios para generar 10ms de delay
void Delay10ms(void){
for (a=0;a<10;a++){
Delay10KTCYx(10);
}

//Compruebo la entrada y utilizo el delay para evitar falsos disparos por rebotes.
if (Pulsador==1) then{
Delay10ms();
Accion();
}

Espero haberte ayudado.
12/03/2016 #5

Avatar de TRILO-BYTE

lo que vos decis esta muy mal che, me huele no mas bien me apestá a C18 o XC8.

lo que el compañero queré es implementar en VHDL en un dispositivo logico programable.

lo que se hace es lo siguiente:

un antirrebote puede ser de 2 formas de la manera marrana que es atorar el sistema una cantidad X de tiempo una vez pisado el boton.

y la manera No marrana que es usar una base de tiempo definida, cuando se pisa el boton se va decrementando un contador y cuando este llega a 0 procede a hacer lo que debe hacer.

metodo 1:

pisas el boton , una vez pisado entras en un bucle cerrado puede ser una cuenta, una vez que acaba la cuenta "el boton podra estar rebotando en el proceso", el siguiente paso es hacer lo que se deba hacer ignorando ya el estado del boton.

ejemplo:

1.- inicio.
2.-si no piso boton vuelvo a inicio
3.- si piso boton voy a :

A.- hago una cuenta cerrada ignorando el boton, hasta que acabe mi cuenta.
B.- una vez acabada la cuenta procedo a hacer lo que tenga que hacer, prender unos leds por ejemplo.
C.- terminado lo que tengo que hacer vuelvo a inicio.

como veras en este ejemplo marrano es marrano por el hecho de que mientras hago la cuenta y lo que tenga que hacer estamos solamente enfocados a eso.

metodo 2:

este metodo necesita una base de tiempo definida y estaremos leyendo en este caso el estado del boton todo el tiempo mientras ejecutamos otras tareas "podria ser un PMW , una cuenta , leds que parpadean ,etc" mientras estas tareas pueden estar o no presentes una vez pisado el boton la base de tiempo empezara a decrementarse , si el decremento llega a 0 se podra ejecutar la tarea.

pero si se suelta el boton antes de llegar a 0 el la cuenta se suspende.

simple pero complicado.

ejemplo:

1.-declaramos una base de tiempo que se ejecutara siempre a una frecuencia que se necesite con un contador que decremente todo el tiempo.

2.-inicio
3.- leemos estado del boton si no pisamos cargamos el contador con digamos 255 y volvemos a inicio
4.-si el boton es pisado dejamos que el contador se decremente.
5.- si el contador llega a 0 procede a:

A.- hacer lo que tengamos que hacer ignorando el estado del boton
B.- una vez terminado lo que tengamos que hacer cargamos el contador con digamos 255.
C.- volvemos a inicio


como veras esos algoritmos aunque parescan similares No lo son pues la diferencia esta en que uno atora un proceso y el otro puede dejar que otros procesos continuen.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Diseño de circuitos en general

Alarmas, temporizadores, acondicionadores de señal...

Cerrar
Foros de Electrónica » Diseño analógico » Diseño de circuitos en general

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.