# Puerto Paralelo[Problema con inp32]



## 14matias13 (Jun 30, 2011)

Hola

Estoy utilizando el compilador Dev-C++ y la libreria inpout32.dll que va en system32, la cual me "habilita" el puerto para que lo pueda usar.

Lo que sucede es que tengo un problema con la funcion "inp32", cuando compilo el programa de abajo, me sale un error, que dice "too many arguments to function" la funcion a la que se refiere es a inp32 y no se cual pueda ser la causa del problema. Agradeceria cualquier ayuda. 

Dejo el codigo. Gracias.-



> #include "stdio.h"
> #include "dos.h"
> #include "conio.h"
> #include "iostream"
> ...


----------



## Unikfriend (Jun 30, 2011)

Hi matías,
Segun rcuerdo este comando no se usa así,

inp32(0x379,0);

debe ser

Var = inp32(0x379);


----------



## 14matias13 (Jun 30, 2011)

Hola Unikfriend.

Ya veo, lo probe y funciono de esa forma, pero suponete que tengo 8 leds a la salida del puerto paralelo y un pulsador, como hago con ese pulsador encender el led 5 por ejemplo?, yo decia de poner inp32(direccion,dato), igual que oup32, el dato seria un numero decimal X para el led numero 5, pero no me deja, como seria?.

Gracias de nuevo.


----------



## Unikfriend (Jun 30, 2011)

14matias13 dijo:


> Hola Unikfriend.
> 
> Ya veo, lo probe y funciono de esa forma, pero suponete que tengo 8 leds a la salida del puerto paralelo y un pulsador, como hago con ese pulsador encender el led 5 por ejemplo?, yo decia de poner inp32(direccion,dato), igual que oup32, el dato seria un numero decimal X para el led numero 5, pero no me deja, como seria?.
> 
> Gracias de nuevo.


 

led 5 sería  

oup32(0x379,0x10);

donde esta conectado el pulsador?


----------



## 14matias13 (Jun 30, 2011)

Claro eso si lo se, suponete que tengo 1 led y tengo un pulsador antes del led, usando la funcion inp32, cuando pulso, ingreso por el puerto la entrada que le dice al led cuando prenderse. Espero no haberte mareado XD


----------



## Unikfriend (Jun 30, 2011)

14matias13 dijo:


> Claro eso si lo se, suponete que tengo 1 led y tengo un pulsador antes del led, usando la funcion inp32, cuando pulso, ingreso por el puerto la entrada que le dice al led cuando prenderse. Espero no haberte mareado XD


 

No te entiendo muy bien.
EL pulsador debe estar conectado en uno de los pines de status 10,11,12,13 o 15,
cual estas utilizando? voy a suponer que esta conectado al pin15 (status-3) y el led en pin6 (data 4), debería ser algo así.

while(1) 
{
Var = inp32(0x379);                        
if(Var & 0x08)oup32(0x378, 0x10);
else oup32(0x378, 0x00);
}


----------



## 14matias13 (Jul 6, 2011)

Hola de nuevo Unikfriend. Perdon por el retraso.

Ya solucioné el problema que tenia, lo que hice fue guardar el valor de inp32 en una variable cuando el pulsador estaba sin actuar, y luego lo hacia nuevamente con el pulsador accionado e imprimia la variable para saber que numero era, como me dijiste. 

Gracias por tu ayuda. Saludos


----------



## Unikfriend (Jul 6, 2011)

hi Matias,
que bien que te funciono.
Y cual es la funcion de los LEDs?


----------



## 14matias13 (Jul 6, 2011)

Hola.

La funcion por el momento era prender un led cuando el pulsador estaba actuando , a modo de comprender el funcionamiento del pulsador en el puerto.


Saludos.


----------



## Unikfriend (Jul 6, 2011)

Hola de nuevo Matias,
No generes un tema nuevo si ya existe uno parecido.
por eso te preguntaba cual era el proposito de los leds, 
me imaginaba que no terminaba ahi.

Debes tener algo mal en tu compilador o codigo por que la funcion Sleep 
acepta paramentros sin problemas.
[/COLOR] 


long SleepTime = 3000;
Sleep(SleepTime);


----------



## 14matias13 (Jul 6, 2011)

Hola Unikfriend, perdon por crear el tema, no sabia.

Ahora si, lo que me faltaba ami era ese "long", pero para que sirve? Muchas gracias por la ayuda me salvaste.


----------



## Unikfriend (Jul 6, 2011)

La etiqueta long define una variable como de 32 bits,
que es el tipo de argumento aceptado por el comando Sleep.

Necesitas leer un tutorial de Ansi C, 
eso te puede ayudar mucho.


----------



## 14matias13 (Jul 6, 2011)

Ah claro, me tendré que leer algun tutorial por ahi .

Muchas gracias por la ayuda Unikfriend y si se me presenta otra duda la posteo aqui.

Saludos.


----------



## 14matias13 (Jul 10, 2011)

Hola de nuevo.

Terminando con lo del puerto, comenzé un proyecto de un Ascensor de 5 Pisos para la facultad, para el cual utilizo el PIC 16F877A, y tengo entendido que la programacion del mismo se hace con la creacion de módulos.

Queria saber si existe algun tutorial completo de creacion de modulos en C, ya que no encontre ninguno en el foro y en internet hay 2 o 3 pero incompletos y que no entiendo muy bien.

Desde ya y nuevamente, gracias Unikfriend. Saludos y espero tu respuesta.


----------



## Unikfriend (Jul 11, 2011)

hi matias...
Puedes describir como funciona el proyecto del ascensor,
como se realaciona en programa del puerto con el PIC?


----------



## 14matias13 (Jul 11, 2011)

Hola Unikifriend.

Con respecto a la funcionalidad del ascensor te puedo decir que consta de 5 pulsadores de llamada que le permite al usuario decidir a qué piso acceder y uno para parada de emergencia, tiene una pantalla de cristal liquido (LCD) donde se muestra el piso actual, el destino, la dirección de la cabina (hacia arriba o hacia abajo) y el resto de procedimientos que realice el microcontrolador en cualquier momento, 5 sensores ubicados en cada piso (reed switch), que indicaran el piso actual en el que se encuentra la cabina.

Con respecto a la cabina, voy a utilizar una Lectora de DVD, la cuál contiene una puerta automática con un sensor que indicará si la puerta ha quedado abierta, en ese caso emitirá una señal de alarma, además, en su interior constará de un sensor de peso (yo tengo en mente utilizar un Flex) que también emitirá una señal al igual que el sensor de puerta abierta, en caso de que se supere un peso determinado dentro de la misma.

Para la movilización de la cabina, voy a usar un motor Paso a Paso de C.C de 2 velocidades (una de traslado y otra cuando se acerque al piso al cuál va dirigido).

Con respecto a la relacion del programa del puerto con el microcontrolador no sabría responderte con exactitud porque aún no entiendo mucho de PIC y su programación. He estado viendo algunos PDF sobre micros, y tengo una pequeña base que me podría servir para empesar creo yo, lo que tengo pensado primeramente es crear los diagramas de flujo para el ascensor completo y para cada uno de los módulos, pero necesito ayuda  . Me estoy guiando con información extraída de internet, al final adjunto el PDF.

Si deseas, nos podemos comunicar vía msn de forma más directa, me decis y te dejo mi dirección de mail por mensaje privado.

Saludos y gracias nuevamente.

Nota: subo el archivo PDF a mediafire ya que pesa 12mb y lo maximo que acepta el foro son 2mb

Link


----------



## Unikfriend (Jul 11, 2011)

14matias13 dijo:


> Con respecto a la relacion del programa del puerto con el microcontrolador no sabría responderte con exactitud porque aún no entiendo mucho de PIC y su programación.


 
Pense que era el mismo proyecto el ascensor que el de puerto paralelo, ya veo que no.
Pues veo que tienes practicamente todo, tienes el codigo tambien?


----------



## 14matias13 (Jul 11, 2011)

El codigo lo quiero hacer yo, con los diagramas de flujo no tendria mucho problema, pero, lo unico que no tengo bien claro es eso de los módulos y tengo una base muy pobre de lo que es programación de PIC y control de motores PAP, por puerto paralelo.


----------



## Unikfriend (Jul 11, 2011)

Pero si has trabajado con microchip?

Pues la progamacion en modulos basicamente trata de que el programa 
sea mas sencillo de verificar y modificar. Lo mejor es que cada archivo,
de tu proyecto corresponda con un componente que realice una acción 
especifica. En un programa tan pequeño no tan indispensable.


----------



## 14matias13 (Jul 11, 2011)

Claro.


No, nunca programé ni tampoco trabajé con PIC. Me podrías dar algún ejemplo de un módulo codificado y como sería su llamada e implementación en un programa?

Gracias.


----------



## Unikfriend (Jul 11, 2011)

14matias13 dijo:


> Claro.
> 
> 
> No, nunca programé ni tampoco trabajé con PIC. Me podrías dar algún ejemplo de un módulo codificado y como sería su llamada e implementación en un programa?
> ...


 
Ejemplo tan especifico como de un ascensor no tengo;
y los que tengo no creo que te vayan a servir.

Ya tienes las herramientas de Microchip y tu board?


----------



## 14matias13 (Jul 11, 2011)

Ah, yo decia un ejemplo de cualquier programa, no tiene que ser especificamente del ascensor, a modo de entender como es que se codifica, y demás.

Las herramientas y la board del PIC que sería?


----------



## Unikfriend (Jul 12, 2011)

14matias13 dijo:


> Las herramientas y la board del PIC que sería?


 
Pues con que vas a programar el PIC 16F877A y donde lo vas a probar?

Se me hace que andas un algo perdido.


----------



## 14matias13 (Jul 12, 2011)

Ah, pense que te referías a otra cosa.

El programa que voy a utilizar es el PIC-C Compiler y para probarlo lo voy a simular en el Proteus.


----------



## 14matias13 (Jul 13, 2011)

Hola de nuevo.

Estube confeccionando los primeros diagramas de flujo, quieres que los suba para que los veas y me digas como voy?

Gracias.-


----------



## Unikfriend (Jul 13, 2011)

14matias13 dijo:


> Hola de nuevo.
> 
> Estube confeccionando los primeros diagramas de flujo, quieres que los suba para que los veas y me digas como voy?
> 
> Gracias.-


 
Ok subelos, el esquematico supongo que vas a usar el mismo de la nota de aplciación.


----------



## 14matias13 (Jul 13, 2011)

Bueno, son 3 diagramas de flujo nomás hasta el momento: Mover Cabina desde planta baja, Mover Cabina y Control de Puerta Abierta. 

Los que mas o menos voy viendo que me faltan son: Control de Piso Actual (para la prioridad de piso), Cerrar / Abrir Puerta (tengo que usar el motorcito que trae la lectora), Display LCD (que nose bien como hacerlo), Giro del Motor y Llamada a Piso.

Con respecto al esquematico si, seguramente uso el que ya tengo.

Bueno, si ves algun error y/o sugerencia decime. Gracias.


----------



## Unikfriend (Jul 13, 2011)

Hi Matias,

Creo que el proceso de solicitar el destino esta mal colocado,
parece que se esta ejecutando tres veces consecutivas sin que se realice ninguna
otra acción.

Inicio-> Destino->Destino(Mover)-> Destino(Control Puerta)

El destino no puede ser un valor de un unico piso, si no mas bien es una ruta.
que se esta modificando a medida que el ascensor se detiene en cada piso.
Necesitas trabajar en el proceso de capturar el destino.

Estas haciendo este proyecto tu solo?

Por otro lado si el proyecto ya nada tiene que ver con el puerto paralelo,
continuemos en otro tema, para no confudir a los demas foristas y puedas tener 
mas sugerencias. Si quieres continuamos en este que parece el mas reciente.

https://www.forosdeelectronica.com/f25/ascensor-compuertas-logicas-13164/


----------



## 14matias13 (Jul 13, 2011)

Entiendo, si al proyecto lo estoy haciendo solo, pero tiene que ser todo por el puerto paralelo. 

Los demás diagramas estan bien?

El de compuertas logicas no me sirve porque tengo que utilizar si o si un PIC.


----------



## Unikfriend (Jul 13, 2011)

14matias13 dijo:


> Entiendo, si al proyecto lo estoy haciendo solo, pero tiene que ser todo por el puerto paralelo.


 
No entiendo, donde va a estar el programa en el PIC o en la PC?


----------



## 14matias13 (Jul 13, 2011)

En el PIC, pero todo conectado a la PC


----------



## Unikfriend (Jul 13, 2011)

14matias13 dijo:


> En el PIC, pero todo conectado a la PC


 
Pero para que esta conectada? 
Que se va transmitir?


----------



## miguelia (May 5, 2012)

Unikfriend dijo:


> Pero para que esta conectada?
> Que se va transmitir?



me pueden ayudar 
?
hola unikfriend
  lo que quiero es solo que me digas como puedo introducirle al puerto datos para que interactue conmigo no lo he logrado pero sin embargo en enviar datos ya lo logre me puedes explicar mediante un ejemplo, por favor
mira 
mediante esta tabla
quiero que el programa me haga diferentes opciones
0001 funcion 1
 0011 funcion 2
0111funcion 3
1111funcion4

es decir no quiero que me hagas el codigo solo encaminame si puedes


*el no saber me mata¡¡¡¡¡¡¡¡¡*


----------



## miguelia (May 6, 2012)

#include <stdio.h>
#include <dos.h>
#include <conio.h>
#include <iostream.h>
#include <windows.h>


typedef short _stdcall (*inpfuncPtr)(short portaddr); 
typedef void _stdcall (*oupfuncPtr)(short portaddr, short datum); 

int main(int)
{
HINSTANCE hLib;
inpfuncPtr inp32;
oupfuncPtr oup32;

hLib = LoadLibrary("inpout32.dll");
if (hLib == NULL) 
{
printf("LoadLibrary Failed.\n");
return -1;
}

inp32 = (inpfuncPtr) GetProcAddress(hLib, "Inp32");
if (inp32 == NULL) 
{
printf("GetProcAddress for Inp32 Failed.\n");
return -1;
}

oup32 = (oupfuncPtr) GetProcAddress(hLib, "Out32");
if (oup32 == NULL) 
{
printf("GetProcAddress for Oup32 Failed.\n");
return -1;
}

int entrada;
entrada = inp32(0x379); 
cout<<"hola"<<entrada;
//el problema es que entra el numero 255 siempre como puedo limpiar mi puerto de entrada para que no lea datos basura
if(entrada == 0x01)
printf("tu estado es de 100ml");
else if(entrada == 0x02)
printf("tu estado es de 200ml");
else if(entrada == 0x00)
printf("tu estado es de 000ml");
else
printf("tu estado es de 1000ml");


----------

