/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

puerto paralelo

 
      Índice del Foro elrincondelc.com -> C/C++ en General
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
muyo_85



Registrado: 15 Jul 2007
Mensajes: 10
Ubicación: Argentina

MensajePublicado: 17/11/2007 7:19 am
Título: puerto paralelo

buenas!! tengo una consulta estoy haciendo en c un control para un autito por medio de unos motores comunes de c.c. la parte de los movimientos(adelante, atras, izquierda, derecha) ya logre q funcione a traves de una interfaz y mandando bits al 0x378, pero me piden que le agregue un sensor de proximidad eso tambien lo tengo hecho pero ahora viene mi gran problema yo a la salida del sensor cuando se activa tengo 5v que deseo llevar a la direccion 0x379, 0x40; que seria el pin 10 del db 25 el tema es que no se me ocurre como leer ese dato por borland c++.

bueno cualquier ayuda sera agredecida.

saludos
Volver arriba
Yahoo Messenger
scMaverick



Registrado: 11 Oct 2005
Mensajes: 314
Ubicación: Costa Rica

MensajePublicado: 20/11/2007 1:00 pm
Título:

Bueno pues si ya tienes la interfaz montada en C++ supongo que estas usando la funcion outport(Nump_puerto,dato), pues para leer no hay nada mas que usar inport(Num_puerto) y te devuelve un byte de la misma forma que le mandas al outport.
Si aun no habias hecho nada en C con estos comandos pues entonces buscate un poco en internet, la bronca es que esto solo funciona en windows98, si quiere 2000 xp entonces tendras que usar alguna API que ya ande por ahi. Busca en google!
_________________
MaVeRiCk para SERCAS Industry y Screaming Minds
http://www.sercasindustry.tk
Volver arriba
Yahoo Messenger
muyo_85



Registrado: 15 Jul 2007
Mensajes: 10
Ubicación: Argentina

MensajePublicado: 20/11/2007 2:12 pm
Título: gracias

si las funciones las conozcos y las estoy usando pero no logro q c me de bola cuando mando un bit en 1 aca te dejo el programa para q lo veas y si me podes dar una mano te agradecria muchisimo.

#include<stdio.h>
#include<conio.h>
#include<dos.h>
#include<ctype.h>

#define IRQ1 0x9
#define irq7 0x0f
#define FORWARD 0x01
#define BACKBARD 0x07
#define LEFT 0x05
#define RIGHT 0x03
#define STOP 0x00

void interrupt far teclado(void);
void InterrupInit(void);
void InterruptEnd(void);
void InterrupInit1(void);
void InterruptEnd1(void);
void adelante(void);
void atras(void);
void izquierda(void);
void derecha(void);
void parar(void);
void puerto(void);
char menu (void);
void control(void);
void botones (void);



void (interrupt far *OldHandler)(void);
void (interrupt far *OldHandler1)(void);

char i,puertop=0,inicio,flag=0,teclaon=1,f='w',b='s',l='a',r='d',p='x';
int port;



int main(void)
{char c;


FILE *fp;
fp=fopen("c:\\inicio.txt","r");
while ((c=fgetc(fp))!=EOF)
printf("%c",c);
while(!kbhit())
{
}
fclose(fp);


puerto();
while(1)
{
inicio=menu();
if(inicio==1)
botones();
if(inicio==2)
control();
if(inicio==3)
exit(0);
}
}

char menu (void)
{
char opcion=0;

while(opcion<1 || opcion>3)
{
clrscr();
printf("1)Configurar Teclado");
printf("\n2)Operar puerto paralelo");
printf("\n3)Salir");
printf("\nElija opcion:");
scanf("%d",&opcion);
}
return opcion;
}

void botones (void)
{
f=0;
b=0;
l=0;
r=0;
p=0;
while(f<'a'|| f>'z')
{ clrscr();
printf("Ingrese tecla para avanzar:");
f=getchar();
}
while((b<'a'|| b>'z') || b==f)
{ clrscr();
printf("Ingrese tecla para retorceder:");
b=getchar();
}
while((l<'a'|| l>'z') || l==f || l==b)
{ clrscr();
printf("Ingrese tecla para girar a la izquierda:");
l=getchar();
}
while((r<'a'|| r>'z') || r==f || r==b || r==l)
{ clrscr();
printf("Ingrese tecla para girar a la derecha:");
r=getchar();
}
while((p<'a'|| p>'z') || p==f || p==b || p==l || p==r)
{ clrscr();
printf("Ingrese tecla para parar:");
p=getchar();
}
return;
}

void control(void)
{
InterrupInit();
InterrupInit1();
while(flag==0)
{
if (puerto==1)
printf("Esta por chocar");
if(teclaon==1)
{
if(puertop==1)
printf("Esta por chocar")
i=getch();
if(i==f)
adelante();
if(i==b)
atras();
if(i==l)
izquierda();
if(i==r)
derecha();
if(i==p)
parar();
i=toupper(i);
if(i=='Q')
{
clrscr();
printf("CHAU");
InterruptEnd();
InterruptEnd1();
flag=1;
outportb(0x378,0x00);
}
teclaon=0;
}


}return ;
}

void InterrupInit(void)
{

disable();
OldHandler = getvect(irq1);
setvect(irq1,teclado);
enable();
}

void InterrupInit1(void)
{

disable();
OldHandler = getvect(irq7);
setvect(irq7,intpuerto);
enable();
}

void InterruptEnd(void)
{
disable();
setvect(irq1,OldHandler);
enable();

}

void InterruptEnd1(void)
{
disable();
setvect(irq7,OldHandler);
enable();
}

void interrupt far teclado(void)
{
teclaon=1;
OldHandler();
outportb(0x20,0x20);
}

void interrupt far intpuerto(void)
{
puertop=1;
OldHandler1();
outportb(0x20,0x20);
}

void puerto(void)
{ clrscr();
printf("Elija direccion del puerto paralelo\n(Ingresar datos como
hexadecimal):");
scanf("%x",&port);
printf("%x",port);
return;
}
void adelante(void)
{
printf("\nadelante");
outportb(port,FORWARD);
}
void atras(void)
{
printf("\natras");
outportb(port,BACKBARD);
}
void izquierda(void)
{
printf("\nizquierda");
outportb(port,LEFT);
}
void derecha(void)
{
printf("\nderecha");
outportb(port,RIGHT);
}
void parar(void)
{
printf("\nparar");
outportb(port,STOP);
}



Control de Coche por Puerto Paralelo

En este programa se utilizan los conceptos de interrupciones junto con
los de archivos para complementarse en una tarea entretenida como es
manejar un objeto por uno de los puertos mas utilizados de los
programaores: el puerto paralelo.

El software se trato de simplificar al maximo, para permitir la
deteccion sencilla y prematura de errores que pudieran surgir.

El programa consiste con la inicializacion del puerto. Luego se
desplegara un menu que le permitira setear la teclas de control, el acceso al
puerto y la salida del programa.

Por omision:
Adelante: w
Atras: s
Izquierda: a
Derecha: d
Parar: x


bueno cualquier ayuda sera bienvenida. por cierto el programa lo corre en xp con un programa llamado userport
saludos
Volver arriba
Yahoo Messenger
scMaverick



Registrado: 11 Oct 2005
Mensajes: 314
Ubicación: Costa Rica

MensajePublicado: 20/11/2007 2:53 pm
Título:

OK, hay una parte en la descripcion de la tarea que dice:
El software se trato de simplificar al maximo, para permitir la
deteccion sencilla y prematura de errores que pudieran surgir.
Lo cual no estas cumpliendo, el codigo esta super largo y enredado, tienes demasiadas mini funciones y todas las variables son globales (lo cual no es bueno).
Estas usando muchas cuestiones de interrupciones que al final no entiendo para que las usas, no se como funcionara el auto pero me parece que estan enviando a cada rato un 0x20 al puerto y cuando se presiona un tecla se envia el valor al puerto para que gire o algo, pero no entiendo porq si al final este mismo codigo sera sobreescrito por el 0x20.
Peor bueno, si ya lograste girarlo esta bien.
Ahora, creo que el problema lo tienes al tratar de saber si el coche va a chocar o no, pues lo que veo es que no has puesto por ningun lado el codigo para leer del puerto, recuerda que el pp tiene 8 bits de salida y 5 de entrada en modo unidireccional, para leer los bits de entrada tienes que leer en la direccion BASE+2, o algo asi como 0x378+2. Leer esto te da tambien un byte pero los unicos bits que importan son los 5 mas bajos.
Mirate esto solo por si acaso:
http://www.modelo.edu.mx/univ/virtech/circuito/paralelo.htm

Antes de continuar te recomendaria que simplificaras ese codigo lo mas posible, que uses variables locales donde lo amerite y reduzcas la cantidad de funciones, pues hay muchas repetidas que podrian ser una sola.

Dime que piensas, nos vemos mañana!
_________________
MaVeRiCk para SERCAS Industry y Screaming Minds
http://www.sercasindustry.tk
Volver arriba
Yahoo Messenger
muyo_85



Registrado: 15 Jul 2007
Mensajes: 10
Ubicación: Argentina

MensajePublicado: 22/11/2007 5:24 pm
Título: gracias

buenas, si creo que tenes razón en que el codigo esta un poco enredado, pasa que lo fui haciendo como se me venia a la mente y con muy pocas modificaciones al probar la interfaz me funciono no lo toque, pero te voy a hacer caso trtando de simplificarlo un poco y leyendo lo que me pasate. cualquier novedad te aviso.
muchas gracias por el aporte.
saludos...
Volver arriba
Yahoo Messenger
      Índice del Foro elrincondelc.com -> C/C++ en General
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com