|
Aplicaciones
con el Puerto Paralelo de la Computadora
Planteamiento del
Problema
Existe mucha
piratería en el medio informático, por lo que se requiere
nuevas formas de protección (se puede utilizar llaves físicas).
No se difunde
la información de como podemos lograr controlar dispositivos
físicos a través de una computadora, o hacer programas
para lograr controlarlos o como los diferentes lenguajes de programación
pueden lograr esto. Una aplicación sería:
Letrero Digital
- Sabemos que
muchas empresas y negocios comerciales requieren colocar sus anuncios,
pues para lo cual acuden a personas que hacen letreros y para un
nuevo anuncio requieren la creación de otro letrero a parte
de que estos son estáticos.
Entre los requerimientos
que tienen son:
- Estos deben cambiar según transcurre el tiempo o llega
un nuevo producto.
- Deben invertir en la elaboración de otro nuevo letrero
cada que llega un nuevo producto o no pueden promocionar su nuevo
producto por falta de letreros.
Para este proyecto,
usaremos la salida de un byte del puerto paralelo del computador,
y a la vez un bit de entrada. Esta será una aplicación
de control de proceso, puesto que usaremos un generador de pulsos
para el corrimiento de información que será desplegada
en los display, y también este generador de pulsos informará
a la computadora, para que esta mande otro byte por el puerto paralelo,
para así lograr la rotación de caracteres a través
de los displays.
Porque
el uso de LINUX
Linux es software de distribución libre, que hablando en
térninos económicos vendría a ser de costo
0 (cero). Es decir el software es gratis y lo único que se
paga es el transporte y la superficie sobre la que viene (CDROM,
etc)
Linux es utilizado por grandes empresas a nivel mundial, un ejemplo
de ello es Microsoft, IBM, etc.
Linux es considerado uno de los mejores dentro del software de servidores
para sitios WEB de todo el mundo y el más utilizado dentro
de la RED INTERNET.
Para tal efecto
utilizamos software libre y configuramos un servidor Linux. Pues
este proyecto permite mostrar que un usuario, podría controlar
un robot u otro periférico a travez de una computadora, con
tan solo conectarse a la red Internet. Pues en nuestro caso controlamos
un letrero digital por la WEB. Un ejemplo de esto es la empresa
TELECEL que envia mensajes a celulares por la WEB.
Pasos
siguientes
Tener un registro de todos los accesos al sitio WEB para el control
del letrero Digital.
Para esto usamos una Base de Datos, donde registramos todos los
mensajes que han sido enviados para ser desplegados en el sitio
WEB, a parte de tener Correo eletrónico, para comunicarse
con el Administrador, pues si fuera necesario habilitariamos un
Chat para comunicación en línea con el administrador.
Proyecciones
Pues sabemos que internet utiliza conexión satelital por
lo que sería factible, realizar trabajos desde cualquier
parte del mundo, teniendo el equipo necesario
Un ejemplo sería poner a trabajar robots en lugares inaccesibles
de nuestro planeta o en otros planetas
Un empresario comenzaría ya hacer publicidad con su nuevo
producto, una vez que cerró su negocio en JAPON.
Esquema
letrero digital
Este es un esquema
de un prototipo de letrero en la cual puede ser modificado o extendido
de acuerdo a la capacidad de cada implementador.
En
este esquema se ha usado un cargado en serie de registros. Que funciona
de tal forma que cuando el primer display es cargado, este espera
una señal "1" del reloj para copiar su contenido
al siguiente display espera el nuevo dato de la CPU, esto lo hace
con 1 bit de entrada de espera para luego copiar su contenido usando
flip flop dato.
El
programa utiliza el puerto paralelo de la computadora y este tiene
8 bits de salida, 4 de entrada y 4 de entrada y salida.
El diagrama de bloque del circuito del letrero digital usa registros
conectados en serie, de la computadora salen 8 bits de acuerdo al
bit de entrada el cual de la señal para mandar el otro byte.
A continuación les ofrecemos la codificación
en C para el letrero digital
#include<unistd.h>
#include<stdio.h>
#include<sys/io.h>
#include<sys/perm.h>
#define P 0x378
#define SR 0x379
int strip=0;
int salida(int dato)
{int
x;
setuid(0);
x=ioperm(P,1,1);
x=iopl(3);
if (x == 0)
{
outb(dato,P);
return 1;
}
else return 0;
}
void display(char caracter)
{
switch (caracter)
{
case 'a': salida(16);
break;
case 'b': salida(12);
break;
case 'c': salida(7);
break;
case 'd': salida(24);
break;
case 'e': salida(6);
break;
case 'f': salida(70);
break;
case 'g': salida(4);
break;
case 'h': salida(72);
break;
case 'i': salida(79);
break;
case 'j': salida(25);
break;
case 'k': salida(82);
break;
case 'l': salida(15);
break;
case 'm': salida(92);
salida(92);
break;
case 'n': salida(92);
break;
case 'o': salida(1);
break;
case 'p': salida(66);
break;
case 'q': salida(96);
break;
case 'r': salida(94);
break;
case 's': salida(36);
break;
case 't': salida(113);
break;
case 'u': salida(9);
break;
case 'v': salida(29);
break;
case 'w':
salida(29);
salida(29);
break;
case 'x': salida(82);
break;
case 'y': salida(40);
break;
case 'z': salida(82);
break;
case '_': salida(127);
break;
case '-': salida(126);
break;
case '0': salida(1);
break;
case '1': salida(121);
break;
case '2': salida(18);
break;
case '3': salida(48);
break;
case '4': salida(104);
break;
case '5': salida(36);
break;
case '6': salida(4);
break;
case '7': salida(113);
break;
case '8': salida(0);
break;
case '9': salida(96);
break;
}
}
int entrada()
{
int x,dato=0;
setuid(0);
x=ioperm(SR,1,1);
x=iopl(3);
if (x == 0)
{
dato = inb(SR);
return dato;
}
else
return dato;
}
void letrero(char pal[100],int dim)
{int circuito;
int sw1=0,c=0,nro=0,dato1=0,dato2=0;
int menor, mayor;
/*95 cero 127 uno*/
printf("<BR>Vea el letrero</BR>\n");
do{
if (dato1 == 0) dato1=entrada();
if (dato1 != entrada()){
if (dato2 == 0) dato2=entrada();
break;
}
}while (1);
if (dato1 < dato2)
{ menor = dato1;
mayor = dato2;
}
if (dato1 > dato2)
{ menor=dato2;
mayor=dato1;
}
do
{
circuito=entrada();
/*printf("\n%d",circuito);*/
if (circuito == menor ){
printf("\n%d",circuito);
if (sw1 == 0) {
if (c == dim) {c=0;
display('_');
printf("<BR>Fin de secuencia</BR>\n");
return ;
}
sw1=1;
display(pal[c]);
if (pal[c] == 'm' && nro == 0) {
sw1=sw1+1;
}
if (pal[c] == 'w' && nro == 0){
sw1++;
}
if (nro == 1) nro=0;
}
}
if (circuito == mayor)
{ if (sw1 == 2) nro=1;
if (sw1 == 1) c++;
sw1 =0;
}
/*printf("entramos a while");*/
}while (circuito == mayor || circuito == menor);
}
main(int argc, char *argv[])
{int longitud=0;
int i;
int ver;
int opcion;
/*char pal[100];
verifica cadena de entrada*/
while (argc > 1 && argv[1][0] == '-') {
switch (argv[1][1]) {
case 's':
strip = 1;
break;
default:
fprintf(stderr, "%s: no encuentra argumento
%s\n",argv[0],argv[1]);
exit(1);
}
argc--;
argv++;
}
/*fin de verifica cadena*/
if (argc == 1){
return ;}
longitud=strlen(argv[1]);
if (argc == 2){
printf("<BR></BR>\n");
printf("<BR>Mensaje: %s de longitud: %d <BR>\n",
argv[1],longitud);
printf("<BR>Correo Electronico: wsqt@eudoramail.com</BR>\n");
letrero(argv[1],longitud);
}
return ;
}
|