epespad

Utilizar y manejar el Puerto Paralelo en Linux (C o C++)

Utilizar y manejar el Puerto Paralelo en Linux (C o C++)


Muchas veces, navegando por la red, he tratado de encontrar una forma de manejar el puerto paralelo, pero la mayoria son muy confusas, y avanzadas, asi que les traigo una forma sencilla de manejarlo sin tanta complicacion.

El puerto paralelo se conforma de:

Utilizar y manejar el Puerto Paralelo en Linux (C o C++)

(Cada uno de los hoyitos se les llaman pines)

Usaremos los verdes, los cuales numeraremos de derecha a izquierda, del uno al 8.

Generalmente, nuestros puesrtos paralelos estan establecidos en la direcion hexadecimal (0x378), pero tambien podrian estar en la (0x278), experimenten, pues cada PC es diferente.

Bueno, lo que hace el programa que les presentare a continuacion es que manda un on o off binario al puerto indicando si deja pasar o no voltaje.

Ahora, si mandaramos un 0, seria 0000 0000 en binario (cada pin es un 0), lo que significaria que todos estarian apagados, si mandamos un 1, se prenderia 0000 0001, por lo tanto se iluminaria el primer pin.

Usaremos la siguiente tabla binaria para ubicarnos

C++

El numero de pin sera la potencia de 2 que utilizaremos para indicar ese pin, por ejemplo
2 a la 3 es 8, por lo tanto si queremos prender solamente el pin 3, tendriamos que poner 8, pero si aparte queremos prender el pin 1, tendriamos que poner 8 + 1. y si quisieramos prender todos hasta el 3, seria 8 + 4 + 2 + 1 = 15 (Recuerden que se toma en cuenta 2 a la 0)

Ya entendido esto, este es el codigo necesario:

Nota: Se tiene que ejecutar como administrador, y dar permisos de ejecucion

#include <iostream> // Se puede poner la de printf
#include <sys/io.h> // Esta nos da los comandos
#define puerto (0x378)

/* Notense los parentesis, son importantes, pues en este declaramos el puerto, tambien podria ser (0x278), si no les funciona el 378 */

using namespace std; // Para el Iostream

int main(){
if(ioperm(puerto,1,1)){ // Abrimos el puerto, y verificamos permisos de abrir el puerto
cout << "Hubo un error de permisos" // Se da si no tenemos permisos
sleep(5);
return 1; // Devuelve error 1 y finaliza
}
outb(puerto, 15); //Prendemos los primeros 5 pines, mandando una salida de 5V
if(ioperm(puerto,1,0)){ // Cerramos el puerto, y verificamos permisos del puerto
cout << "Hubo un error de permisos, ERROR 2";
sleep(5);
return 2; // Devuelve error 2 y finaliza
}
return 0;
}


Con este codigo se debio haber prendido los primeros 5 focos

Si quieren ver las salidas de los puertos paralelos, comprense unos leds que usen menos de 5v, y conectenlo en las salidas del 1 al 8, (empiecen por el 1, es mas facil), o del 1 al 3, dependiendo de sus leds disponibles, Deben conectar la parte negativa a una parte metalica del gabinete, o a una de las tierras del puerto.

Espero que les haya gustado, y si tienen dudas no duden en postearlas.

Este es un tutorial hecho bajo la licencia CC, que permite copiar dando gracias al autor, No se permite su uso comercial ni su modificacion. Cualquier termino violado se penara. Se puede violar esto, si se tiene los permisos del autor, (D4rk Pyr0, YO)


leds

18 comentarios - Utilizar y manejar el Puerto Paralelo en Linux (C o C++)

djuanv
Te hago una pregunta.

Como puedo hacer para manejarlo con un numero binario? Por ej:
Yo tengo un vector de 8 posiciones, donde cada bit se corresponde con una salida.
Como puedo hacer para utilizar ese vector como salida, o como harías vos porque no entiendo bien como hacerlo ya que, por ejemplo, el 15 se representa como 1111, de modo que no entiendo por que prende 5 leds.

Gracias y saludos
sebaslds15
Gx bro, fue lo primero que encontre en google, y me fue muy util.
mavabe
outb(puerto, 15);
A mi me funcion pero al contario

outb(15,PUERTO);
cuezo
Hola muy bueno el post, me podrias realizar un ejemplo para leer el puerto 4000 de una red mediante C++.
Muuchas gracias
Cryingwolf
muy bueno che, me re sirvio.

toma 10 puntos
gaston275
ggracias, hace bastante que vengo busando esto te mereces puntos, lastima que soy novato
matyvico
Lo voy a implementar seguro, pero con displays led para mostrar frases y cosas asi, que me va a llevar un poco mas de programacion pero tampoco taaanto
Sgt_Pepper
buenisimo, a fav y +10 . Saludos.-
dgg006
No se que le pasa a taringa que no me deja mandarte un MP. Necesito aprender esto, como no te haces una idea... Y no me quedo claro esto:
D4rk_Pyr0 dijo:El numero de pin sera la potencia de 2 que utilizaremos para indicar ese pin, por ejemplo
2 a la 3 es 8, por lo tanto si queremos prender solamente el pin 3, tendriamos que poner 8, pero si aparte queremos prender el pin 1, tendriamos que poner 8 + 1. y si quisieramos prender todos hasta el 3, seria 8 + 4 + 2 + 1 = 15 (Recuerden que se toma en cuenta 2 a la 0)

Porfavor, comunícate conmigo de alguna forma
AxelPineda
Que tal amigo,estuve probando tu codigo y me da error el ioperm y el outb que segun solo son de linux, existe algun codigo equivalente en c++ windows?
bubitis
tengo problemas con un motor paso a paso la verdad es q no encuentro la forma en conectar el puerto al motor me podrias ayudar ya que veo q has pasado por este tema antes que yo