Esta vez voy a colocar hardware en vez de software, por primera vez. No tiene sentido el ensamblador sin hardwre, por ello para aprender ensamblador hace falta hard.
Voy a colocar el desarrollo de una tarjeta de 48 entradas/salidas, que será controlada por puerto centronics.
Voy a colocar el desarrollo de una tarjeta de 48 entradas/salidas, que será controlada por puerto centronics.
Mediante esta tarjeta podremos controlar 6 puertos de 8 bits, configurables.
Esta tarjeta es una aplicaión de uso general que puede servirnos para probar, controlar o desarrollar otras futuros desarrollos hardware.
Como la complejidad de control de manejo de los puertos de esta tarjeta aumenta respecto de la ya de por si complicada forma de manejo del Centronics, para manejarla deberemos de crear una librería de funciones.
Estas librería estará compuesta por unas macros para crear llamadas a funciones de manejo, y una librería de funciones, que implementen las diferentes configuraciones y las diferenteS aperturas y cierres de puertos para el control a través del Centronics.
Con la librería "48IO", que pondré en sucesivas entradas, haremos tanto el puerto Centronics, como esta tarjeta transparente a nuestras aplicaciones, de manera que será muy fácil centrarse en la tarjeta aplicación que estemos desarrollando olvidándonos del hardware que sirve de interface.
Dado que la comunicación resulta crítica en muchos casos, por su ralentización en la respuesta de la aplicación que estemos desarrollando, el puerto Centronics resulta perfecto, dado que la velocidad de respuesta es muy alta en comparación con un puerto serie. Así mismo que las librerías de comunicación estén en ensamblador nos permitirá tener una gran velocidad de proceso, reservando para el proceso real, todo el mayor tiempo posible, y reduciendo al mínimo el tiempo de lectura y escritura de datos sobre la tarjeta prototipo.
ESQUEMA TARJETA 48IOCENT
Copyright (C) 2013 José Ángel Moneo Fernández
This program is free hardware: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
JP8 es el conector de alimentación
JP7 es el conector centonics, el cual se usa para conectar al PC.
JP1 a JP6 son los puertos de salida, colocados en conectores de 8 bits con toma de tensión y tierra, de forma que puedan usarse independientemente para alimentar y controlar diferentes tarjetas.
El corazón del equipo son dos 8255, los cuales se utilizarán directamente como puertos. Por ello no se utilizan latch y buffer de protección. igualmente no se han colocado ningún tipo de sistema de optoacoplamiento, pues esta tarjeta es de propósito general. Estos elementos deberán ser parte de los prototipos colgados de esta carta. De manera que la protección de los 8255 queda en manos de las cartas adicionales. Esto es necesario para permitir que esta tarjeta pueda trabajar como entradas o salidas en cualquier caso.
Como interface entre los 8255 y el puerto centronics están el U1,U4 y U5. El U1 es un buffer que sirve de puerta para pasar los datos del puerto de salida centronics a los 8255. Esto nos permitirá mover los datos del puerto centronics, sin que el 8255 vea los cambios hasta que la información esté estable. Esta puerta será abierta a través de la señal WR mediante el Strobe del puerto centronics (pin 1), que pasará a tener la función de WR.
A su vez U4 y $5 son dos latch de 4 bits que nos permitirán recoger el bus de datos de 8 bits del 8255, y descomponerlo en dos nible. Dado que el puerto centronics no tiene un puerto de 8 bits de entradas sino solo de 4 bits. Por lo tanto usaremos el puerto de estado del centronics para recoger los datos de los 8255, en dos partes, una el nible alto y otra el nibel bajo. Este direccionamiento se hará a través de las señales RDL y RDH que serán controladas por los pines 14 y 16 del centronics. La señal del pin 14 está en el centronics invertida, por lo que para que sea más transparente a nuestro programa la invertimos por hardware mediante el inversor U2B(74LS04). De esta manera en programa consideraremos un 1 lectura, independientemente de que la señale en el centronics la inverta.
Los diodos D1 y D2 con U2D forman una NOR qye nos permite tener una señal común de lectura para abrir el puerto de lectura de los 82555 tanto si leemos el nible bajo como si leemos el nible alto.
El U3 es un lacth, o bufer para el almacenamiento del direccionamiento interno de los 8255. En el almacenaremos la dirección del registro al que queremos acceder dentro de los 8255. De este registro solo se usan 3 bits, y el bit alto, bit 2, será el que seleccione el 8255, mientras que los dos bit bajos seleccionan el registro interno dentro del 8255. De esta forma el mapa quedará como 4 direcciones consecutivas. Las cuatro primeas 0-3 direccionan los puertos de U6 y las siguientes 4-7 los puertos del U7.
Para finalizar indicar simplemente que las resistencias R2,R4,R5 están puestas para asegurar el estado correcto de las señales a falta de señal.
Esta tarjeta ha sido probada durante mucho tiempo en aplicaciones posteriores, muy complejas. Y puedo garantizar su estabilidad y perfecto funcionamiento.
El esquema es tan sencillo que no resulta difícil fabricarlo en placas pretaladradas, mediante cables soldados. De hecho el primer prototipo lo fabrique así, y todavía funciona. por ello fabricar esta placa resulta muy barato. Por 15€ se puede hacer.
Aquí tenéis el Esquema en formato PDF.
Prototipo Inicialtarjeta 48IOCENT |
Prototipo Inicial tarjeta 48IOCENT |
Prototipo Inicial tarjeta 48IOCENT |
Prototipo Final tarjeta 48IOCENT |
No hay comentarios:
Publicar un comentario
Si tienes algún comentario, duda o sugerencia, o si quieres aportar algún código creado a partir de las librerías expuestas aquí, por favor, indícamelo.