# Labview y Puerto paralelo



## albella (Mar 5, 2014)

Hola, amigos. Estoy tratando de diseñar con LABVIEW un comprobador de unos bloques electrónicos a través del puerto paralelo. Aunque he estudiado alguna literatura sobre el tema, me queda la duda de si puedo conectar las salidas del puerto paralelo a sus entradas, para comprobar que las señales que quiero transmitir por el puerto, las pueda leer correctamente.

Gracias


----------



## Jessy (Mar 5, 2014)

No se si es eso lo que buscas, igual puedes conectar un USB al puerto paralelo para controlarlo mejor y mas rapido. Deberia funcionar de ambos lados solo encuentra los puertos que necesitas para entrada.


----------



## TRILO-BYTE (Mar 5, 2014)

el puerto paralelo es muy facil de usar USB no es nada facil quien dice que USB es de chavitos la boca se le hara chicharron


----------



## Jessy (Mar 5, 2014)

Te dire que no todas las computadoras o laptops actualmente tienen puerto paralelo...


----------



## albella (Mar 5, 2014)

Gracias Jessy. Releyendo mi propio post me dí cuenta de que no me expliqué bien. Es un bloque al que le estoy tratando de hacer un comprobador con Labview. Pero para simular la señal que debo enviar hacia afuera, primero deseo verla de retorno. Por eso preguntaba si es factible cablear los pines de salida de LPT1 con sus pines de entrada, para recibir y comprobar que lo que está saliendo está correcto.

Me parece que no será fácil lograr lo que quiero. Este bloque se comunica con otro a través de microprocesadores, con una secuencia de 1nos y ceros definida. Quiero sustituir uno de estos bloques. Esto me crea la duda del sincronismo que debo lograr con el comprobador para que funcione, pero al menos, lo intento.


----------



## TRILO-BYTE (Mar 5, 2014)

mira nada es imposible los limites se los pone uno mismo
ahora eso de comprobar la salida del puerto con que lo compruebes tu con unos leds y sale bien no tendrias por que hacerlo todo el tiempo

mi experiencia me dice que es muy dificil quemar el puerto paralelo , hacer cortos o ponerlo alrevez "metiendole un voltaje alto eso si lo quemaria"
y los datos que salen de el son muy estables

a diferencia de los datos del puerto serie que es suceptible al ruido 

y el USB para los que reclamen la velocidad es muy alta que hay que hacer redundancias para comprobar el estado de los datos

Resumen:

comprueba 1 vez fisicamente lo que sale del puerto , si todo es correcto no habria el por que de datos fallidos.

protege el puerto de posibles cortos 

lo que sale puede ser leido aunque no sea necesario

labview es bastante facil de usar pero carece de la facilidad de C++


----------



## albella (Mar 6, 2014)

Gracias Trilo, me das ánimo. Gracias a todos los que me están respondiendo.

Tengo por ahí un esquema con unos led y unas R de 1K que voy a montarlo. Lo que pregunté quizá sea un poco absurdo. En el puerto serie se puede hacer un puente entre el pin de transmisión y el Rx, pero no sé si eso se puede hacer en el paralelo. Realmente no creo que pueda usar el puerto serie (que es el que más convendría) porque me parece que tiene velocidades fijas. 

El tren de pulsos que debo enviar al bloque y el que debo recibir de su micro es una secuencia serie de unos y ceros, donde el impulso elemental tiene una duración de 50 microseg. Por eso creo que no podré poner por el puerto serie un baudrate adecuado.


----------



## TRILO-BYTE (Mar 6, 2014)

pues piensa mejor que quieres hacer y te ayudo aca tengo programas de labview para serie y el paralelo


----------



## albella (Mar 11, 2014)

Hola, trilo y demás amigos.
Sigo masticando esto del puerto paralelo. Tengo un bloque A y un bloque B que se enlazan entre sí por medio de sus microprocesadores, enviándose una secuencia de unos y ceros que ya conozco. Quiero ver en la computadora la secuencia del bloque A en la máquina.

Tengo un cable con su toma para conectarla al puerto paralelo y tratar de leer en la máquina esos bytes. Pregunto: ¿Puedo conectar este cable a la salida del bloque por donde salen esos pulsos y entregárselos al puerto o debo poner resistencias de protección?.


----------



## TRILO-BYTE (Mar 11, 2014)

no entendi tu analogia pero hacer eso seria pues si podrias ponerlo directo

pero hay un problema la computadora o lee o escribe pero no ambas en el puerto
asi que no leerias nada
para eso deberias dejar prendido lo que envias con el puerto

pero como digo no tiene caso

basta con poner a la salida unos leds y si ves que sale bien lo que envias ya no lo tienes que hacer todo el tiempo

por ejemplo pones el icono del puerto y le metes un valor de 0 a 255 
puede haber error por a muchos se nos olvida el signed y el unsigned

como -127 a 127 ese es el caso con signo
y 0 a 255 cuando se tratan de variables sin signo

el labview tiene sus variables UINT o UCHAR

lo digo por que ya me paso 

conectar computadora A  con la computadora B pues la conexion si puede ser directa

ahora para leer y escribir en el bios el puerto configuralo como EPP por que si no lo haces solamente escribe 8 bits pero no los podras leer


----------



## albella (Mar 12, 2014)

Eso de que no entiendes mi analogía se debe a que siempre he tenido problemas en comunicarme con los humanos.
Lo que me dices sobre que el puerto paralelo lee o escribe, pero no ambas cosas, es un problema para esto que estoy haciendo, pero más alante dices que debo mantener constante la señal que envío por el puerto. Esto último es posible, porque los micros se mantienen enviándose la misma señal hasta que esta cambia. El bloque A, que es el que quiero sustituir, es un teclado sencillo. Más sencillo que el de un control remoto. Mientras no pulse una tecla, la secuencia no cambia. El rollo se me forma porque las comunicaciones son serie, no paralelo, pero como te decía, por el puerto serie no sabría poner un baudrate correcto.
¿es posible enviar una secuencia diferente por cada uno de los pines del puerto paralelo?. Es decir, enviar por el pin 2 la secuencia 1101010 y por el pin 3 la secuencia 1010100 a la vez.
Otra pregunta: He leído que "el registro de datos puede ser configurado como entrada o salida, poniendo el bit 5 del registro de control en 0 para salida o en 1 para entrada". ¿Cuál es la pata del bit 5?


----------



## albella (Mar 12, 2014)

Parece que esto estámás allá de mis neuronas. Quiero escribir por el puerto paralelo una secuencia de unos y ceros. Tomé el vi llamado out port, le puse en Address el valor 379 en hex y por write value le puse un control binario donde escribo una secuencia de unos y ceros.

Tengo un cable de puerto paralelo conectado y en la otra punta conecté un osciloscopio de dos canales. Un canal lo conecté a la pata 2 del puerto y el otro canal a la pata 8 del paralelo... 

Por mucho que cambie la secuencia de unos y ceros... No observo nada en el osciloscopio. ¿Qué estoy haciendo mal?


----------



## Saint_ (Mar 12, 2014)

hola albella, por lo que comentas parece que "por algún extraño motivo" no funciona el puerto paralelo.
Tomando en cuenta que el registro de datos del puerto paralelo (LPT1) se encuentra en la dirección 0x378 y es este registro el que se ocupa de "sacar" los datos por el puerto, puedo afirmarte que:

Estas escribiendo sabre el registro de estado (0x379), este registro es solo de lectura por lo cual es lógico que "no puedas ver nada" en el osciloscopio.

Te propongo que hagas el siguiente experimento.
1) As el cambio de dirección a 0x378
2) traduce al lenguaje de labview el siguiente código

```
while(1)
{
     out=255;
     retardo_de_50us();
     out=0;
     retardo_de_50us();
}
```
Esto debería dar  como resultado una onda cuadrada de semiperíodo igual a 50us en cualquiera de los bits del registro de datos (pin 2 al 9) del conector db25, esto servira para determinar si labview es capas de sincronizarse, ten en cuenta que aunque labview es un software que trabaja en tiempo real, sigue estando bajo la supervisión del sistema operativo y es este el que decide en que momentos entregarle el control a labview.

PD. No te olvides de la tierra común ente el puerto paralelo y el osciloscopio.


----------



## albella (Mar 12, 2014)

Gracias, Saint. Lo que hice fué poner un while loop y dentro metí un par de flat sequences, una con la dir 888 (378h) y un valor de 255 y la otra secuencia con la misma dir y como dato, un cero.

Lo seguí en el esquema en bloques con el bombillito conectado, para poder ver el funcionamiento y aparentemente funcionó, pero no me dió nada en el osciloscopio. El retardo que le dí en ambas secuencias es de 1 ms, porque no me aceptaba 0.05, (para indicarle los 50 microseg.). Tengo el puerto paralelo en modo EPP.


----------



## TRILO-BYTE (Mar 12, 2014)

ve a panel de control /dispositivos /puerto com lpt /y en lpt le das en propiedades
y busca que direccion tiene el puerto de salida y el de entrada

hay veces que el puerto tiene una direccion a la 0x378 ¿por que no se?
pero me han tocado maquinas con 0x288

bueno revisa eso y checa que direccion tiene el puerto

no es de adivinar en donde esta


----------



## albella (Mar 12, 2014)

Sí, ya lo había hecho. Está desde 0378 hasta 037F

Sí, ya lo había hecho. Está desde 0378 hasta 037F



En un documento que tengo dice que: "Primero configuramos el puerto para escribir, para lo que necesitamos escribir en el control (890 dec) un 0 en el bit #1 (por ejemplo 0 dec)." 

Esto no lo he hecho


----------



## Saint_ (Mar 12, 2014)

albella, si hiciste la depuración del programa paso a paso y la secuencia 255-000 se refleja en los leds, entonces esta bien, también puedes probar con un retardo de 1, segundo o algo parecido, así podrás ver el estado de los leds sin problemas (asumiendo que pusiste leds con su respectiva resistencia para monitorear el LPT).
si los dos casos anteriores funcionan, solo podrá ser un desperfecto en el osciloscopio, sondas de prueba del osciloscopio en mal estado o algo parecido.


----------



## TRILO-BYTE (Mar 12, 2014)

¿que vercion de labview tienes?



bueno no se que tanto sepas de labview y que vercion tengas pero tengo aca un programa que use para mover un monocromador

es en vercion labview 9.0 espero que no tengas problemas 

Ver el archivo adjunto Mono cromador.zip


----------



## albella (Mar 13, 2014)

Amigos, les agradezco sus respuestas. realmente soy un principiante en el labview, He ido avanzando casi a ciegas. Ahora, con la ayuda de ustedes me siento más alentado.

No he hecho lo de los led, sino que lo hice con el osciloscopio como les había explicado. Pero hay algo mal, que no son las puntas del equipo. Quizá el puerto paralelo no está funcionando. Nunca lo había usado en esta máquina con la que estoy trabajando. Pero no tengo conflictos en el administrador de dispositivos.
Este puerto no me da salida ni siquiera con los ejemplos que salen en el Labview.

Otra pregunta: ¿Qué es un monocromador?. Ya lo descargué y no

Amigos, les agradezco sus respuestas. realmente soy un principiante en el labview, He ido avanzando casi a ciegas. Ahora, con la ayuda de ustedes me siento más alentado.

No he hecho lo de los led, sino que lo hice con el osciloscopio como les había explicado. Pero hay algo mal, que no son las puntas del equipo. Quizá el puerto paralelo no está funcionando. Nunca lo había usado en esta máquina con la que estoy trabajando. Pero no tengo conflictos en el administrador de dispositivos.
Este puerto no me da salida ni siquiera con los ejemplos que salen en el Labview.

Otra pregunta: ¿Qué es un monocromador?.



Heyyy!!!. Por alguna razón desconocida, cuando arranqué el programita que estábamos cosntruyendo ayer... FUNCIONÓ!!!. Me da una secuencia de 1 y 0 por las dos patas donde tendo conectado el osciloscopio!!!


----------



## Saint_ (Mar 13, 2014)

albella, para salir de dudas sobre el estado del puerto paalelo usa este programa, sirve para monitorear el estado del puerto.


----------



## TRILO-BYTE (Mar 13, 2014)

un monocromador jaja
bueno yo hise esa interfaz sin saber lo que era

un monocromador es una maquina que descompone la luz en colores como 1 prisma 
pero este aparato te da la longitud de onda deseada

ejemplo quiero 452.23 nm en luz "que es azul"
¿para que es?
bueno es para hacer incidir luz especifica en un material

¿en que lo usan?
para hacer diodos semiconductores con silicio

¿como funciona?

con un vulgar motor a pasos

¿que hace ese programa que mande?
mueve un motor a paso 

facil

labview no es nada dificil de usar , ami no me gusta prefiero el visual C
pero cada quien se acomoda con lo que puede

saludos


----------



## albella (Mar 18, 2014)

Interesante explicación sobre el monocromador.
Por otro lado, parece que he llegado a un límite de velocidad de labview. Resulta que he podido enviar por el primer pin del puerto paralelo una secuencia cíclica de unos y ceros, variando la duración de los pulsos elementales. Como si fuera un puerto serie. Pero cuando disminuyo el tiempo de duración por debajo de los 500 microsegundos, el tren de pulsos de desbarata. Lo he probado con un lazo FOR con un CASE, una secuencia flat, una secuancia stacked... pero siempre me da el mismo resultado. Nada por debajo de los 500 microsegundos como duración del impulso elemental.
Pasé a probar el puerto serie, pero parece que no tengo bien instalado el labview, porque me da un error y me dice que debe ser porque faltan los driver para trabajar con esos VI del puerto serie...

¿Qué creen?. ¿Qué estoy haciendo mal?


----------



## Saint_ (Mar 19, 2014)

Ese problema tambien lo tuve cuando quise trabajar con el puerto serie en labview, para que trabaje el puerto serie tuve que buscar  y descargar el archivo que faltaba, ahora no recuerdo el nombre del archivo, pero si era algo grande como para subirlo, asi que no te queda mas que buscarlo por la red.

Por otro lado dudo mucho que con el puerto serie puedas solucionar el problema, ten en cuenta que labview sigue sometido sistema operativo por lo cual labview trabaja solo cuando el sistema operativo "le da tiempito".
Me párese mas pertinente que labview haga de control y que un microcontrolador sea el que genere la secuencia de unos y ceros para el sistema con el que se quiere interfazar.


----------



## TRILO-BYTE (Mar 19, 2014)

bueno dejen que cuente mi experiencia.

el labview no tiene la plasticidad del C++ y ami igualmente me dio dolores de cabeza por que en C la salida del puerto paralelo era exactamente de 1ms y en el labview por mas optimizado el código me salia alrededor de 3.4 mili segundos "según era 1 mili segundo" eso lo comprobé haciendo muchos barridos.

y como dices la secuencia aveces se llegaba a destripar si lo hacia muy rápido.

no se si fracase o me di por vencido pero termine usando C++, por lo exacto que era , bueno eso fue lo que hice .

pero si a ti se te facilita el Labview es mas bien cuestion de optimizar el codigo.

en el icono de foco puedes ver paso a paso como se mueve el codigo en labview y ver que es lo que esta fallando, hacer muchas funciones dentro de un ciclo hace que truene el programa y se desbarate.


----------



## albella (Mar 19, 2014)

Gracias por responder, Saint. Estoy de acuerdo contigo en que tendré que poner un micro como interfase. Es que estaba tratando de evitar eso para que fuera más sencillo, pero parece que aquí la solución no es el camino más sencillo.

Estaba viendo también que al usar el puerto paralelo como si fuera un serie, usando un solo pin para enviar el tren de pulsos, estos no salen con la duración que le indico, sino con mucha más. 

Me tengo que complicar con el micro, como me dices. Por lo tanto, tendré que seguirles pidiendo ayuda para avanzar.

Gracias nuevamente a todos.



Trilo, para probar, lo hice lo más sencillo posible. Un lazo stacked donde el primer cuadro envía un 1 y el otro cuadro envía un cero. Puse el reloj pulsera (porque mide en miliseg) dentro del cuadro y el VI "out port" también dentro. Saqué el control del tiempo fuera del lazo para que sirviera para ambos cuadros y empecé a bajar el tiempo de espera. después de 0,5 ya se destruye el tren de pulsos.

Usé el stacked, el lazo for, el case, Flat... me da el mismo resultado.


----------



## Saint_ (Mar 19, 2014)

cuando dices que se destruye el tren de pulsos,  te refieres a que el programa tarda mas de 0.5 ms en hacer que el puerto cambie de estado (0->1) o que la señal que se ve en el osciloscopio en vez de aparecer cuadrada aparece deformada pero conserva el semi-periodo de 0.5ms.
si es el primer caso, es problema del programa.
Si es el segundo, el problema el harware del puerto paralelo.

que tal si subes una imagen de la forma de onda que tienes en el osciloscopio, quizá se pueda "matufiar" algo.


----------



## albella (Mar 19, 2014)

Ambas cosas suceden. Mientras estoy por encima de 0,5, se ve perfectamente el pulso y la pausa, pero duran más de o,5 cada uno (no cambia de estado en 0,5 ms). Cuando bajo a 0,49 ms, lo que se ve en el osciloscopio es un reguero de puntos que no tienen una secuencia adecuada. Ni se parece a lo que veo en 0,5. Este reguero parece que es que le pido demasiado a ese pin del paralelo. Aunque lo puse en modo ECP, que según la literatura, puede accionar a más de 1 Mhz de trasnferencia. Claro, esta velocidad seguro que es cuando envía en paralelo el byte.


----------



## Saint_ (Mar 19, 2014)

bien, pues aparentemente no queda de otra mas que usar un microcontrolador.
debido a que el micro controlador es capas de solucionar el problema, habría que pensar si todavía es necesario el uso de la PC tomando en cuenta que en el micro controlador de puede implementar un teclado y un LCD para el control visualización de alguna información, bueno eso lo decides tú.

empecemos por el micro controlador, ¿que micro controlador conoces, manejas, puedes conseguir?.
que compilador o ensamblador tienes para el micro controlador.

esto asumiendo que tienes, puedes conseguir el grabador para el micro controlador.


----------



## albella (Mar 20, 2014)

Como microprocesadores tengo el AT89C51, encapsulado cuadrado, el AT 89C52, encapsulado rectangular y hasta un D8085AH, recuperado de placas ya viejitas.

El asunto más grave es que nunca he tenido que programar micros, porque siempre me dediqué a baja integración y circuitería analógica. Pero bueno, esto es un nuevo reto, que siempre es interesante para mí. Los viejos necesitamos siempre tener algo interesante que hacer al levantarnos en la mañana, porque si no, caemos en estado depresivo. jejeje...


----------



## Saint_ (Mar 20, 2014)

... Casi asegure que responderías que contabas con un pic o avr, pero lo del AT 89c51/AT89c52 por fortuna no me sorprende "aunque hacer raaaaaaato que no lo programo", con el 8085 ni nos metemos pues a este microprocesador aparte de programarlo hay que hacerle el mapeo de memoria, aumentarle periféricos, memorias, etc.
Preguntas.
¿Cuentas con el grabador para este micro controlador (AT89C51/52)?
¿Programaste algunas ves en asm o en C?
  Luego veremos el mejor modo de solucionar el problema.


----------



## albella (Mar 20, 2014)

No tengo el programador, pero puedo conseguirlo. Si hago algunas gestiones, puedo conseguir un pic y que me lo programen, pero eso es más engorroso. No he programado micros, pero sí conozco gente que lo han hecho y puedo contar con ellos.

Una pregunta: ¿Y si... utilizo un multiplexor en vez de un microprocesador?. Todavía no tengo idea de cómo será el diseño. Lo que controlaría mediante la PC es los relojes del multiplexor para dar la salida de cada canal que me convenga para conformar el byte que necesito en cada momento.
Lo que he querido hacer con LABView es el instrumento de control del funcionamiento del bloque, para después de reparado saber si hace todas las funciones para lo que está previsto. También, cuando lo traen al taller, hacerle una revisión y conocer cuál es el defecto en su funcionamiento. Todo esto con el bloque cerrado, sin abrirlo.


----------



## Saint_ (Mar 20, 2014)

Un multilexor no creo que sea buena solucion, un MUX, entrega "señal" en una sola de sus salidas en un instante d tiempo, para entegar mas de una salida en un mismo instane te de tiempo aparte del mux se nesesiatria un latch, pero sigue siendo poco practico para el caso ya que el que controle al mux y al latch tendria que tener una frecuncia de trabajo mayor "para este caso, los pulsos de contros tendrian que ser nemores de 0.5ms", pero como tu puerto paralelo no responde correctamente a esos tiempos entonces no se podria.
te aseguro que con un micro controlador seria mas facil, por ejemplo:

labview tendria el interface Humano maquina (botones, swtche, leds,etc), mediante puerto serie labview le mada ordenes al micro controlador para que este haga una secuencia  u ortra, "dentro" del microcontrolador estarian las secuencias y las generaria continuamente hasta que le llege al orden de cambiarlas, detenerse , etc.

con respecto al AT 89C52/51 es suficiente pero no existe mucha documentacion, tutoriales, etc., de modo que si mas adelante quieres profundisar los conocimeintos sobre progaracion de este micro controlador sera dificil, mientras que con los PICs y AVR tienes mas prestaciones y un mundo de tutoriales, ejemplos, grabadores,etc., por lo cual te recomiendo ahora o mas adelante "le metas mano a PICs o AVR".
Bien. ahora decide si trabajaras con  AT89c51/52 o PIC, "pues este tema ya lleva tiempito y hay que sanjarlo de una vez".


----------



## albella (Mar 20, 2014)

Muy interesante, amigo Saint. Te agradezco el tiempo que me has dedicado. A tí y a los demás especialistas que han participado. Valoraré con qué micro trabajaré, según tus recomendaciones. 

Gracias


----------

