sábado, 27 de diciembre de 2008

Control de Puerto Paralelo con Linux

El día de hoy, he comenzado mis primeras líneas referente al contacto con mi hardware, y he empezado a hablar con mi bebé Linux, ahora comparto lo que he aprendido para todos aquellos de habla hispana que desconocen como hacerlo, es lo más básico pero aún así es muy didáctico.

HERRAMIENTAS NECESARIAS:
1.- Distribución Linux (en este caso Debian o Ubuntu o sus derivados)
2.- Paquetería de desarrollo build-essential
3.- Conector macho db-25
4.- 8 leds
5.- Circuito integrado 74ls244
6.- 4 resistores de 220 Ohms (para protección de los leds)

El diagrama es el siguiente:

Bien primero la instalación de los paquetes necesarios:

La aplicación build-essential nos permite instalar los programas de desarrollo para el entorno de linux, como lo son el gcc y algunas librerías más importantes implícitas en ella y se instala tecleando en la terminal de este modo:

$sudo apt-get install build-essential

Bien ahora el código lo pueden bajar desde acá http://w19.easy-share.com/1903013310.html:
Y su análisis sería como sigue:
NOTA: Después de donde dice include lleva estos símbolos <> lo que pasa es que blogger cree que son etiquetas.

#include stdio.h //esta librería permite el uso de printf y scanf entre otras
#include stdlib.h//esta librería permite el uso de exit();

#include sys/io.h
//esta librería permite el manejo de puertos en linux con lenguaje C
#define puerto 0x378 //definimos el puerto a utilizar

int main (void)
{
unsigned int p = 0x01; // aquí es donde tu dices cuantos leds prenderan, en este caso es uno en hexadecimal

//Aquí empieza el código del manejo de error
if(ioperm(puerto,1,1)) //en esta línea abrimos el puerto y le damos permiso de usarlo
{
perror("Se ha encontrado el siguiente error: "); //si no somos ROOT mostrará este error
exit(1); //terminará el programa mostrando el mensaje de error
}

outb(p,puerto); // esta es la instrucción que pone un número en BINARIO en la salida del puerto, con esta es con la que manejamos ya la salida en el puerto


if(ioperm(puerto,1,0)) //cerramos los permisos del uso al puerto
{
perror("Se ha encontrado el siguiente error: "); //volvemos a manejar un error en caso de...
exit(1); // salimos mostrando mensaje de error
}
exit(0); //terminamos el programa

}

Guardamos nuestro fichero como led.c.

Ahora compilamos utilizando optimización, osea de este modo:

$ gcc -O2 -o led led.c

y para correr nuestro programa solo escribimos en la terminal:

$ ./led


Y veran como se enciende un led, el chiste aquí es ir cambiando el valor de la variable "p" por otro pero en el formato que está, es decir en hexadecimal, por ejemplo si yo quiero que se muestre un número 7 en los leds será del siguiente modo:

unsigned int p=0x07;

Hay que recordar que esto es lo básico para obtener algo a la salida de un puerto paralelo, ya aplicando un poco de imaginación e ingenio se puede hacer algo más divertido, en fin, eso es todo por ahora, iré subiendo poco a poco más info alrededor de este ámbito, el plan es desarrollar un robot pequeño con linux.
Saludos.

10 comentarios:

  1. Disculpa pero no pusiste nombre en las librerias.
    Te agradeceria que las pusieras.

    ResponderEliminar
  2. Hey gracias por el dato, lo que pasa es que blogger las toma como etiquetas, sería:
    #include < stdio.h>
    #include < stdlib.h>
    #include < sys/io.h>

    Saludos y gracias por el dato.

    ResponderEliminar
  3. como podria hacer para escuchar el puerto? es decir algo parecido a un deamon, gracias :)

    ResponderEliminar
    Respuestas
    1. Hola se q esto es de hace mucho tiempo, pero buscando informacion sobre el trabajo con el puerto paralelo me tope con esta duda, y resulta que es la misma q tengo, y necesito saber si me pueden ayudar con el tema de escuchar el puerto paralelo, es para mi tesis, la verdad es lo q me falta para ver si logro terminar en tiempo, tengo un circuito que emite una señal y necesito capturarla o sea leerla cuando se emita, y entonces realizar algunas funciones. gracias si me pueden ayudar mi correo es: rpblanco@estudiantes.uci.cu
      Gracias:

      Eliminar
    2. Saludos, quisiera hacer unas pocas preguntas, ya que esto mismo es mi proyecto de Hardware, una asignatura de mi grado medio, en el diagrama yo veo 8 resistores de 1.5k y tu dices que son 4 de 226 disculpa mi ignorancia pero quisiera saberlo con seguridad y otra pregunta desde la ignorancia también, la parte de negativa de los leds, a donde va? y todas las terminaciones que terminan igual, como el punto de abajo del chip o lo del puerto paralelo? gracias.

      Un saludo.

      Eliminar
  4. Saludos, quisiera hacer unas pocas preguntas, ya que esto mismo es mi proyecto de Hardware, una asignatura de mi grado medio, en el diagrama yo veo 8 resistores de 1.5k y tu dices que son 4 de 226 disculpa mi ignorancia pero quisiera saberlo con seguridad y otra pregunta desde la ignorancia también, la parte de negativa de los leds, a donde va? y todas las terminaciones que terminan igual, como el punto de abajo del chip o lo del puerto paralelo? gracias.

    Un saludo.

    ResponderEliminar
  5. Lo de las resistencias de 1.5k lo único que hacen es bajar la iluminación de los leds, lo recomendable para un buen brillo son las 226 ohms. Respecto a tu otra pregunta de "a donde van", significa que van a TIERRA, osea que los conectes todos esos al lado negativo del voltaje ¿me explico?, igualmente cualquier duda aquí ando.

    Saludos.

    ResponderEliminar
  6. Muchas gracias, me sirvió mucho.

    ResponderEliminar
  7. Gracias, excelente aporte!

    ResponderEliminar

Escribe tu comentario acerca de las dudas que tengas y yo te atenderé con gusto =)
GRACIAS