Este tema está dedicado al segundo tipo de módulos secuenciales que veremos,
los contadores.
Los contadores son circuitos secuenciales que como su nombre indica cuentan,
es decir son circuitos que cada vez que llega un flanco por su
entrada de sincronización incrementan en uno el valor de su estado.
Son circuitos autónomos que salvo excepciones no tienen ninguna entrada de
datos, que siguen una secuencia cíclica, es decir que cuentan de
cero a un cierto valor máximo y a continuación vuelven a comenzar por cero y
cuya salidas son directamente las salidas de los biestables que les componen.
Dependiendo de la secuencia de conteo concreta que realicen,
los contadores reciben dos nombres, así por ejemplo existen los
contadores binarios ascendentes que cuentan en binario desde cero
hasta un valor máximo habitualmente una potencia de dos menos uno.
Los contadores binarios descendentes que cuentan en sentido contrario,
del valor máximo en este caso siete al valor mínimo de cero.
Contadores BCD que simplemente cuentan en código BCD.
Recordemos que el código BCD es aquel que representaba cada cifra decimal
por cuatro dígitos binario, contadores grey que cuentan en código grey,
contadores bidireccionales, etcétera.
Aquí vemos un ejemplo de un contador binario ascendente de tres bits,
cuenta cero, uno, dos, tres en binario, cuando llega a siete
volverá a inicializarse o vuelve a comenzar el conteo en cero.
Si quisiéramos describir explícitamente mediante un grafo de comportamiento el
funcionamiento de este circuito diríamos primero que el número de estados está
perfectamente determinado, el número de estados es ocho y
por lo tanto necesitamos tres bits, tres flip flops para implementar los estados.
Diríamos que la tabla de estados es muy sencilla porque no tenemos entradas,
es decir la tabla de estado simplemente contiene el estado actual y
el estado siguiente.
Si estamos en el estado cero el estado siguiente es el uno, si estamos en el
estado uno el estado siguiente es el dos, etcétera, si estamos en el estado siete el
estado siguiente es el cero volviendo a comenzar el ciclo de conteo.
Y finalmente podemos darnos cuenta además que no necesitamos tabla de salida porque
hemos quedado que las salidas coincidían con los estados de los biestables.
De modo que desde esta tabla podríamos implementarlas o tener las ecuaciones
booleanas y directamente de las ecuaciones booleanas podríamos dibujar el circuito.
Bien, pues aquí podemos ver las ecuaciones booleanas y el circuito correspondiente.
Hemos implementado las funciones q
delta y puesto que utilizamos flip flops D sabemos que las
entradas a las flip flops coinciden con las funciones de estado siguiente.
De esta manera podríamos construir cualquiera de los tipos de
contadores que hemos visto al principio de la lección.
Existe una alternativa, esta no es la única manera de construir los contadores.
Por ejemplo, una alternativa muy sencilla es utilizar un registro
y en la salida del registro hacerla llegar a un sumador que nos va
incrementando en uno el valor del registro y que se va cargando
ene l propio registro cada vez que va llegando la señal de sincronización.
Al igual que pasaba con el registro,
los registros de desplazamiento, los chips contadores comerciales tienen
una serie de señales de control que trato de resumir en esta transparencia.
En primer lugar la señal de sincronización,
la que en algunos momentos hemos llamado reloj o señal de carga o señal de
desplazamiento, en los contadores suele recibir el nombre de inc por incrementa.
Los contadores tienen la señal output enable que you conocemos, la señal clock
enable que dijimos que habilitaba el clock, es decir que hacia que la señal
de sincronización llegara realmente a los flip flops que formaban el dispositivo.
En este caso la señal CE recibe el nombre de count enable en vez de clock enable
por aquello de que cuando está activa permite que a cada señal de incrementar,
se incremente en uno el valor del contador.
Y hay una cuarta señal la señal TC terminal count,
muy interesante porque nos permite conectar contadores en serie.
La señal TC toma el valor uno cuando el contador ha llegado a su valor máximo,
vamos a ver con un poco de detalle que quiere decir esto.
Supongamos esta señal de sincronización incrementar y supongamos
que estamos trabajando pues por ejemplo con un contador de tres bits y que en este
ciclo de reloj el contador está en su estado seis,
en este ciclo el contador pues toma su valor siete,
y aquí en el siguiente ciclo vuelve a iniciar el conteo en cero.
Bueno, pues la señal TC lo que hace es tomar el valor
cero hasta que el contador ha llegado a su valor máximo de siete,
es decir la señal TC tendría este aspecto.
¿Y para qué nos sirve?
Pues imaginemos que queremos concatenar dos contadores de tres bits para formar un
contador de seis bits.
Lo que haríamos es coger el primer contador
de tres bits con su señal count enable, su señal de incrementar
y evidentemente todo el resto de las señales y en el segundo contador
utilizaríamos la señal TC del primero para controlar
en que momento queremos que el segundo contador cuente, es decir esto
entraría por la entrada count enable y esto sería la salida TC del primer
contador y la señal de sincronización llegaría a los dos contadores.
Esto nos permitiría pues, este contador es capaz de contar de cero a siete,
este es capaz de contar de cero a siete pero solo incrementa su valor cada vez que
el primer contador ha llegado a su valor máximo, es decir que el conjunto de estos
dos contadores contaría de cero a 63, 64 es dos elevado a seis.
Bien, os dejo un pequeño quiz y continuamos con el tema.
Los contadores bidireccionales son contadores que cuentan en sentido
ascendente cero uno dos hasta dos elevado a n menos uno
o en sentido descendente dos elevado a n menos dos uno cero,
dependiendo de una señal de control U D up down.
Aquí tenéis el grafo de comportamiento,
la descripción explicita de un contador de tres bits, n igual a tres.
Si up down, si la señal U D es igual a cero del estado cero pasa al uno,
del uno al dos, etcétera hasta el siete y del siete vuelve al estado cero.
Mientras que si up down es igual a uno pues del estado siete pasa al seis,
del seis así iría pasando hasta el dos, el uno,
y el cero y del cero pasa de nuevo al estado siete.
Algunos contadores permiten la carga paralela.
La carga paralelo de valores de entrada externos a través de una señal load.
Cuando load es igual a uno y llega un flanco por la señal de sincronización,
los valores de la entrada se cargan en los flip flops del contador.
Se trata como veis de una carga síncrona, la carga de
valores se realiza síncronamente con la señal de incrementar.
Esto es especialmente útil cuando se quiere iniciar el conteo en un
punto dado que no necesariamente tiene que ser en cero o
cuando se quiere inicializar el contador en cero de una forma síncrona.
Vamos a ver este ultimo comentario con un poco más de detalle.
Vamos a ver un ejemplo de qué sucede cuando en un contador hacemos un
reset asíncrono o un reset síncrono a base de conectar a tierra las bases externas,
es decir al forzarles un cero lógico.
Vamos a suponer que estamos trabajando con contadores de tres bits y vamos
a suponer la siguiente señal, esta es la señal de sincronización y
vamos a suponer que aquí el contador está por ejemplo en el estado cuatro,
a continuación pasa al estado cinco, a continuación pasa al estado seis,
al siete y aquí volvería a comenzar el conteo en cero.
Esto en ausencia de cualquier señal de reset.
Supongamos que lo que queremos es constuir un contador con uno de estos que
cuente de cero a uno a dos hasta cinco y del cinco vuelva de nuevo a cero,
sin llegar al valor máximo de siete.
La cosa que podríamos hacer es bueno, vamos a generar una señal un reset
asíncrono, en este momento cuando el contador está en cinco lo
que pasará es que el contador que aquí estará en el estado cuatro,
en el estado cinco pero al llegar a la señal asíncrona volver´´a
al estado cero, en el siguiente pulso de reloj pasará al uno, etcétera.
Sí que estamos consiguiendo que el contador cuente cuatro cinco cero
uno pero no lo está haciendo en los ciclos de incrementar correcto.
Fijaros que en un mismo ciclo estoy consiguiendo que pase del
cinco al cero y después al uno.
Otra alternativa es utilizar la inicialización síncrona en
vez de la asíncrona y jugar con la señal de load.
Lo que vamos a hacer es cosntguir una señal de load que tome el valor uno cuando
el contador está en su estado cinco, una señal load como esta, ¿de acuerdo?
En este caso, ¿el contador qué hara?
Vamos a poner aquí la señal de load, el contador estará en el estado cuatro,
pasará al estado cinco, verá que la señal de load está a uno pero hasta el siguiente
flanco de la señal incrementar hasta este punto no cambiará de valor,
en este punto como ve que la señal de load está a uno pasará al estado cero.
Y en el momento que esté en el estado cero nosotros haremos que la
señal de load vuelva a cero.
De manera que a partir de aquí el contador seguirá contando de una manera natural,
el uno, el dos, etcétera.
Y ahora sí hemos conseguido un conteo en que el dispositivo llega al estado cuatro,
pasa al estado cinco, se mantiene en el estado cinco todo un ciclo de reloj,
en el siguiente ciclo pasa al estado cero, etcétera,
esto es lo que se puede conseguir con la carga síncrona.