[Electronica y programación] manejo del puerto paralelo...

Iniciado por BADBYTE-K, 27 Noviembre 2004, 11:11 AM

0 Miembros y 1 Visitante están viendo este tema.

dafsoftware

Cita de: gabimelgar en 20 Diciembre 2005, 03:48 AM
Hola, otra consultita:
Hay forma de usar la dll desde Macromedia Flash MX 2004?
Gracias de Nuevo
Sl2


claro que se puede usar en flash mx, conozco 2 formas:
-Hay un Software llamado mdm zinc, este permite añadir dll a flash
yo se donde conseguirlo completo, dafsoftware@hotmail.com
-en flash 8 pro  se hace en c y un procedimiento que no se hacer

luismv

saludos amigos, tengo un problema y estoy seguro que me pueden ayudar, resulta que tengo que hacer un proyecto donde tengo que manejar un software de musica como una especie de rockola por medio de un pulsador y este entra por el puerto paralelo, la pregunta es como le hago ?? he estado leyendo pero no he podido hacerlo, estoy intentando por medio de xp pero no he podido, lo que si estoy seguro que funciona es el pulsador ya todo esta bien conectado pero no logro que funcione, solo funciona si conecto el teclado asi si funciona el software pero por el puerto paralelo no jala, espero y me puedan ayudar, gracias...

renga73

Lo que quiero hacer en si es conectar un sensor ya sea de luz o de movimiento a la pc y hacer un programita que me avise con un mail por ejemplo si detecta alguna anomalia.
Utilizando el puerto serie y programarlo en visual basic.
Que elementos nesecito para lograr esto?

{_The_Alwar_}

pos el sensor y unos cuantos cables.... ah! y el conector al puerto del pc

renga73

Cita de: .··:::A·L·W·A·R:::··. en  9 Febrero 2006, 22:31 PM
pos el sensor y unos cuantos cables.... ah! y el conector al puerto del pc

Que tipo de sensor tengo q comprar?
El sensor ya viene con el cable para conectar al otro extremo por el puerto paralelo? O se nesecita algo de por medio?

nil_appserver

Hola mundo
El hardware del puerto paralelo

     El puerto paralelo de una típica PC utiliza un conector hembra de tipo D de 25 patitas (DB-25 S), éste es el caso más común, sin embargo es conveniente mencionar los tres tipos de conectores definidos por el estándar IEEE 1284, el primero, llamado 1284 tipo A es un conector hembra de 25 patitas de tipo D, es decir, el que mencionamos al principio. El orden de las patitas del conector es éste:
Vista del conector DB-25 hembra que utiliza el puerto paralelo

     El segundo conector se llama 1284 tipo B que es un conector de 36 patitas de tipo centronics y lo encontramos en la mayoría de las impresoras; el tercero se denomina 1284 tipo C, se trata de un conector similar al 1284 tipo B pero más pequeño, además se dice que tiene mejores propiedades eléctricas y mecánicas, éste conector es el recomendado para nuevos diseños. La siguiente tabla describe la función de cada patita del conector 1284 tipo A:
Patita    E/S    Polaridad activa    Descripción
1    Salida    0    Strobe
2 ~ 9    Salida    -    Líneas de datos
(bit 0/patita 2, bit 7/patita 9)
10    Entrada    0    Línea acknowledge
(activa cuando el sistema remoto toma datos)
11    Entrada    0    Línea busy
(si está activa, el sistema remoto no acepta datos)
12    Entrada    1    Línea Falta de papel
(si está activa, falta papel en la impresora)
13    Entrada    1    Línea Select
(si está activa, la impresora se ha seleccionado)
14    Salida    0    Línea Autofeed
(si está activa, la impresora inserta una nueva
línea por cada retorno de carro)
15    Entrada    0    Línea Error
(si está activa, hay un error en la impresora)
16    Salida    0    Línea Init
(Si se mantiene activa por al menos 50
micro-segundos, ésta señal
autoinicializa la impresora)
17    Salida    0    Línea Select input
(Cuando está inactiva, obliga a la
impresora a salir de línea)
18 ~ 25    -    -    Tierra eléctrica

Tabla 1: Configuración del puerto paralelo estándar

     Observe que el puerto paralelo tiene 12 líneas de salida (8 líneas de datos, strobe, autofeed, init, y select input) y 5 de entrada (acknowledge, busy, falta de papel, select y error). El estándar IEEE 1284 define cinco modos de operación:

   1. Modo compatible
   2. Modo nibble
   3. Modo byte
   4. Modo EPP, puerto paralelo ampliado
   5. Modo ECP, puerto de capacidad extendida

     El objetivo del estándar es diseñar nuevos dispositivos que sean totalmente compatibles con el puerto paralelo estándar (SPP) definido originalmente por la IBM (en éste artículo trataré solamente el modo compatible). Hay tres direcciones de E/S asociadas con un puerto paralelo de la PC, éstas direcciones pertenecen al registro de datos, el registro de estado y el registro de control. El registro de datos es un puerto de lectura-escritura de ocho bits. Leer el registro de datos (en la modalidad unidireccional) retorna el último valor escrito en el registro de datos. Los registros de control y estado proveen la interface a las otras líneas de E/S. La distribución de las diferentes señales para cada uno de los tres registros de un puerto paralelo esta dada en las siguientes tablas:
Dirección
   
Nombre
   
Lectura/Escritura
   
Bit #
   
Propiedades
Base + 0
   
Puerto de datos
   
Escritura
   
Bit 7
   
Dato 7
Bit 6
   
Dato 6
Bit 5
   
Dato 5
Bit 4
   
Dato 4
Bit 3
   
Dato 3
Bit 2
   
Dato 2
Bit 1
   
Dato 1
Bit 0
   
Dato 0

Tabla 2: Registro de datos
Dirección
   
Nombre
   
Lectura/Escritura
   
Bit #
   
Propiedades
Base + 1
   
Puerto de estado
   
Sólo Lectura
   
Bit 7
   
Busy
Bit 6
   
Acknowledge
Bit 5
   
Falta de papel
Bit 4
   
Select In
Bit 3
   
Error
Bit 2
   
IRQ (Not)
Bit 1
   
Reservado
Bit 0
   
Reservado

Tabla 3: Registro de estado
Dirección
   
Nombre
   
Lectura/Escritura
   
Bit #
   
Propiedades
Base + 2
   
Puerto de control
   
Lectura/Escritura
   
Bit 7
   
No usado
Bit 6
   
No usado
Bit 5
   
Permite puerto
bidireccional
Bit 4
   
Permite IRQ a
través de la
línea
acknowledge
Bit 3
   
Selecciona
impresora
Bit 2
   
Inicializa
impresora
Bit 1
   
Nueva línea
automática
Bit 0
   
Strobe

Tabla 4: Registro de control

     Una PC soporta hasta tres puertos paralelo separados, por tanto puede haber hasta tres juegos de registros en un sistema en un momento dado. Existen tres direcciones base para el puerto paralelo asociadas con tres posibles puertos paralelo: 0x3BCh, 0x378h y 0x278h, nos referimos a éstas como las direcciones base para el puerto LPT1, LPT2 y LPT3, respectivamente. El registro de datos se localiza siempre en la dirección base de un puerto paralelo, el registro de estado aparece en la dirección base + 1, y el registro de control aparece en la dirección base + 2. Por ejemplo, para un puerto LPT2 localizado en 0x378h, ésta es la dirección del registro de datos, al registro de estado le corresponde la dirección 0x379h y su respectivo registro de control está en la dirección 0x37Ah. Cuando la PC se enciende el BIOS ejecuta una rutina para determinar el número de puertos presentes en el sistema asignando la etiqueta LPT1 al primer puerto localizado, si existen más puertos entonces se asignarán consecutivamente las etiquetas LPT2 y LPT3 de acuerdo a la siguiente tabla:
Dirección inicial
   
Función
0000:0408
   
Dirección base para LPT1
0000:040A
   
Dirección base para LPT2
0000:040C
   
Dirección base para LPT3
0000:040E
   
Dirección base para LPT4

Tabla 5: Direcciones base en el BIOS

     Para trabajar con el puerto paralelo necesitamos en primer lugar conocer la dirección base asignada por el BIOS (estamos hablando de una PC compatible con IBM), podemos utilizar un programa llamado Debug.exe que nos indique la(s) dirección(es) asignada(s): en la plataforma Windows vamos al menú inicio, seleccionamos programas y luego MS-DOS para abrir una ventana de Símbolo de MS-DOS y aquí podemos introducir los comandos indicados más abajo. Si se trabaja en ambiente DOS basta con teclear en la línea de comandos la palabra debug, el programa responde colocando un signo de menos - en donde tecleamos sin dejar espacios en blanco d040:08L8 y presionamos la tecla entrar, entonces el programa debug.exe nos indica en una serie de números la(s) dirección(es) para el (los) puerto(s) paralelo(s) disponibles en nuestro sistema, la siguiente imagen muestra el resultado obtenido en mi máquina:
Ejecutando Debug.exe en la línea de comandos

     Se puede observar una serie de números de dos dígitos (ocho en total), se trata del volcado de memoria que empieza en la dirección 40:0008h. Los primeros seis pares de números representn las direcciones base para los puertos paralelo instalados, en la imagen de arriba se aprecia que el único puerto paralelo de mi máquina está en la dirección 0x378h (78 03). Los números están invertidos porque Intel almacena tal información en un formato de "byte de bajo orden - byte de alto orden". Una vez que obtenemos la información deseada cerramos el programa Debug.exe simplemente tecleando la letra q y presionando la tecla entrar. Para cerrar la ventana de Símbolo de MS-DOS tecleamos la palabra exit y presionamos la tecla entrar.

     Por supuesto, también podemos conocer la dirección asignada al puerto paralelo utilizando un programa, faltaba más, el código es el siguiente:


/**********************************************************
*  puerto1.c                                              *
*  (c)Virgilio Gómez Negrete                              *
*  Determina la direccion del puerto paralelo             *
**********************************************************/

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

int main()
{
    unsigned int __far *puntero_a_direccion;
    int i;

    puntero_a_direccion=(unsigned int __far *)0x00000408;

    for (i=0; i<3; i++)
    {
        if (*puntero_a_direccion == 0)
        printf("No se encontro puerto asignado a LPT%d \n", i+1);
        else
        printf("La direccion asignada a LPT%d es 0x%Xh\n",
          i+1, *puntero_a_direccion);
        puntero_a_direccion++;
    }

    return 0;
}

     El programa es muy sencillo, necesitamos un puntero que señale a la ubicación de memoria que almacena la información para las diferentes direcciones asignadas al puerto paralelo, lo llamamos puntero_a_direccion, éste puntero debe ser de al menos dos bytes, por ésta razón se declara como de tipo unsigned int __far. Es importante que Usted verifique en la documentación de su compilador la manera precisa para utilizar la palabra clave far, ésta puede ser simplemente la palabra como tal ó bién puede llevar uno (_far) o dos guiones bajos (__far), asegúrese de utilizar la forma correcta ó el programa no funcionará. Creo que con lo explicado arriba el funcionamiento del programa puerto1.c no presenta problema alguno.

Volver al principio
Hola mundo
Interfaz para el puerto paralelo

     Actualmente, la mayoría de los puertos instalados en las computadoras son de tipo multimodal configurables a través del BIOS de la máquina, en éste artículo me refiero expresamente al modo Normal (SPP), además de éste están las opciones Bidireccional, EPP versión 1.7, EPP versión 1.9 y ECP principalmente. El modo de operación Normal es el más elemental y solamente permite la escritura en las líneas de datos, patitas 2 a la 9 del conector DB-25 del puerto paralelo de la PC.

     Eléctricamente, el puerto paralelo entrega señales TTL y como tal, teoricamente, se le puede conectar cualquier dispositivo que cumpla con los niveles de voltaje específicos de la lógica TTL, sin embargo el hardware del puerto paralelo está muy limitado en cuanto a su capacidad de manejo de corriente, por ésta razón se debe ser muy cuidadoso con el manejo de las señales del puerto, un corto circuito puede dañar permanentemente la tarjeta madre de la PC. Para disminuir lo más posible el riesgo de daños al puerto utilizamos un circuito integrado 74LS244 como etapa separadora y al mismo tiempo mejoramos la capacidad de manejo de corriente, de esta forma podemos conectar una serie de diodos emisores de luz (LED) que nos indiquen la actividad en las líneas de datos del puerto paralelo. El circuito se detalla en el siguiente diagrama:
Interfaz para el puerto paralelo

     Por cada línea de entrada que tomamos directamente del puerto paralelo existe una etapa amplificadora-separadora dentro del circuito integrado 74LS244 que nos permite trabajar con una tasa de entrega de corriente suficiente para desplegar en los diodos emisores de luz la información escrita en las líneas de datos del puerto. Además es posible habilitar ó deshabilitar el despliegue del nibble de orden inferior ó superior del byte escrito en el puerto. Colocando en un nivel lógico alto la patita 1 del CI 74LS244 inhabilitamos el despliegue del nibble de orden bajo, un nivel lógico alto en la patita 19 evita el despliegue del nibble de orden alto. Para comodidad, conecto las patitas 1 y 19 permanentemente a tierra de tal manera que sea posible visualizar la actividad en los diodos emisores de luz (LED). En el diagrama se especifican con números las correspondientes patitas del conector DB-25. Obviamente se requiere de una fuente regulada de 5 Voltios para operar éste circuito, además los siguientes materiales:

    * 1. Circuito Integrado TTL 74LS244.
    * 8. Diodos Emisores de Luz.
    * 8. Resistencias de 220 Ohms, 1/2 Watt.
    * 1. Cable y conector para el puerto paralelo.

     Naturalmente lo más recomendable es probar el correcto funcionamiento del circuito antes de conectarlo al puerto paralelo de la PC. Ensamble el circuito, preferentemente en un circuito impreso, y conéctelo a una fuente regulada de 5 Voltios, conecte temporalmente un extremo de una resistencia de 10,000 Ohms a una línea de entrada, el resto de las líneas de entrada conéctelas a tierra. El otro extremo de la resistencia conéctelo directamente al borne positivo de la fuente de alimentación para inducir una señal TTL alta, el respectivo LED debe encender. Con un trozo de alambre conectado a Tierra, toque temporalemente el extremo de la resistencia que está conectado a la línea de entrada para inducir una señal TTL de lógica baja, el LED se debe apagar. Repita ésta operación para cada una de las ocho líneas de entrada. Una vez que ha verificado el correcto funcionamiento del circuito está listo para conectarlo al puerto paralelo de la PC.

     En primer lugar apague la computadora y el circuito. Conecte el cable al puerto paralelo asegurándose que el conector esté firme en su sitio. Encienda el circuito y por último encienda la computadora, por regla general, el circuito de restablecimiento de la computadora coloca inicialmente en las líneas de datos del puerto paralelo un valor igual a 0x0h, por lo tanto todos los diodos deben estar apagados una vez que la computadora ha terminado su proceso de arranque, sin embargo, si algún diodo permanece encendido ésto no indica una condición de falla, es responsabilidad del software que Usted escriba para controlar el puerto inicializarlo con un valor adecuado antes de realizar cualquier otra operación.

Volver al principio
Hola mundo
Escribiendo datos al puerto paralelo

     Con ocho bits podemos escribir en el puerto un total de 256 valores diferentes, cada uno de éstos representa un byte de información y cada byte puede representar una acción concreta que nosotros podemos definir de acuerdo a nuestras necesidades. En éste artículo el objetivo es entender cómo trabajar con el puerto paralelo, por lo tanto hagamos un programa que nos permita escribir un número cualquiera entre 0 y 255 de tal manera que sea posible visualizar el valor en formato binario. En primer lugar consulte la documentación de su compilador para verificar la correcta sintáxis de la función que nos sirve para escribir en el puerto, en el caso específico de Symantec C++, dicha función es outp( ). Ésta función requiere dos parámetros, el primero de tipo unsigned int que especifica la dirección del puerto paralelo, y el segundo de tipo char que especifica el valor a escribir en las líneas de datos de puerto. Una típica llamada a la función outp( ) se parece a ésto:


outp(0x378, 65);

     Se aprecia la facilidad de manejo de la función, aunque diferentes compiladores dan a sus respectivas funciones nombres diferentes, la mecánica es la misma, se requieren dos parámetros, la dirección del puerto y el valor a escribir en el puerto. Estudie el siguiente código:


/**********************************************************
*  puerto2.c                                              *
*  Escribe datos al puerto paralelo de la PC              *
*  (c)1999, Virgilio Gómez Negrete                        *
**********************************************************/

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

int puerto(int direcc);
int seleccion;

int main()
{
    unsigned int __far *puntero_a_direccion;
    int i, direccion[3]={0,0,0}, disponible[3]={0,0,0};

    puntero_a_direccion = (unsigned int __far *)0x00000408;

    printf("Seleccione el puerto:\n");
    /* ¿Cuantos puertos existen? */
    for (i=0; i<3; i++)
    {
        if (*puntero_a_direccion == 0)
        printf("Puerto LPT%d...............no disponible\n", i+1);
        else
        {
            disponible = 1;
            direccion = *puntero_a_direccion;
            printf("Puerto LPT%d...............%d\n", i+1, i+1);
        }
        puntero_a_direccion++;
    }
    printf("Salir del programa........0\n");
    scanf("%d", &seleccion);

    do
    {
        switch(seleccion)
        {
            case 0:/* Salir del programa */
            printf("Adios!!!\n");
            return 0;
            break;

            case 1:/* Puerto LPT1 */
            if(disponible[0]==1)
            puerto(direccion[0]);
            else
            {
                printf("ERROR: PUERTO NO DISPONIBLE\n");
                return 0;
            }
            break;

            case 2:/* Puerto LPT2 */
            if(disponible[1]==1)
            puerto(direccion[1]);
            else
            {
                printf("ERROR: PUERTO NO DISPONIBLE\n");
                return 0;
            }
            break;

            case 3:/* Puerto LPT3 */
            if(disponible[2]==1)
            puerto(direccion[2]);
            else
            {
                printf("ERROR: PUERTO NO DISPONIBLE\n");
                return 0;
            }
            break;

            default:
            printf("ERROR: OPCION INCORRECTA!\n");
            break;
        }
        if(seleccion!=0)
        {
            printf("Seleccione otra opcion\n");
            scanf("%d", &seleccion);
        }
    }
    while(seleccion!=0);

    return 0;
}

int puerto(int direcc)
{
    unsigned char valor; /* Solo valores entre 0 y 255 */

    printf("Ahora puede escribir cualquier valor\n");
    printf("entre 1 y 255, 0 para terminar el programa\n");
    do
    {
        printf("Valor al puerto?\n");
        scanf("%d", &valor);
        outp(direcc, valor);
        printf("Se ha escrito %d al puerto\n", valor);
    }
    while(valor!=0);

    return seleccion=0;
}

     El programa determina el número de puertos paralelo instalados en la computadora y almacena sus respectivas direcciones en el arreglo llamado direccion, en caso de encontrarse una dirección válida además se establece en 1 el valor del arreglo llamado disponible simplemente como una medida de seguridad adicional. Como resultado de éstas acciones el programa despliega un menú basado en los puertos encontrados, en este punto Usted puede seleccionar, en caso de que disponga de más de un puerto, el puerto en donde está conectado el circuito mostrado en el diagrama de arriba.

     Una vez seleccionado el puerto Usted puede escribir un valor cualquiera comprendido entre 0 y 255. Independientemente del puerto seleccionado toda la funcionalidad del programa está encapsulada en la función de tipo int llamada puerto( ) a la cual se le pasa un único parámetro que es la dirección del puerto seleccionado. La función está codificada de tal forma que al escribir un 0 el programa termina, de ésta manera al cerrar el programa las líneas de datos del puerto paralelo están todas en un nivel lógico bajo. Éste programa y el circuito asociado son útiles para entender de forma visual la forma de representar valores en formato binario, además establece las bases de trabajo para otros proyectos de control basados en computadora. Disfrute la experiencia.

Volver al principio
Hola mundo
Descargas

     El diagrama esquemático de la interfaz para el puerto paralelo y el código fuente de los programas mostrados en éste artículo están disponibles en el archivo llamado paralel1.zip (11.7 Kb.)

Volver al principio
Hola mundo
© 1999 Virgilio Gómez Negrete, Derechos Reservados

zlackware

Para los que les sale el fulano error
Unhandbled exeption in VB6.EXE (INPOUT32.DLL): 0c0000096: Privilegerd Instruction
al usar la libreria inpout32.dll, les recuerdo que deben bajarse el
codigo fuente de

http://www.logix4u.cjb.net/

y COMPILARLO en su maquina. Esto se debe a que por lo general esta dll viene precompilada para su uso en windows95-98-ME (plataforma 16 bits) y NO funcionara en Windows XP a menos que lo compilen. Esto es tanto para Visual Basic como Visual C++

Jim_Morrison

hola a todos.

necesito ayuda, estoy en un proyecto con el puerto paralelo pero necesito manejar frecuencias, y quisiera ver si me podrian ayudar sobre esto, o se los agradeceria si me ayudaran o diganme si puedo encontrar algun manual referente a este tema.

muchas gracias y asta luego.
espero su contestacion.

GeoMX

no sé precisamente qué requieras, pero como el puerto paralelo es completamente digital (sólo puedes tener activado o desactivado algún pin de entrada/salida), me parece necesitarás un ADC con salida de máximo 5 bits (son los pines de entrada del puerto paralelo, aunque podrías ampliarlo utilizando algún codificador, p. ej.). Eso en cuanto a tu caso, lo demás (el programa), pues es software y aquí en este post hay enlaces a varios recursos que te serán de ayuda.

Saludos,
José Jorge (Geo).

Jim_Morrison

 ;D hola jorge:

Gracias por responder, en realidad tienes razon no me di a explicar vien, bueno mi problema consiste en que tengo que ,anejar los pulsos de los pines de salida para mnaejar un servomotor. asta ahora e visto las funciones de abilitar y desabilitar que es un par de las funciones que necesito, pero quisiera saber si pudiera manejar los pulsos, un ejemplo de esto es que:

un pulso de 1.5 ms hase que gire el servomotor a neutral o a 90º
un pulso de 1.25 ms hase que gire a 0º
un pulso de 1.75 ms hase que gire a 180º

mas o menos el valor de los pulsos solo varea de los 1.25 ms a los 2.25 ms para una bulelta completa.


bueno es algo de lo que necesito y me gustaria que me hecharas la mano porfa, pues lo ocupo mucho.

y gracias por tu atencion.