Durante estos días estaba aprendiendo a usar Proteus, haciendo algunos esquemas y simulaciones sacados de los
datasheet, sobre todo de los componentes que tengo en casa ( /f29/reto-ideas-proyecto-aprovechar-material-acumulado-113325/ ).
Leyendo el del CMOS 4522 (Contador regresivo de 4 bits programable), aparece un ejemplo de contador regresivo usando dos 4522 en cascada. Como no me quedaba claro cómo funcionaba, me puse a diseñarlo en el Proteus (foto adjunta).

Y algo no funciona. Bueno, dos.
El primer fallo es que, según la documentación, la carga de los 4 bits en el decrementador se hace de forma asincrónica pero ejecutando la simulación, puede tardar de uno a nueve (¡9!) segundos en hacer que las salidas tengan la misma configuración que las entradas. Internamente, sí que parece que se hace la carga, pero no se visualiza de forma correcta.
El segundo fallo es más grave. Según la documentación, el 4522 funcionando como divisor de frecuencia, se puede programar para que realice las divisiones de 0 a 1/15 en los pulsos de reloj de entrada. Bueno, pues no funciona bien: si ponemos un valor de entrada superior a 10, el contador regresivo no hace una cuenta desde ese valor, sino desde valor-10. Por ejemplo, si pones un 0xF a la entrada (dividir por 15), vemos que la cuenta regresiva va del 4 al 0 (en el 0 genera, de forma correcta, la salida lógica "1" en la patilla '0').
Este segundo problema creo que viene de que en la documentación se habla de que es un "contador regresivo
BCD", y claro, no tiene sentido entonces que le pongamos un valor superior a 9.
Pero... haciendo pruebas con un HEF4522BP real, si programo un 0xF a la entrada, sí que realiza un decremento perfecto del 15 al 0, lo que es consistente con lo que dice la documentación (adjunto foto que lo demuestra).

He intentado mirar la descripción de la simulación en Proteus, y está escondida en la librería LIBRARY/CMOS.LIB, en la posición 0x50CB8, en donde se pueden ver las definiciones de patillas y modelado:
Código:
LIBRARY INFORMATION
===================
Library file......: C:\Program Files (x86)\Labcenter Electronics\Proteus 7 Professional\LIBRARY\CMOS.LIB
Library version...: 4.00.
Number of objects.: 266
Maximum objects...: 1200
Number of prefixes: 0
Maximum prefixes..: 0
1 SELECTED OBJECTS
==================
Object name.......: 4522
Last modified.....: sßbado, 12 de febrero de 2011 14:09:29
File offset (hex).: 00050CB8 (Hex).
Checksum (hex)....: 2769 (Hex).
Size (bytes)......: 1,215
Properties........: {*DEVICE}
{PREFIX=U}
{*PROPDEFS}
{PACKAGE="PCB Package",PACKAGE,2,DIL16,SO16}
{MODDLL=Model DLL,READONLY STRING}
{VOLTAGE="Model Timing Voltage",KWDLIST,3,5V,10V,15V}
{ITFMOD=Interface Model,HIDDEN STRING}
{PRIMITIVE=Simulator Primitive Type,HIDDEN STRING}
{TRISE="TRISE",HIDDEN STRING}
{TFALL="TFALL",HIDDEN STRING}
{*INDEX}
{MFR=}
{DESC=Programmable 4-Bit BCD Down Counter}
{CAT=CMOS 4000 series}
{SUBCAT=Counters}
{*COMPONENT}
{PACKAGE=DIL16}
{MODDLL=CMOS}
{VOLTAGE=5V}
{ITFMOD=CMOS}
{PRIMITIVE=DIGITAL}
{TRISE=100n}
{TFALL=100n}
De aquí sacamos poca información, salvo el detalle que MODELS/CMOS.DLL es el encargado de ejecutar la simulación.
Buscando por Internet, encontré los archivo 4522.DSN y 4522.MDF. El primero muestra un ejemplo de aplicación del integrado:

Y si pulsamos con el botón secundario sobre el 4522, nos da la opción para ver la hoja secundaria que contiene la lógica de este integrado:

Aquí vemos que, en lugar de simular la lógica indicada en la propia hoja de datos del 4522 por medio de puertas lógicas y biestables, lo hace usando componentes prefabricados del propio Proteus, lo cual es lógico, para ahorrar tiempo en el desarrollo de las bibliotecas. En concreto, se usan los componentes prefabricados:
- AND_2: puerta AND de dos entradas
- OR_2: puerta OR de dos entradas
- COUNTER_4: contador de 4 bits
- COMPARATOR_4: comparador de 4 bits
Se puede obtener información de cada uno de estos modelos, pulsando con el botón derecho sobre ellos, y eligiendo la entrada "
Display Model Help". Allí se explica el significado de cada pin y de la lógica de los componentes más complejos (el contador y el comparador). Ahí se indica, por ejemplo, que se puede definir en la propiedad
ALOAD si la carga de las líneas de entrada es asíncrona o no. Y es donde empiezo a sospechar que ese puede ser el problema: que en la biblioteca de Proteus, el 4522 no tiene definido en el COUNTER_# que la carga sea asíncrona. Lo que no entiendo es que no hay ninguna indicación de que funcione en modo BCD o binario. Solamente pone que es un contador binario. Entonces, no entiendo porqué luego no funciona bien en los esquemas donde usamos el 4522: si se pone un valor superior a 0x0A, hace una cuenta regresiva errónea (al menos, no igual a un 4522 real).
En el archivo 4522.MDF viene la misma información (nombre de los componentes, lista de las redes y conexión entre pines).
He intentado encontrar la manera de modificar el comportamiento del 4522 que viene de base, pero parece que la única opción es la de crear un componente nuevo. Esto es algo que aún tengo que probar.
Adjunto un dsn donde se ven los problemas comentados.
Si se ejecuta la simulación, se ven las dificultades para que poder asignar las cifras indicadas en los marcadores SW1 y SW2. Deberían aparecer en los
display de 7 segmentos al pulsar sobre RUN, pero no lo hacen de forma inmediata (recuerdo: un segundo y nueve segundos). A veces, tengo que dejar que el CLOCK dé unos pocos pulsos, pararlo, y pulsar RUN, para conseguir que aparezcan.
Y en el SW3 se observa el segundo fallo: está puesto el valor 0xF, pero el contador sólo muestra el rango 3..0. Mejor dicho: primero se ve un rango 9=>0, y luego repite el rango 0,3,2,1,0,0 (el primer 0 debería ser un '4', pero no se ve; el segundo lanza la señal de '0' alcanzado). En el 4522 real, hace un 15=>0.