¿Cuáles son los usos más habituales de los contadores? Pues podemos decir que los contadores en general se utilizan en todas aquellas situaciones en las que es necesario contar. Por ejemplo, los contadores se utilizan frecuentemente para contar intervalos de tiempo. Sabiendo la frecuencia de la señal de sincronización podemos contar un circuito número de ciclos y determinar así intervalos de tiempo concretos. Se utilizan también para contar eventos, cada vez que se produce una cierta situación podemos generar una señal que llegue al contador a través de su entrada de incrementar. Por ejemplo, podrían ser las máquinas que cuentan el número de personas que entran a un local. Estas máquinas disponen de una celda fotoeléctrica, otro tipo de sensor que genera una señal de salida cuando pasa una persona. Entonces cuando llega esta señal de entrada in del contador, el contador nos contaría un número de personas que están pasando por ese contador. Como divisores de frecuencia, a partir de una señal de reloj y una frecuencia f en general es posible generar con un contador una señal de frecuencias f partido por dos, f partido por cuatro, f partido por ocho, en general f partido por cualquier potencia de dos. Y finalmente también se pueden utilizar como generadores de secuencia ¿no? Recuerdan los shift registers los podemos utilizar para detectar secuencias, los contadores los vamos a utilizar para construir, generar secuencias. Vamos a ver un ejemplo de algunos de estos casos. Supongamos que queremos construir un circuito que general una señal z igual a uno cada cinco segundos. Queremos contar intervalos de tiempo de cinco segundos. Podemos pues escribir una señal de sincronización, incrementar cuyo periodo sea de un segundo, es decir una señal de sincronización de un hertzio y después construir un contador que nos cuente cinco ciclos, contaría de cero uno dos tres cuatro y volvería a cero. Y hacer que cada vez que el contador está en el estado cuatro se genere la señal z igual a uno. Esto podríamos hacerlo con un contador de tres bits, necesitamos al menos tres bits para que pueda llegar a cuatro y utilizar la inicialización síncrona que hemos visto, es decir conectar las entradas externas a cero y cuando el contador esté en el estado cuatro, es decir si estos son las salidas q sub dos, q sub uno, q sub cero las salidas de los tres biestables, cuando aquí tengamos un cuatro uno cero cero podemos ir con la puerta AND de esta manera detectando este cuatro y cuando aquí se genere un uno utilizaremos esa señal para poner a uno la señal de load. En el siguiente ciclo de reloj incrementar, en el siguiente ciclo de la señal de sincronización después del cuatro, el contador nos volverá a empezar a contar por cero. Y esta señal será precisamente la señal z. Solo cuando el contador esté en el estado cuatro, que para ello tienen que haber pasado cinco ciclos de reloj, la señal z tomará el valor uno. Podemos utilizar también los contadores como divisores de frecuencia. Supongamos que tenemos una señal de reloj ck de una cierta frecuencia f y queremos construir una nueva señal de reloj ck prima de frecuencia igual a la original dividido por cuatro. En el fondo queremos construir una señal de reloj que se mantenga a uno durante dos ciclos de la señal original y se mantenga a cero durante dos ciclos más. El periodo de esta señal es cuatro veces el periodo de la señal ck y por lo tanto la frecuencia es una cuarta parte. Esto podemos hacerlo utilizando un contador de dos bits que nos cuente de cero a tres entrando por su entrada de sincronización la señal ck original y este contador, este primer ciclo se mantendrá a cero cero, en este segundo ciclo se mantendrá a cero uno, en este tercer ciclo contará uno cero y en este cuarto ciclo contará en el estado uno uno y aquí volverá a comenzar por cero cero. Pues lo que se trataría es de generar una salida que mientras el contador esté en el estado cero cero o cero uno la salida esté a uno y mientras esté en el estado uno uno o uno cero la salida sea cero. Es decir sería algo así como si q sub uno y q sub cero son las salidas del contador mientras está en cero cero o en cero uno, la salida ck prima que nosotros buscamos ha de permanecer a uno y si está en el estado uno cero o uno uno la salida ha de permanecer a cero, es decir simplemente fijaros que ck prima es igual q sub uno barra, es decir que poniendo aquí un inversor aquí tendríamos la señal de frecuencia f partido por cuatro. También se puede utilizar la salida terminal count del contador para generar la señal de reloj de frecuencia f partido por cuatro, salvo que en este caso la señal de reloj está desbalanceada, es decir no se mantiene a uno al mismo tiempo que se mantiene a cero, en este caso la señal ck prima tomaría el valor uno solo durante el ciclo en el cual el contador ha llegado a su valor máximo de tres, es decir sería una señal como esta. Es verdad que la frecuencia de reloj de esta señal es f partido por cuatro, porque el periodo sigue siendo cuatro veces el periodo de la señal inicial salvo que como veis la señal está desbalanceada. En muchas aplicaciones la verdad no importa tener la señal de reloj desbalanceada o no, se puede utilizar la salida terminal count para construir divisores de frecuencia. Os dejo con un pequeño quiz y continuamos. Los contadores pueden utilizarse también para generar secuencias concretas, por ejemplo supongamos que queremos generar esta secuencia que como veis tiene un total de ocho bits. Podríamos utilizar un contador de tres bits que cuente de cero a siete, si suponemos que las salidas del contador es decir las salidas de los biestables de los flip flops que tienen internamente que son Q2, Q1, Q0 y lo que vamos a hacer es jugar a añadir aquí un circuito combinacional con una salida out que nos vaya generando los unos y los ceros de la secuencia dependiendo de en qué estado esté el contador, es decir vamos a poner aquí los estados del contador, inicialmente en el primer ciclo de reloj estará a cero, a continuación estado uno, estado dos, estado tres, etcétera hasta el siete. Y lo que vamos a hacer es decirle al circuito combinacional cuando el contador esté en el estado cero sácame un uno por la salida, sácame exactamente el primer bit de la secuencia que quiero generar. Cuando el contador esté en el estado uno sácame la secuencia que yo quiero generar. Cuando esté en el tercer estado sácame el tercer bit de la secuencia que quiero generar, etcétera. Y tenemos la tabla de verdad, de aquí podemos extraer las ecuaciones booleanas y de aquí podemos extraer el circuito combinacional que nos genera out como una función de los estados del contador. Bueno siguiente situación, supongamos que ahora queremos construir esta secuencia que la diferencia con la anterior es que solo tiene seis bits. Utilizaremos también un contador de tres bits que cuente de cero a siete pero ahora la diferencia es que no queremos que el contador complete toda su secuencia de cero a siete sino que queremos que pase por solo seis estados, es decir queremos que cuente cero uno dos tres cuatro cinco y a partir de ahí vuelva al cero. ¿Cómo lo podemos hacer? Pues utilizando un reset síncrono como hemos visto antes y detectando el valor de cinco, detectando el valor de cinco haciéndolo entrar por una puerta AND uno cero y uno, este sería el cinco y haciendo entrar este valor, esta salida de la puerta AND a la salida de carga manteniendo la señal de sincronización. Con esto lo que hemos conseguido es que el contador cuente, haga, realice esta secuencia. Y ahora podemos hacer lo mismo que antes, construir, queremos construir aquí, añadir el circuito combinacional con la salida out tal que si aquí ponemos q sub dos, q sub uno, q sub cero los valores posibles son cero uno dos tres cuatro, en este caso vamos a ponerlos todos seis y siete y vamos a decir cuando esté en el estado cero quiero que me devuelva el primer bit de la secuencia, cuando esté en el estado uno quiero que me devuelva el segundo, cuando esté en el estado dos quiero que me devuelva el tercero, así sucesivamente y fijaros que los estados seis y siete son estados por los cuales este contador nunca pasará y por lo tanto nunca van a ser entradas al circuito combinacional, es decir estas salidas serán redundantes. Y aquí tenemos la tabla de la verdad a partir de la cual podemos construir out con una función de q sub dos, q sub uno y q sub cero. Pues con esto acabamos esta lección. Hemos visto qué son los contadores, los contadores son bloques secuenciales que no tienen entradas de datos y cuyas salidas son los propios estados de los biestables que aumentan el valor de su estado en uno cada vez que se detecta un flanco por la señal de sincronización que hemos llamado señal in. Y hemos visto como en el caso anterior los tipos y usos más frecuentes de contadores.