miguels188
Bovino maduro
- Desde
- 11 Mar 2008
- Mensajes
- 134
- Tema Autor
- #1
Hola que tal amigos, resulta que tengo un proyecto de programacion en la escuela y tiene que ir enfocado a interactuar con el puerto paralelo, la verdad le entiendo mas o menos bien a esto de programar, pero nunca habia usado esto del puerto, haber si alguien me puede ayudar.
Dispongo de un motor de pasos y otro de corriente directa y lo que tengo que hacer es:
*Prender y apagar el motor de corriente directa.
*Controlar la velocidad (potencia) del motor de corriente directa a como lo guste
el usuario tomando de un 0% a 100% de la capacidad del motor.
*Poner en reversa el motor de corriente directa.
*Controlar el angulo de inclinacion del motor de pasos de +35º hasta -35º.
Creo eso es todo (jejejejeje) y como la verdad no entiendo bien esto del puerto paralelo me puse a investigar y leer en internet, encontre algunos codigos, pero no me han servido bien o yo no los he podido ejecutar.
NOTA: el motor de corriente directa es del vibrador de un control de playstation, el de pasos es de una impresora (creo que es de 6 hilos o 4).
El lenguaje de programacion que debo usar es C++.
El compilador que uso es Borland C++ 3.1
Espero que alguien me pueda ayudar, aqui dejo algunos de los codigos que he encontrado
Mas o menos lo quiero adaptar a esto, es como la simulacion de un submarino, pero muy muy pobremente, espero alguien me pueda apoyar un poco
GRACIAS
Dispongo de un motor de pasos y otro de corriente directa y lo que tengo que hacer es:
*Prender y apagar el motor de corriente directa.
*Controlar la velocidad (potencia) del motor de corriente directa a como lo guste
el usuario tomando de un 0% a 100% de la capacidad del motor.
*Poner en reversa el motor de corriente directa.
*Controlar el angulo de inclinacion del motor de pasos de +35º hasta -35º.
Creo eso es todo (jejejejeje) y como la verdad no entiendo bien esto del puerto paralelo me puse a investigar y leer en internet, encontre algunos codigos, pero no me han servido bien o yo no los he podido ejecutar.
NOTA: el motor de corriente directa es del vibrador de un control de playstation, el de pasos es de una impresora (creo que es de 6 hilos o 4).
El lenguaje de programacion que debo usar es C++.
El compilador que uso es Borland C++ 3.1
Espero que alguien me pueda ayudar, aqui dejo algunos de los codigos que he encontrado
Código:
#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <string.h>
int i, contador=2, paralelo(), para, opci=1, stop=0, araparo=0, sentido=0, giro(int arraparo1, int velocidad1, int sentido1), sentido1, velocidad1, arraparo1, bit=1, bit2, dato;
double velocidad=1000;
char *mas="+", *menos="-", *paro="2", *arra="8", *derecha="6", *izquierda="4", *salir="5", *letra;
unsigned int _far *puntero_a_direccion;
main()
{
paralelo();
clrscr();
gotoxy(70,1);
if(araparo==0)
printf("[P]");
else
printf("[A]");
gotoxy(70,2);
if(sentido==0)
printf("[i]");
else
printf("[D]");
gotoxy(70,3);
printf("[MIN] ");
gotoxy(1,1);
printf("1.-Arranque[8] Paro[2]\n2.-Sentido Izquierda[4] Derecha[6]\n3.-Velocidad [+] [-]\n");
printf("4.-Salir [5]");
while(stop==0)
{
while (!kbhit())
{
dato=inportb(para+1);
if(dato==88)
{
sentido=1;
gotoxy(70,2);
printf("[D]");
}
if(dato==56)
{
sentido=0;
gotoxy(70,2);
printf("[i]");
}
if(dato==112)
if(velocidad>19)
{
velocidad=velocidad-10;
gotoxy(70,3);
printf("[%.0f] ",velocidad);
}
else
{
gotoxy(70,3);
printf("[MAX] ",velocidad);
}
if(dato==104)
if(velocidad<900)
{
velocidad=velocidad+10;
gotoxy(70,3);
printf("[%.0f] ",velocidad);
}
else
{
gotoxy(70,3);
printf("[MIN] ");
}
if(araparo==0);
else
{
if(sentido==0)
{
if(bit==16)
bit=1;
outportb(para,bit);
delay(velocidad);
bit=bit*2;
}
else
{
if(bit==16)
bit=8;
if(bit==1/2)
bit=8;
outportb(para,bit);
delay(velocidad);
bit=bit/2;
}
}
}
*letra=getch();
opci=strcmp(letra, arra);
if(opci==0)
{
araparo=1;
gotoxy(70,1);
printf("[A]");
}
opci=strcmp(letra, paro);
if(opci==0)
{
araparo=0;
gotoxy(70,1);
printf("[P]");
}
opci=strcmp(letra, salir);
if(opci==0)
stop=1;
}
}
paralelo()
{
clrscr();
busqueda:
puntero_a_direccion=(unsigned int _far *)0x00000408;
printf("DIRECCIàN ACTUAL:\t\t\t\t\t[%d]\n", para);
printf("Elije el puerto paralelo:\n1.-LPT1\n2.-LPT2\n3.-LPT3\n");
scanf("%d", &i);
clrscr();
if(i>3)
{
clrscr();
printf("Puerto Inv lido");
getch();
goto busqueda;
}
if(i>1)
{
while(contador<=i)
{
puntero_a_direccion++;
contador++;
}
}
i=i-1;
clrscr();
if (*puntero_a_direccion == 0)
{
printf("No se encontro puerto asignado a LPT%d \n", i+1);
getch();
clrscr();
goto busqueda;
}
else
{
printf("La direccion asignada a LPT%d es 0x%Xh\n", i+1, *puntero_a_direccion);
para=*puntero_a_direccion;
}
outportb(para, 0);
getch();
}
Código:
#include<stdio.h>
#include<conio.h>
#include<dos.h>
#define puerto 0x378
// o 0x278 o 0x3BC (direccion del puerto)
float i=0;
int cuvu(float vueltas){
i =0.25;
if(i>=vueltas) return 1;
else return 0;
}
void main()
{
int sen;
float vel,vuel,seg;
clrscr();
printf("Control de motor de pasos por el puerto paralelo\n");
printf("\n");
printf("Cuantas vueltas?"); scanf("%f",&vuel);
printf("\nVelocidad (vueltas por segundo)? "); scanf("%f",&vel);
seg=(1/vel);
printf("\nSentido (1 manecillas el reloj, 2 contrario)?"); scanf("%d",&sen);
outp(puerto, 0x00); //desenergizar bobinas
printf("\nInicio con todas las bobinas desactivadas");
getch();
if (sen==1)
{
clrscr();
printf("Sentido de las manecillas del reloj");
i=0;
do{
outp(puerto,0x08);
delay(seg/4*1000);
gotoxy(38,12);
printf("%f ",i);
if (cuvu(vuel)) break;
outp(puerto,0x04);
delay(seg/4*1000);
gotoxy(38,12);
printf("%f ",i);
if (cuvu(vuel)) break;
outp(puerto,0x02);
delay(seg/4*1000);
gotoxy(38,12);
printf("%f ",i);
if (cuvu(vuel)) break;
outp(puerto,0x01);
delay(seg/4*1000);
gotoxy(38,12);
printf("%f ",i);
if (cuvu(vuel)) break;
}while(1);
getch();
}
if(sen==2){
clrscr();
printf("Sentido contrario");
i=0;
do{
outp(puerto,0x01);
delay(seg/4*1000);
gotoxy(38,12);
printf("%f ",i);
if (cuvu(vuel)) break;
outp(puerto,0x02);
delay(seg/4*1000);
gotoxy(38,12);
printf("%f ",i);
if (cuvu(vuel)) break;
outp(puerto,0x04);
delay(seg/4*1000);
gotoxy(38,12);
printf("%f ",i);
if (cuvu(vuel)) break;
outp(puerto,0x08); delay(seg/4*1000);
gotoxy(38,12);
printf("%f ",i);
if (cuvu(vuel)) break;
}while(1);
getch();
}
}
Código:
#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<dos.h>
#include<conio.h>
#define SALIDA 0X378
int main(void)
{
int c,pasos,retardo;
char respu,dir;
clrscr();
do
{ clrscr();
cout<<"Ingresar VELOCIDAD DE GIRO: ";
cin >>retardo;
cout<<"Ingresar SENTIDO DE GIRO (d/i): ";
cin >>dir;
cout<<"Ingresar NUMERO DE PASOS: ";
cin >>pasos;
if (dir=='d') {
cout<<"GIRO A LA DERECHA";
for(c=1; c<=pasos; c++){
outportb(SALIDA,10);
delay(retardo);
outportb(SALIDA,9);
delay(retardo);
outportb(SALIDA,5);
delay(retardo);
outportb(SALIDA,6);
delay(retardo);
}
}
else if (dir=='i') {
cout<<"GIRO A LA IZQUIERDA";
for(c=1; c<=pasos; c++){
outportb(SALIDA,6);
delay(retardo);
outportb(SALIDA,5);
delay(retardo);
outportb(SALIDA,9);
delay(retardo);
outportb(SALIDA,10);
delay(retardo);
}
}
outportb(SALIDA,0);
cout<<"\n\n\t\tdesea continuar (s/n) :";
respu=getch();
} while(respu !='n');
exit (0);
}
Código:
#include <conio.h>
#include <dos.h>
#include <stdio.h>
#include <string.h>
#include<windows.h>
int paralelo(), para, opc=0, contador, estado=0;
unsigned int _far *puntero_a_direccion;
char *uno="1", *dos="2", *tres="3", *letra;
void main()
{
paralelo();
outportb(para,0);
while(opc!=3)
{
clrscr();
*letra=getch();
opc=strcmp(letra,uno);
if(opc==0)
{
outportb(para,1);
estado=1;
}
else
{
opc=strcmp(letra,dos);
if(opc==0)
{
outportb(para,0);
estado=0;
}
else
{
opc=strcmp(letra,tres);
if(opc==0)
{
gotoxy(30,20);
printf("Aplicaci¢n Finalizada");
delay(1000);
opc=3;
}
else
{
gotoxy(30,20);
printf("Presiona una opci¢n v*lida");
delay(1000);
}
}
}
}
outportb(para,0);
}
paralelo()
{
clrscr();
busqueda:
puntero_a_direccion=(unsigned int _far *)0x00000408;
printf("Rastreando Direcci¢n de Puerto Paralelo");
while(contador<40)
{
printf(".");
contador++;
delay(35);
}
clrscr();
para=*puntero_a_direccion;
outportb(para, 0);
}
Código:
#include<conio.h>
#include<math.h>
#define datos 8
#define control 4
#define captura 6
void main()
{
int d[datos]={0},d1[control]={0},i=0,j=0,k=0,suma,suma1;
double r[datos],r1[control];
char op, d2;
while(1)
{
clrscr();
printf("\n\n\n Control de Motor\n\n\n");
printf("¿Qué desea hacer?\n\n");
printf("1.-Desactivar motor\n");
printf("2.-Activar motor\n");
printf("3.-Salir\n\n");
scanf("%d",&op);
switch(op)
{
case 1:
clrscr();
outportb(0x3bc,0);
outportb(0x3bc,0xb);
printf("Motor desactivado\n");
printf("Presiones una tecla para continuar\n");
getch();
break;
case 2:
{
clrscr();
printf("\n¿Qué desea hacer con los motores?");
printf("\n D.- Desplazamiento hacia adelante");
printf("\n R.- Desplazamiento en reversa");
printf("\n I.- Motor inactivo");
scanf("%c",&d2);
d2=toupper(d2);
if(d2!='D')
if(d2!='R')
if(d2!='I')
{
printf("\n %c no es una opción válida",d2);
printf("\n Inicie de nuevo el programa");
getch();
exit(0);
}
else
continue;
j=0;
for(i=0;i<=7;i++)
{
j++;
if(d2=='I')
{
d[i]=0;
d[i+1]=0;
}
else if(d2=='D')
{
d[i]=1;
d[i+1]=0;
}
else if(d2=='R')
{
d[i]=0;
d[i+1]=1;
}
i++;
}
k=4;
for(i=0;i<=3;i++)
{
k++;
if(d2=='I')
{
d1[i]=0;
d1[i+1]=0;
}
else if(d2=='D')
{
d1[i]=1;
d1[i+1]=0;
}
else if(d2=='R')
{
d1[i]=0;
d1[i+1]=1;
}
i++;
}
suma=0;
for(i=0;i<=7;i++)
{
r[i]=(pow(2,i)*d[i]);
suma=(r[i]+suma);
}
outportb(0x3bc,suma);
suma1=0;
for(i=0;i<=3;i++)
{
r1[i]=pow(2,i)*d1[i];
suma1=r1[i]+suma1;
}
suma1=suma1^0xb;
outportb(0x3be,suma1);
printf("\n\nDatos enviados\n\n");
printf("\nPresione una tecla para continuar...");
getch();
break;
}
}
}
}
Mas o menos lo quiero adaptar a esto, es como la simulacion de un submarino, pero muy muy pobremente, espero alguien me pueda apoyar un poco
Código:
#include<stdio.h>
#include<conio.h>
void main()
{
int x,motor=0,potencia=0,angulo=0;
while(x!=5)
{
printf("\n*****************************************************************************");
printf("\n*****************************************************************************");
printf("\n**** ****");
printf("\n**** SIMULADOR DE CONTROL DE SUBMARINO ****");
printf("\n**** ****");
printf("\n*****************************************************************************");
printf("\n*****************************************************************************\n");
printf("\n¿Qué acción desea realizar?\n\n");
printf("1.-Ajustar potencia del motor\n");
printf("2.-Ajustar ángulo de inclinacion\n");
if(motor==0)
printf("3.-Encender motor\n");
else
printf("3.-Apagar motor\n");
printf("4.-Mostrar panel de estado\n");
printf("5.-Salir del programa\n");
scanf("%d",&x);
switch(x)
{
case 1:
printf("La pontencia del motor se encuentra al %d%\n",potencia);
printf("Asigne la potencia del motor:");
scanf("%d",&potencia);
printf("Presiones cualquier tecla para regresar al panel de control\n");
getch();
break;
case 2:
printf("El ángulo del submarino es de %dº\n",angulo);
printf("Asigne el ángulo de inclinación:");
scanf("%d",&angulo);
while(angulo<-35||angulo>35)
{
printf("El ángulo de inclinación no puede ser menor a -35º ni mayor a 35\n");
printf("Asigne el ángulo de inclinación\n");
scanf("%d",&angulo);
}
printf("Presiones cualquier tecla para regresar al panel de control\n");
getch();
break;
case 3:
if(motor==0)
{
motor=1;
printf("Motor encendido");
}
else
{
motor=0;
printf("Motor apagado");
}
printf("Presiones cualquier tecla para regresar al panel de control\n");
getch();
break;
case 4:
printf("\n********************************************************************");
printf("\n********************************************************************");
printf("\n**** ****");
printf("\n**** PANEL DE CONTROL ****");
printf("\n**** ****");
printf("\n********************************************************************");
printf("\n********************************************************************");
printf("\nPresione cualquier tecla para regresar al panel de control");
getch();
break;
}
}
}