Tutorial para el encendido y apagado de LEDs mediante puerto paralelo
Enviado por Miguel Rocabado y Carlos Encinas
Objetivos
Mostrar el armado de un circuito simple mediante el puerto paralelo para encender y apagar led´s de una maqueta (casa).
Usar el Turbo c++ u otro programa similar que sea capaz de encender y apagar led`s de una maqueta (casa).
Para hablar encendido y apagado de led´s mediante el uso del programa del Turbo C++, hay que decir primero.
Turbo C
Turbo C era un entorno de desarrollo integrado y compilador desarrollado por Borland para programar en lenguaje C.
Su primera versión es de 1987, a la que siguieron las versiones 1.5 y 2.0, de 1989. Fue el compilador más popular para desarrollar en C en entornos MS-DOS. Se le considera el primer IDE para C disponible para dicha plataforma.
Fases de un programa en Turbo C
Las fases de un programa en Turbo C se pueden resumir en:
Edición
Compilación
Enlazado
Ejecución
La Edición de un programa consiste, simplemente, en editar el código fuente del programa, Turbo C incluye un editor para este efecto.
La Compilación del programa consiste en convertir el código fuente en código objeto.
El Enlazado consiste en enlazar el código objeto para obtener el código ejecutable.
Finalmente, la Ejecución consiste precisamente en ejecutar el programa.
El entorno de Turbo C
El entorno de Turbo C facilita la edición, compilación y el enlazado de los programas, ya que incluye un editor y herramientas para compilar y enlazar los programas, para configurar el entorno de Turbo C, primero hay que conocerlo, a continuación se explican las características más importantes del entorno…
El editor de Turbo C
El editor de Turbo C es una poderosa herramienta que nos facilita enormemente la edición de un programa, es como un editor de texto cualquiera, pero, para los que están acostumbrados a los editores que funcionan bajo Windows, tal vez se encuentren con una forma diferente de editar texto, por ejemplo, para seleccionar un bloque de texto, en el editor de Turbo C, se presiona la combinación de teclas CTRL+K+B al inicio del bloque que se desea seleccionar, y la combinación CTRL+K+K al final del mismo. Después, con ese bloque seleccionado, se pueden hacer diversas cosas, como:
CTRL+K+Y: Elimina el bloque.
CTRL+K+V: Mueve el bloque.
CTRL+K+C: Copia el bloque.
De cualquier forma, es conveniente que se familiaricen con el editor de Turbo C a medida que aprenden a programar, es decir, no es necesario aprender a usar el editor al 100%.
El Debugger de Turbo C
En ocasiones, un programa que está léxica y sintácticamente bien escrito, puede no dar los resultados correctos, estos resultados pueden deberse a errores comunes de programación, tales como errores lógicos, comúnmente llamados bugs, aunque existen otros tipos de errores, tales como errores en tiempo de ejecución (tema del que nos ocuparemos más adelante), el debugger de Turbo C nos ayudará a detectar y corregir dichos errores lógicos. Por ejemplo, si deseamos monitorear en todo momento el valor de una variable (watch) presionaremos la combinación CTRL+F7, y posteriormente, podremos ejecutar el programa línea por línea (F7) o función por función (F8).
Puerto paralelo.
Vamos a dar ciertos detalles sobre el puerto paralelo:
Un puerto paralelo es una interfaz entre una computadora y un periférico cuya principal característica es que los bits de datos viajan juntos enviando un byte completo o más a la vez. Es decir, se implementa un cable o una vía física para cada bit de datos formando un bus.
El cable paralelo es el conector físico entre el puerto paralelo y el periférico. En un puerto paralelo habrá una serie de bits de control en vías aparte que irán en ambos sentidos por caminos distintos.
En contraposición al puerto paralelo está el Puerto serie, que envía los datos bit a bit por el mismo hilo.
El sistema operativo gestiona las interfaces de puerto paralelo con los nombres LPT1, LPT2 y así sucesivamente, las direcciones base de los dos primeros puertos es:
LPT1 = 0×378.
LPT2 = 0×278
La estructura consta de tres registros: de control, de estado y de datos.
El registro de control es un bidireccional de 4 bits, con un bit de configuración que no tiene conexión al exterior, su dirección en el LPT1 es 0x37A.El registro de estado, se trata de un registro de entrada de información de 5 bits, su dirección en el LPT1 es 0×379.El registro de datos, se compone de 8 bits, es bidireccional. Su dirección en el LPT1 es 0×378.
Conector DB25.
La descripción de este conector se da a continuación:
El Dataport se usa como salida El Statusport se usa como entrada El Controlport se usa de las dos formas anteriores
Los LED´s.
LED es la abreviatura en lengua inglesa para Light Emitting Diode, que en su traducción al español correspondería a Diodo Emisor de Luz.
Un LED consiste en un dispositivo que en su interior contiene un material semiconductor que al aplicarle una pequeña corriente eléctrica produce luz. La luz emitida por este dispositivo es de un determinado color que no produce calor, por lo tanto, no se presenta aumento de temperatura como si ocurre con muchos de los dispositivos comunes emisores de luz.
El color que adquiera la luz emitida por este dispositivo dependerá de los materiales utilizados en la fabricación de este. En realidad dependerá del material semiconductor, que dará una luz que puede ir entre el ultravioleta y el infrarrojo, incluyendo en el medio toda la gama de colores visibles al ojo humano.
5 leds de diferentes colores
1 Protoboard
Conector macho y hembra (1 metro o metro y medio)
5 resistencias de 1 [k?]
Cables de cobre de diferentes colores
Turbo C++
Maqueta de una casa.
Es recomendable tener unos cuantos leds más y unas cuantas resistencias más, por si acaso.
Con esos antecedentes ahora vamos a explicar los detalles del circuito:
El Circuito
Donde dice "Pin puerto paralelo" puede ser cualquier Pin del 2 al 9. No olvidar hacer una conexión al pin 25 que es tierra
El circuito consiste en un led con una resistencia, la resistencia se usa para
limitar la intensidad y no pedir más de la que el puerto paralelo es capaz de dar (5 mA). Cuando se active el pin el led se encenderá.
En este proyecto lo que se quiere mostrar es como, con un simple circuito, se puede controlar mediante la computadora una fila de LEDs los que se van a encender en una secuencia que nosotros vamos a controlar con un pequeño programa escrito en el lenguaje de programación Turbo C++.
El circuito que se va armar será montado sobre una plaqueta, la cual conduce la corriente eléctrica, llamada "protoboard".
Como nuestro objetivo es controlar los diodos LEDs con la computadora, esto es encenderlos y apagarlos según como queramos. Los LEDs son diodos que tienen la capacidad de emitir luz cuando circula una corriente por ellos. Esta corriente debe ser del orden de los 10 mA (miliampers). Para limitar la corriente que pasa por los LEDs se usan las resistencias que se oponen al paso de ella.
Para controlar un circuito externo con la computadora se usará el puerto paralelo de ella, para conectar el puerto con el circuito se necesitará el cable paralelo o conector DB-25.
El paso siguiente es soldar cable fino UTP a los pines internos del conector. Como los pines están numerados del número 1 al 25, solo usaremos los pines numerados del 2 al 9, también se tiene que soldar un cable al pin 25 (que es el pin de masa o tierra eléctrica) para tener una descarga a tierra común, para nuestro circuito y la computadora.
Una vez construido el cable se lo puede conectar al protoboard.
Solo se deben usar cinco entradas y cinco salidas, ya que son solo cinco LEDs los que controlamos.
Las cinco salidas están conectadas por medio de una resistencia limitadora de corriente a una LED cada una. Estas resistencias son de un valor de 1[k?] y permite que circule una corriente de 10 mA (miliampere) por cada diodo.
Las siguientes imágenes pueden ayudar a apreciar mejor la conexión del circuito:
1. Circuito armado en el protoboard para la prueba inicial.
*Nota: A fin de que todo funcione bien se recomienda primero solo armar en el circuito con un solo led a fin de que el programa no sea engorroso y fin de verificar el armado de los circuitos y de verificar que la estructura de control este bien hecho.
El siguiente paso es escribir las directivas y comandos en el programa:
#include
#include
main()
{
int a=0,b=0,c=0,d=0,e=0;
menu://float x,p;
int opcion,op1;
//system("cls");
clrscr();
cout < < "tttControlar las luces de una viviendannn1.tSalann2.tDormitorio 1nn3.tDormitorio 2nn4 tCocinann5 tBanonn6.tSalirnnEscoja una opcion…";
cin>>opcion;
switch(opcion){
case 1: //system("cls");
clrscr();
cout < < "ttt Salan1.t Encender nn2.tApagar nn3.tRegresar al menu nnopcion: ";
while(1){
cin>>op1;
if(op1==1){cout < < "Luz encendida";
a=0x01;
outport(0x378,a+b+c+d+e);
}
if(op1==2){cout < < "luz apagada";
a=0;
outport(0x378,a+b+c+d+e);
}
if(op1==3){goto menu;//cout < < "tttLuz encendida";
}
}
case 2://system("cls");
clrscr();
cout < < "tttDormitorio 1n1.tEncendernn2.tApagarnn3. tRegresar al menu nnopcion: ";
while(1){
cin>>op1;
if(op1==1){cout < < "luz encendida";
b=0x02;
outport(0x378,a+b+c+d+e);
}
if(op1==2){cout < < "Luz apagada";
b=0;
outport(0x378,a+b+c+d+e);
}
if(op1==3){goto menu;//cout < < "tttLuz encendida";
}
case 3: //system("cls");
clrscr();
cout < < "ttt Dormitorio 2nn1.tEncendernn2.tApagar nn3.tRegresar al menunnopcion: ";
while(1){
cin>>op1;
if(op1==1){cout < < "luz encendida";
c=0x04;
outport(0x378,a+b+c+d+e);
}
if(op1==2){cout < < "Luz apagada";
c=0;
outport(0x378,a+b+c+d+e);
}
if(op1==3){goto menu; //cout < < "tttLuz encendida";
}
}
case 4: //system("cls");
clrscr();
cout < < "ttt Cocinan1.tEncendernn2.tApagarnn3. tVolver al menu nnopcion: ";
while(1){
cin>>op1;
if(op1==1){cout < < "luz encendida";
d=0x08;
outport(0x378,a+b+c+d+e);
}
if(op1==2){cout < < "luz apagada";
d=0;
outport(0x378,a+b+c+d+e);
}
if(op1==3){goto menu; //cout < < "tttLuz encendida";
}
}
case 5: //system("cls");
clrscr();
cout < < "ttt Banon1.tEncender nn2.tApagarnn3.tVolver al menunnopcion: ";
while(1){
cin>>op1;
if(op1==1){cout < < "Luz encendida";
e=0x10;
outport(0x378,a+b+c+d+e);
}
if(op1==2){cout < < "Luz apagada";
e=0;
outport(0x378,a+b+c+d+e);
}
if(op1==3){goto menu; //cout < < "tttLuz encendida";
}
}
case 6://system("cls"); ");
clrscr();
cout < < "hasta pronto… n";
break;
}
//system("pause");
getch();
return(0);
}
}
Si todo salió bien con los comandos entonces se compilara y ejecutara teniendo en cuenta de no cometer errores cerrar bien los corchetes, verificar que no falta ningún signo, punto o algún otro símbolo al transcribirlo y tendra que salir como se muestra en la imagen:
Escogemos una opción y aparecerá la siguiente imagen:
Agregamos alguna imágenes de la casa y el circuito:
Autor:
Miguel Rocabado
Carlos Encinas