Puerto Paralelo en Linux, algo de electrónica.
Actualizado (Lunes, 23 de Febrero de 2009 19:42) Escrito por Gustavo Guillermo Perez (madgus) Domingo, 15 de Febrero de 2009 23:22
El puerto paralelo es obsoleto pero todavía lo encontramos en PCs viejitas que nos pueden servir para jugar un poco con la electrónica, veamos como empezar.... El puerto paralelo tiene 25 pines de los cuales algunos son de entrada, otros de salida y otros bidireccionales, veamos cuales son:
| Pin | Direction |
| 1 | In/Out |
| 2-9 | In/Out Puerto de Datos es Entrada o Salida pero no simultaneos. |
| 10 | Input, Generador de Interrupciones IRQ |
| 11 | Input |
| 12 | Input |
| 13 | Input |
| 14 | In/Out |
| 15 | Input |
| 16 | In/Out |
| 17 | In/Out |
| 18-25 | Ground |
Algunas computadoras muy pero muy viejas no permitían usar el puerto de datos de 8bits para recibir información, sólo permitían sacar datos. De este puerto no se puede obtener mucha corriente, así que hay que tener en cuenta que debemos amplificar estas señales.
Todo el hardware utiliza puertos que son bytes o registros como los queramos llamar que existen en un espacio de memoria especial llamado de entrada salida, el puerto paralelo si lo tenemos configurado por defecto, manejará la posición de memoria base 0x378 en el área de memoria de IO.Esto lo veremos más adelante sobre como programar en C para enviar y recibir datos.
Veamos un ejemplo de como activar el puerto de datos a todos 11111 o sea enviar la señal de encendido.
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <asm/io.h>
#define base 0x378 /* definimos una macro llamada base con el puerto IO base */
#define value 255 /* 255 representa el valor 11111111 en binario o sea todos los bits encendidos */
main(int argc, char **argv)
{ if (ioperm(base,1,1)){fprintf(stderr, "no se puede obtener permiso para escribir en %x\n", base), exit(1);} outb(value, base); /* Escribimos la información */
}
Si ponemos leds en los pines de datos veríamos que se encendieron todos, si hacemos operaciones de bits, podemos enviar números que enciendan o apaguen otros leds.
Este era mi futuro grabador de Eproms, ya que wilem se tardó demasiado ara venderme uno, el problema es que no tuve tiempo de terminarlo y la itad del driver para Linux es funcional, pero esta tarjeta se usará
para controlar de manera remota la grúa que Oscar pretende construir ara filmar tomas aéreas, (todo es reutilizable).
Mi idea fue la de identificar incluso la tarjeta, envié un código al puerto de datos, otro al de control que activaba el decodificador y me activaba un pin en el puerto de control de entrada, asi yo sabía que MI tarjeta estaba conectada y no la de alguien más.
Los demás chips que se ven son buffers que los llenaba con el bus de datos y con el de control y el decodificador enviaba la señal para decidir quien almacenaba ese dato, asi construia un espacio de direcciones más grande para otros tipos de memoria y multiplexaba el canal de datos. Los leds amarillos son los de datos, los verdes son los 4 del puerto de control.
Puedes usar si lo deseas estas bibliotecas de programación que están disponibles para manejar el puerto (yo usé mi propio código no use bibliotecas):
http://parashell.sourceforge.net/ Y este otro http://parapin.sourceforge.net/doc/parapin.html



