Banner publicitario de PCBWay

Sistema Mínimo con CPU 8085 (Bootloader)

Este microcontrolador no podia quedar olvidado tampoco asi que ando preparando tambien su version de sistema minimo, ya hace muchos años atras habia construido mi sistema modular con este microprocesador y pues alli estan algunas imagenes del mismo que aun conservo , en ese entonces utilize los slots extraidos de tarjetas madres , era tan basico este circuito que solo funcionaba con 2K de Eeprom y sus 8K de RAM que me parecia mas que suficiente para entonces pues tenia que programar casi manualmente la Eeprom lo cual era muy tedioso , pero ahora hay que actualizarlo y dejarlo completo para todo el mapa de 64K , como son casi hermanastros con el Z80 en cuanto a hardware y software pues hacerle un bootloader sera mas sencillo, utilizara los mismos modulos de memoria del sistema modular Z80 version 1.00 , es que tambien tengo preparado la version 2.00 de señales que son compatibles con los modulos hechos para los buses del 8088.

IMG_20201104_111601532.jpgIMG_20201104_111525453.jpg


Ademas de ese sistema modular me habia construido con ese CPU 8085 una tarjeta mas compacta que se asemejaba a un microcontrolador para lo cual le adjuntaba solo una eeprom y su chip de apoyo el 8155 que contenia 256 bytes de RAM , tres puertos I/O y un timer, esa tarjetita en un primer uso que le di fue para controlar motores paso a paso de un brazo robot rustico a travez de unos pulsadores que simulaban un mando joystick , en esa misma version compacta tambien tenia un diseño para el 8088 , para el 8048 y para el 8032 pero se quedo solo en diseño en el papel en uno de mis cuadernos y pues tambien pienso pasarlos a circuito en cuanto pueda.

IMG_20201104_111613545.jpg

Y pues aqui ya avanzando con el diseño modular de la placa principal que aloja al CPU 8085, segun recuerdo este micro tiene velocidades de 2, 3 y 5 Mhz y nos facilita mucho ya tener su circuito de reloj interno solo requiriendo adjuntarle su cristal de cuarzo pero al igual que el 8088 tiene que multiplexarse el bus de direcciones bajo y para ello que mejor que un 74LS574 en lugar del 74LS374 pero ademas de ellos requiere de un inversor adicional para su señal ALE.

circuito principal.jpg
 
El CPU 8085 no se a extinguido!!:) , Después de un buen tiempo he podido terminar los diseños de todo el Sistema mínimo 8085, que consta de su placa principal que soporta al 8085 , su placa SLot y sus tarjetas de memorias y perifericos, tambien podemos usar diferentes versiones de este chip 8085 , yo tengo a la mano los de 2Mhz y 3Mhz para lo cual se coloca en la placa un cristal XT del doble de su velocidad , asi que si queremos que funcione a 2 Mhz le colocamos un cristal de 4 Mhz y si es para 3 Mhz le colocamos un cristal de 6 Mhz y listo, tengo entendido que hay una version de 5 Mhz pero no a llegado a mis manos alguno por ahora.

Aqui les presento el respectivo cuadro de señales presentes en los tres conectores disponibles de las placas , teniendo en cuenta estas señales presentes se puede elaborar las diferentes tarjetas de Perifericos o expansiones compatibles, Este Sistema Minimo con 8085 es libre para su uso o incluso su modificacion, esta pensado para ser sencillo y ahorrarnos un colosal cableado en protoboards para practicar con este CPU 8085 ademas de usar placas de una sola cara mas faciles para manufacturar, una vez construido este Modulo con el 8085 tendra su Bootloader basico que tiene la funcion de recibir un programa ya compilado desde la PC que en este caso sera enviado en formato hexadecimal de Intel, aunque este Sistema minimo no a sido concebido tanto para un Sistema Operativo sino que mas para asemejarse al comportamiento de un Microcontrolador, el que desee le puede diseñar o cargar algun nano Sistema Operativo o directamente algun interprete basic alojado en su memoria ROM, a mi me gustaria poder contar con alguno para lenguaje C , Diseñar un Sistema Operativo o recrear uno que ya existia si que es un gran trabajo, si alguno se anima a construir este sistema minimo y le provee de un nano sistema operativo pues bienvenido sea. :)

Señales de Bus 8085 extendidas.jpg
En la siguiente imagen podemos apreciar la tarjeta principal para el CPU 8085 terminada, alli podemos distinguir la disposicion central del 8085 y sus componentes nesesarios para su funcionamiento, a la izquierda inferior esta la entrada de alimentacion que debe ser de una fuente de 5V a 2 amperios , tambien vemos su circuito de reset manual con un pulsador, en la parte superior izquierda nesesitamos contar con un inversor para invertir la señal del ALE para atacar al latch 74LS573 y completar el bus de direcciones bajo, a su costado esta el decodificador 74LS138 nesesario para la seleccion de chips de memoria, en la misma placa se alojaran dos tarjetas de memoria a saber de que una es la ROM o E2PROM y la otra seria la RAM, el decodificador reparte el mapa de memoria en dos zonas de 32K con lo que 32K de ROM + 32K de RAM tendriamos cubierta toda la capacidad de 64K direccionable por el 8085, debido a que el Bootloader es pequeño nos seria suficiente alojarlo en una E2PROM incluso de 2K , o si usamos una E2PROM de 8K a 32K podria alojarse su Sistema Operativo y sus rutinas o servicios etc.

Incluso pensando en usar solo un Botloader y 32K de RAM este podria recibir un archivo hex con un sistema operativo temporal desde la PC y alojarlo en la RAM para su ejecucion, una parte del diseño de estos modulos de Sistemas Minimos con el 8085, Z80, 6502, 6809 e incluso proximamente el 68008 contempla el alojamiento de su programa de aplicacion requerido en una Eprom 24c256 , es decir desde la PC le cargo un programa a la RAM y a continuacion ejecutarse pero si en ese momento la apago y prendo la aplicacion se borrara por completo , para ello nesesitamos un modulo adicional que maneje una E2prom 24C256 de respaldo o puede ser un SPI w25cxx donde estaria alojada tambien la aplicacion enviada desde la PC, entonces cada vez que energize el sistema minimo este esperara un tiempo breve por alguna comunicacion con la PC pero si esta no llega entonces procederia a cargar el contenido de la E2Prom 24C256 en su Ram y lanzaria su ejecucion con lo que nuestra aplicacion estaria corriendo tal como lo hace mas o menos un Arduino,

En caso se requiera mas RAM osea que supere los 32K impuestos por el decodificador, la tarjeta principal esta preparada para recibir un modulo de hasta 56K de RAM + 8K de E2PROM, colocando unos modulos de RAM y ROM preparados para tal fin y solo para ese caso se retira el decodificador 74LS138 de la placa principal porque cada modulo de memoria tendria su propia decodificacion, eso como caso extraordinario de ser nesesario pero creo que para la mayoria de nuestras aplicaciones con esta CPU 8085 sera mas que suficiente ese manejo de 32K de RAM y 32K de ROM.

CPU.jpg

Y por ultimo tenemos la Placa a la que llamo de Slots en la que se alojaran hasta 6 modulos perifericos, esta tarjeta cuenta tambien con un decodificador 74LS138 y nos entregara hasta 7 señales disponibles con lo que se podria selecionar 7 perifericos conectados en los slots sin importar en que orden vayan insertados, al principio este slot estaba pensado solo para alojar 5 perifericos pero luego lo extendi a 6 e incluso podria extenderse hasta 7 slots para ya tener su capacidad completa de perifericos, dejare una tarjeta de 7 solts tambien en los archivos PCB como opcional el que desea manufactura la placa que prefiera desde solo 5, 6 o 7 slots.

Los Perifericos que iran preparados como fundamentales son primeramente el modulo ACIA 6850 para las comunicaciones con la PC y por alli recibira tambien el archivo hex de la aplicacion, nesesitaremos un ACIA 6850 para otros usos como conectarse a dispositivos que requieren señales RX y TX para conectarse a ellos, Un PPI 8255 tambien es indispensable para tener 3 puertos paralelos disponibles para comunicarnos con el exterior y opcionalmente podriamos requerir otro PPI 8255 extra , nesesitamos solo un modulo temporizador de 3 canales como es el PTC8253/54 , tambien nesesitamos un gestor de interrupciones que atendera las peticiones de interrupcion para lo cual agregaremos un PIC8259 y por ultimo tambien nesesitaremos un modulo ADC 0808 de 8 canales para tener lecturas de valores analogicos, con todos esos perifericos llegamos a la cantidad de 7 slots ocupados, pero no requerimos conectarlos todos a la vez solo lo que nuestra aplicacion vayan a requerir.

SLOT.jpg


Y bueno sera hasta la proxima publicacion siempre en cuando Dios y los moderadores nos lo permitan :):):)
 
Continuando con la presentacion de los Modulos del Sistema Minimo para el CPU 8085 lo que viene a continuacion serian los modulos de Memoria, para este caso podemos utilizar memorias de 8 Kbytes o de 32 Kbytes para la Eprom o la Ram o tambien un combinado de ambas, es decir una de 32 Kbyte y la otra de 8Kbytes o viceversa, ya depende de lo que se tenga a la mano o se pueda conseguir en el comercio local.

En esta primera imagen podemos ver los Modulos de Memoria de 8 Kbytes empezando por la RAM de codigo 6264 , la E2prom 28C64 y la tercera seria la version Eprom UV 27C64, si optamos por estas capacidades de solo 8 K tendremos que preparar si o si el Modulo Ram y uno de los dos modulos para Eprom, o E2prom, en mi caso optaria por la version E2prom 28C64 pues la veo mas factible para programarla y corregirla en caso se den errores mientras que la Eprom UV tendria que estar borrandola con una lampara UV que no tengo disponible, para programar las E2prom podemos usar un Programador Universal como el economico TL866 o algun artificio construido en base a Arduino.

Notaran que en si que el modulo para la 28C64 con el modulo del 27C64 son la misma tarjeta solo que con su etiqueta respectiva para distinguirlas :)
Memorias 8k.jpg
En la segunda captura podemos apreciar los modulos de memoria para la capacidad de 32 Kbytes, comenzando con el modulo para la Ram que seria el codigo mas usual el 62256 o equivalentes, luego le sigue el Modulo para la E2prom 28C256 y por ultimo el modulo para la Eprom UV 27C256, en este caso los modulos de las memorias Eprom difieren ligeramente en la posicion de unos pines por lo que no son el mismo caso que los modulos Eprom de 8K, especificamente la señal de direcciones A14 es la que esta en diferentes posicion y eso lo pueden constatar en la datasheet respectiva.

En todos los diferentes Modulos de memoria se puede distinguir que todos llevan un led testigo al extremo opuesto del bus de conexiones para ver que ese modulo esta energizado, en el lado proximo al conector de los 31 pines machos tambien veremos 4 puntos agrupados, alli es donde colocaremos un jumper en un lado o en el otro para seleccionar el respectivo /CS0 o el /CS1 activo bajo proveniente del decodificador 74LS138 de la placa principal, solo va un jumper que en el caso del CPU 8085 se debe ubicar en la /CS0 para la Eprom y en la /CS1 para la Ram, esto debido a que tras el encendido se generara un reset automatico y hara que la CPU busque la primera instruccion en la direccion 0000H, donde ya debe encontrarse grabado una bios o un bootloader o un nano Sistema Operativo etc, aunque no es nesesario poner un jumper pues simplemente se puede soldarle un puente fijo, la razon de ponerle el jumper fue para reutilizar estos modulos de memoria con otros microprocesadores de 8 bits como el 6502 o el 6800 o el 6809, estos microprocesadores tras el reset general saltan a buscar la primera instruccion no en la direccion 0000H sino que se van a la parte alta de la memoria proximo a la direccion FFF0H.

Memorias 32K.jpg

Les comentare que el primer libro que tuve en mis manos sobre los microprocesadores fue uno de titulo "Microprocesadores: Fundamentos, diseño y aplicaciones en la industria y en los microcomputadores" 5 ta edicion del autor Jose Mariano Angulo Usategui, en cuanto lo vi no me resisti y lo compre de inmediato en mi epoca de estudiante y aun me acompaña para consultas, muy buen libro interesante que me dejo fascinado con el 8085 (tiempo despues me consegui uno del Z80), en el instituto nos enseñaron solo electronica digital y no llegamos a microprocesadores pero ya con eso tenia una base, asi que el tema de los microprocesadores lo aprendi de forma autodidacta, en ese libro detalla bastante los microprocesadores 8085 y parte del 8088 entre otros microcontroladores de la epoca, gracias a ese libro me anime a construir mis primeros prototipos de tarjetas de microprocesadores y las hize andar, se los recomiendo mucho si les es posible conseguirlo claro si son amantes de la retrocomputacion.

En la siguiente publicacion veremos los 4 modulos Perifericos que comunicaran al CPU 8085 con el mundo exterior :)
 
El Primer Periferico que nesesitamos para comunicarnos con la PC seria el Modulo Serie a USB, para este caso nuestro modulo serie estaria funcionando en torno a un conocido ya usado antes y que aun es factible conseguirlo, se trata del Chip ACIA 68B50 que vendria a ser el corazon de las comunicaciones seriales y para completar la comunicacion con la PC nesesitamos conectarle a las señales TX y RX un adaptador de UART a USB, ese adaptador puede ser cualquiera disponible en el comercio como el CP2102, el PL2303, El FTDI232 o el mas economico y usado en el Arduino UNO smd que seria el CH340 en modulo,

En la imagen podemos ver el diseño de la tarjeta o modulo serial ACIA 68B50, nesesitamos generarle su propia frecuencia de trabajo independiente de la velocidad de reloj del microprocesador en cuestion, su circuito oscilador estara compuesto por unas compuertas inversoras del 74LS04 y un cristal de 7.3728 Mhz que nos dara la frecuencia base que ingresara a los pines de reloj de RX y TX, pero internamente el ACIA se configura para que esa frecuencia se divida por 16 o 64, optamos por 64 con lo que obtenemos un valor de 115,200 baudios que seria la frecuencia de trasmision y recepsion desde/ hacia la PC, en caso se tuviera algun inconveniente con esa velocidad se puede cambiar el cristal a 3.6864 Mhz para que la velocidad de baudios sea 57,.600 baudios y asi sucesivamente podremos acomodar para establecer una velocidad determinada, nos es mas conveniente que funcione a mas velocidad para trasmitir mas datos en menos tiempo.

Siendo el Modulo Serial el primer modulo a preparar le hemos asignado las dos primeras selecciones del mapa de Entradas/Salidas mediante dos jumpers que vendrian a ser para las posiciones de /CS0 y /CS1, para el modulo serial principal le asignaremos /CS0 colocando el jumper respectivo y en caso nesesitemos un segundo modulo serial solo construimos otro duplicado con los mismos componentes pero alli le seleccionaremos el jumper en la posicion /CS1 para evitar conflicto o colisiones de señales, podria darse tambien el caso que quizas nesesitarse un tercer puerto serial y pues para eso tendriamos que apropiarnos de una seleccion que le corresponderia a otro periferico distinto y hacer una ligera modificacion en la tarjeta, por lo pronto solo se le a dejado dos jumpers para no llenarnos de tantos jumper innesesarios.

Ademas del led testigo de energizado habitual se le a agregado otro led testigo de la señal /RTS para visualizar el inicio de la comunicacion serie desde la PC con fines ilustrativos porque no le daremos otro uso, en la imagen de la derecha en el conector de 5 pines que dice CH340 se a preparado justamente para poder conectarle directamente un modulo CH340 cuyas señales corresponden con esos pines en ese orden , en caso se vaya a usar otro adaptador distinto pues se usara cables jumpers para hacer la conexion respectiva ,

En la parte inferior de la tarjeta serial tambien hay 3 jumpers mas pero estos son para seleccionar una de las tres interrupciones enmascarables que llegan hasta el microprocesador que son RST 7.5, RST6.5 y RST5.5, para el ACIA principal lo dejaremos jumpeado o soldaremos un puente de preferencia en la entrada RST 7.5 y para el modulo ACIA secundario usaremos una de las otras dos interrupciones que quedan que seria de preferencia la RST6.5 pues la RST 5.5 la reservaremos para el modulo ADC 0808 cuando este implementado. neseitamos hacer uso de las interrupciones porque cada vez que el ACIA recibe un dato desde la PC generara una interrupcion respectiva para avisarle a la CPU que a llegado un dato y proceda a tratarlo como se merece.

En la parte del conector CH340 se a dispuesto un diodo 1N4148 o 1N4004 para que la alimentacion del puerto USB que se conecte al modulo CH340 no vaya a alimentar a todo el Sistema Minimo 8085 pero tambien se podria dejar sin el diodo puesto para que los 5v de cada lado tanto del CH340 como del Sstema minimo sean separados y solo se mantienen la conexion a GND en comun.

Teniendo solo el modulo ACIA conectado y funcionando ya con el programa Monitor o Bootloader podremos enviar un programa ya compilado en archivo hex y tambien recibir volcado de memoria en pantalla a travez del terminal de windows, lo deseable seria poder usar alguna especie de aplicacion IDE basico que tenga su propio ensamblador / compilador o alguno anexado y que te de opcion desde alli a enviarle el hex pero claro tendria que saber de programacion de algun visual Basic o visual C para poder crear un entorno sencillo, por lo pronto utilizaremos el 8085 Compilador IDE de Oshonsoft para escribir las aplicaciones en assembler o en Basic y mediante el terminal del windows enviarselo.
.
Acia 68B50.jpg


El modulo CH340 que encaja en la disposicion de los pines para poder enchufarlo directamente es como los de la imagen o similares donde vienen los pines en ese orden, si es otro modelo diferente de CH340 y los pines no se corresponden ya se tendra que conectar con cables jumper.
ch340 1.jpgch340 tipo c.jpg
Es todo por ahora y ya sera hasta la proxima publicacion del PPI 8255 :)
 
Continuando con la presentacion de nuestros Perifericos para el Sistema Minimo 8085 tenemos a continuacion otro viejo conocido como es el chip PPI 8255 para nuestro modulo de entradas/salidas paralela, como sabemos el PPI cuenta con 3 puertos de 8 bits cada uno que son el Puerto A, Puerto B y Puerto C, Aqui un poco de informacion del PPI 8255

CONEXIONES DEL 8255:

D0..D7: Bus de datos bidireccional de 3 estados.
RESET: Esta señal borra el registro de control y todos los puertos (A, B y C) son colocados en modo entrada.
-RD: Utilizada por la CPU para leer información de estado o datos procedentes del 8255.
-WR: Utilizada por la CPU para enviar palabras de control o datos al 8255.
A0..A1: Líneas de dirección: permiten seleccionar uno de los tres puertos o el registro de control.
PA0..PA7: Puerto A: puerto de entrada/salida de 8 bits.
PB0..PB7: Puerto B: puerto de entrada/salida de 8 bits.
PC0..PC7: Puerto C: puerto de entrada/salida de 8 bits.


DESCRIPCIÓN FUNCIONAL

Las dos líneas de direcciones definen cuatro puertos de E/S en el ordenador: los tres primeros permiten acceder a los puertos A, B y C; el cuarto sirve para leer o escribir la palabra de control. El 8255 está dividido en dos grupos internos: el grupo A, formado por el puerto A y los 4 bits más significativos del puerto C; y el grupo B, constituido por el puerto B junto a los 4 bits menos significativos del puerto C. El puerto C está especialmente diseñado para ser dividido en dos mitades y servir de apoyo a los puertos A y B en algunos sistemas.

PROGRAMACIÓN DEL 8255

El 8255 soporta 3 modos de operación: el modo 0 (entrada y salida básica), el modo 1 (entrada y salida con señales de control) y el modo 2 (bus bidireccional de comunicaciones). Tras un Reset, los 3 puertos quedan configurados en modo entrada, con las 24 líneas puestas a "1" gracias a la circuitería interna. Esta configuración por defecto puede no obstante ser alterada con facilidad. El modo para el puerto A y B se puede seleccionar por separado; el puerto C está dividido en dos mitades relacionadas con el puerto A y el B. Todos los registros de salida son reseteados ante un cambio de modo, incluyendo los biestables de estado. Las configuraciones de modos son muy flexibles y se acomodan a casi todas las necesidades posibles. Los tres puertos pueden ser accedidos en cualquier momento a través de la dirección E/S que les corresponde, como se vio en el apartado anterior.

La palabra de control a enviar a la 4ª dirección es:
Si el bit más significativo de la palabra de control está borrado, es tratada entonces como un comando especial que permite activar o inhibir selectivamente los bits del puerto C:
Esto es particularmente útil para los modos 1 y 2, donde las interrupciones generadas por las líneas del puerto C pueden ser activadas o inhibidas simplemente poniendo a 1 ó 0, respectivamente, el flip-flop interno INTE correspondiente a la interrupción que se trate. Todos son puestos a cero tras establecer el modo.

MODOS DE OPERACIÓN DEL 8255

MODO 0: Esta configuración implementa simples funciones de entrada/salida para cada bit de los 2 puertos de 8 bits y los 2 puertos de 4 bits; los datos son leídos y escritos sin más, sin ningún tipo de control adicional. Los puertos pueden ser configurados de entrada (sin latch) o salida (los datos permanecen memorizados en un latch).

MODO 1: Este modo es el strobed input/output (entrada/salida a través de un protocolo de señales). Existen dos grupos (A y B) formados por los puertos A y B más el puerto C, que es repartido a la mitad entre ambos grupos para gestionar las señales de control. Tanto si se configura de entrada como de salida, los datos permanecen en un latch. Con este modo es factible conectar dos 8255 entre sí para realizar transferencias de datos en paralelo a una velocidad considerable, con posibilidad de generar interrupciones a la CPU en el momento en que los datos son recibidos o hay que enviar uno nuevo (consúltese documentación técnica).

MODO 2: En este modo se constituye un bus bidireccional de 8 bits, por el que los datos pueden ir en un sentido o en otro, siendo el flujo regulado de nuevo por señales de control a través del puerto C. Este modo sólo puede operar en el Grupo A. Tanto las entradas como salidas son almacenadas en latch.

NOTA: Existen varias combinaciones posibles de estos modos, en las que las líneas del puerto C que no son empleadas como señales de control pueden actuar como entradas o salidas normales, quedando las líneas de control fuera del área de influencia de los comandos que afectan a las restantes.

En la siguiente imagen podemos apreciar el diseño del Modulo PPI 8255 con sus conexiones al bus de señales internas del Sistema Minimo y hacia el otro extremo los 3 puertos de entrada/salida A, B y C de 8 bits cada uno, ademas unos pines extras de +Vcc y GND a los extremos de cada puerto, tambien tiene su led testigo y un par de filtros, tambien una area donde se ubican los terminales para los jumper con los que podemos seleccionar la direccion o direcciones para uno o dos Modulos PP, esto por si fuera nesesario para la aplicacion de varios puertos de entrada y salida, a nuestros modulos PPI le corresponderia dos selecciones que serian /CS2 y /CS3 , el PPI principal usaria la direccion /CS2 y el PPI secundario el /CS3 , asi que no es nesesario colocar los 7 pares de jumper solo lo que corresponda en esas dos selecciones, si no queremos usar jumpers solo soldaremos esos terminales con un puente y listo.

Un inconveniente del PPI es que no se puedan configurarlos a nivel de bit individuales para entradas y salidas, en este caso el Z80 que es mas potente que el 8085 nos da una ayuda de acceso a bits individuales mientras que con el 8085 tendriamos que usar mascaras, pero en lugar del 8255 tambien podriamos hecharle mano a otros Perifericos paralelos de otras familias como del 6502 o del 6800 y construir modulos con ellos .

En la siguiente publicacion toca presentar el Modulo temporizador/ Contador 8253.

PPI 8255.jpg
 
Este modulo de la imagen viene a ser nuestro modulo Temporizador/Contador a cargo del chip PTC8253 que tiene varios modos de funcionamiento programables, El PTC8253 consta de 3 canales iguales e independientes con sus entradas de reloj CLK, señal de control Gate y su señal de salida OUT, podemos usar uno o varios de los canales para nuestos propositos.

En nuestro modulo temporizador podemos ver que ademas del 8253 lo acompañan otros chips mas, uno de ellos es el 74LS04 configurado para como oscilador con un cristal genera una señal de reloj de 4 Mhz determiando por el cristal, el otro chip es el CD4040 que es un contador binario de 11 etapas usado para divisor de frecuencias, este contador recibe la señal de reloj de 4 Mhz y en su ultima etapa nos entregara una frecuencia de casi 1000 Hz, mediante unos jumpers se le puede inyectar esa señal de 1 Khz a los CLK para usarlos como temporizadores, pero en caso los usemos como contadores podemos conectar una señal externa de algun sensor que originara un pulso por algun evento con lo que el chip contabiliza un numero de pulsos hasta llegar a cero, con un poco de matematicas calculamos cuantos pulsos se recibio.

Temporizador.jpg

El timer 8253 tiene 3 contadores independientes, llamados canales. Cada contador puede ser programado para operar en uno de seis modos. Una vez programados, los contadores pueden realizar la tarea asignada según el modo. Adicionalmente hay un registro de control (Control Word Register) que permite programar cada uno de los tres contadores independientemente. Por medio de este registro de control puede programarse un contador en uno de seis modos de operación.

Físicamente, el 8253 es accedido por cuatro puertos de entrada/salida a partir de una dirección base, que es definida mediante circuitos externos. En la dirección base + 0, base + 1, y base + 2 se encuentran los tres contadores, y en la dirección base + 3 se encuentra el registro de control. El valor de los contadores puede leerse y escribirse, y el registro de control es de solo escritura.

Contadores​

Los contadores son etiquetados como Contador 0, Contador 1 y Contador 2. Son contadores de 16 bits que pueden programarse para trabajar en modo binario o en modo BCD. Los contadores cuentan desde el número que se les asigne hasta cero regresivamente, son independientes uno del otro, y pueden ser leídos fácilmente por el CPU.

En el chip, cada contador tiene tres pines asociados a él:
  • CLK (reloj). Es un pin de entrada por donde se recibe una señal de reloj para el contador. El contador contará hacia abajo decrementándose al ritmo de esta señal de sincronización.
  • GATE (puerta). Es un pin de entrada que recibe una señal para controlar el contador. Su significado varía de acuerdo al modo de operación.
  • OUT (salida). Es un pin por donde sale una señal que se comporta de acuerdo al modo de operación con que fue programado el contador.

Registro Control Word​

El PIT 8253 tiene un Control Word (palabra de control) de 8 bits usado para programar los contadores. El registro Control Word define cómo trabajará el PIT. Para programar los contadores, el microprocesador debe escribir una palabra de control (CW) a este registro y luego enviar un byte o dos bytes como valor inicial de conteo al contador. Esto debe hacerse cada vez que se quiera programar uno de los 3 contadores.

Selección del contador​

Los bits 7 y 6 de la palabra de control definen cuál contador se está programando. Para seleccionar un contador se coloca en estos bits el número del contador que se desea programar, 00, 01, 10 (en binario), para los contadores 0, 1 y 2 respectivamente. El valor 11 (en binario) es inválido, ya que no existe el contador 3.

Modos de operación​

Los bits 3, 2, y 1, de la palabra de control, indican el modo de operación del contador. Cada contador puede programarse en uno de seis modos de operación. Para programarlo, se envía al registro Control Word del chip la información de cómo se quiere que trabaje el contador y luego se envía al contador el valor inicial de conteo. Entonces el contador comenzará a funcionar de acuerdo a lo previsto en el modo de operación.
Al programar los modos 2 y 3, el bits más significativo del modo de operación, bit 3 de la palabra de control, es ignorado, y no importa su valor.
Los modos de operación son los siguientes:
  • 000 - Modo 0. Interrupt on Terminal Count (Interrumpe al terminar el conteo). El pin OUT se inicia en cero y se pondrá en 1 al terminar el conteo. La señal GATE puede usarse para poner en pausa o continuar el conteo. Es usado para generar un preciso retardo de tiempo bajo control del software. El contador comenzará a contar desde el valor inicial cargado en él, e irá decrementándose hasta llegar a 0. El pin OUT es puesto bajo después de que el Control Word (la palabra de control) que programa al contador es escrita, y el conteo comienza un ciclo de reloj después que el valor del contador es programado. La señal OUT sigue baja hasta que el contador alcanza 0, en ese momento la señal OUT es puesta alta hasta que el contador sea recargado o la palabra de control sea reescrita. La señal de GATE debe permanecer activa en alto para un conteo normal. Si GATE es bajada el conteo es terminado y la cuenta actual es trabada (latched) hasta que el pulso en GATE se vuelve a alto otra vez.
  • 001 - Modo 1. Programmable On Shot (Disparo programable). En este modo, el 8253 puede ser usado como un multivibrador monoestable, la entrada por GATE es usada como la señal de disparo. La señal OUT estará inicialmente en alto, OUT irá a bajo en el pulso del CLK siguiente al disparo para hacer el pulso On Shot (de disparo), y permanecerá abajo hasta que el contador llegue a cero. Entonces, OUT irá a alto y permanecerá en alto hasta el pulso CLK después del siguiente disparo.
  • X10 - Modo 2. Rate Generator (Generador de impulsos). Emite un pulso repitiéndolo cada cierto tiempo de acuerdo al valor del contador. En este modo, el dispositivo actúa como un contador divisor por n, el cual es comúnmente usado para generar una interrupción de reloj tiempo real (para mantener la hora del día). Como otros modos, el proceso de conteo comenzará el siguiente ciclo después que el valor del contador es enviado. La señal de OUT permanecerá alta hasta que el contador llegue a 1, y luego, estará baja por un pulso de reloj. Entonces OUT volverá a estar alta de nuevo, y el proceso completo se repetirá por sí solo una y otra vez, generando así un pulso al final de cada conteo.
  • X11 - Modo 3. Square Wave Generator (Generador de onda cuadrada). Emite una onda cuadrada repetida una y otra vez, con una frecuencia regulada por el contador. Este modo es similar al modo 2. Sin embargo, la duración de los pulsos de reloj alto y bajo de la salida OUT serán diferentes a los del modo 2. En este modo, se generará una onda cuadrada con la mitad del tiempo en alto y la mitad del tiempo bajo, que se repetirá una y otra vez al igual que el pulso del modo 2.
  • 100 - Modo 4. Software Triggered Strobe (Strobe disparado por software). Emite un único pulso al terminar el contador. Después de que es cargada una palabra de control y valor en el contador, la salida OUT permanece alta hasta que el contador llega a cero. El contador entonces generará un pulso bajo por 1 ciclo del reloj (un strobe) - después la salida se volverá alta de nuevo.
  • 101 - Modo 5. Hardware Triggered Strobe (Strobe disparado por hardware). Emite un único pulso al terminar el contador, La puerta GATE se usa para iniciar el conteo regresivo para el disparo del pulso. Este modo es similar al modo 4. Sin embargo, el proceso de conteo es disparado por la entrada GATE. Después de recibir una palabra de control y un valor de conteo, la salida será puesta en alto. Una vez que el dispositivo detecta el borde de elevación (rising edge) en la entrada GATE, comenzará a contar, Cuando el contador llegue a 0, la salida por OUT estará baja por un ciclo de reloj - Después se volverá de nuevo alta, repitiendo el ciclo en el siguiente borde de elevación de GATE.

Modo BCD​

Ajustando el bit 0 de la palabra de control se puede programar al contador para trabajar en modo binario usando 16 bits para el contador, o modo BCD, usando 4 dígitos decimales BCD.

Modo de acceso​

Los bits 5 y 4 de la palabra de control indican el modo de acceso para leer o escribir el valor del contador. Esto es necesario porque cada contador es de 16 bits, pero el chip solo tiene una entrada/salida de solo 8 bits de datos. Con el modo de acceso se puede leer y escribir al contador en uno de los siguientes modos:
  • Solo los 8 bits menos significativos
  • Solo los 8 bits más significativos
  • Primero los 8 bits menos significativos, y después los 8 bits más significativos. Para ello, se necesitan dos procesos de lectura o escritura para leer o escribir los 16 bits completos.
Y esto seria todo en lo que concierne a este Modulo PTC8253, en la proxima publicacion trataremos sobre el PIC 8259 encargaado del arbitraje de interrupciones enmascarables.
 
Atrás
Arriba