Puerto paralelo [Problema]

Expansiver

Bovino adicto
#1
Por que cuando uso la libreria inpout32.dll, cuando uso la direccion
  • out ( &H378, 2 )

No da respuesta el puerto papalelo.

Solo da respuesta con la direccion: out ( &H37A, 2 ) y da respuesta en 4 bits
 
#2
Recuerdo que no use dll, pero lo que pienso que esta mal es la direccion del puerto paralelo que estas poniendo "&H37A", la direccion de puerto paralelo la puedes checar en tu Bios para que no tengas problema, si no sabes, me avisas y vere si te puedo asesorar mas graficamente :pNo estoy seguro pero eso me parece que es el error, y el 2 creo que haces referencia al pin, por el cual quieres mandar el pulso electrico!
 

Expansiver

Bovino adicto
#3
Estoy usando Visual Basic

Ya intente eso del bios pero no funciono, dejame checo otra vez y ya te digo no?

Basicamente solo necesito 3 pines de salida
 
#5
Este es un código que yo utilizaba en mi clase de ensamblador funciona para el puerto lpt1 pero corre sobre linux, ahí te lo dejo si te sirve de algo :)

Código:
#include <stdio.h>
#include <unistd.h>
#include <sys/io.h>
 
// Esta es la direccion más frecuente para el puerto paralelo
#define DATAPORT 0x378 /* lpt1 */
 
//Duración de cada paso en microsegundos
#define DELAY 150000
 
//Numero de veces que se repite cada secuencia
#define REPEAT 4
 
void Blink();
void Alternate();
void ZigZag();
 
int main()
{
  //Obtenemos permiso de acceso para la direccion de DATAPORT y
  //las 2 siguientes
  if (ioperm(DATAPORT, 3, 1)) {perror("ioperm"); return 1;}
 
  //mode indique que secuencia es la que se esta ejecutando
  int mode=0;
  while(1)
  {
    int i;
    for(i = 0 ; i < REPEAT; i++)
    {
      int reset=0;
      //Comprueba el valor de mode
      switch (mode)
      {
        //Si vale 0 toca parpadeo
        case 0:
          Blink();
          break;
        //Si vale 1 toca alternar pares e impares
        case 1:
          Alternate();
          break;
        //Si vale 2 toca hacer un ZigZag
        case 2:
          ZigZag();
          break;
        //Si vale otra cosa, vovemos a empezar. Para ello
        // ponemos mode a -1
        default:
          mode=-1;
      }
    }
    //Despues de repetir REPEAT veces una secuencia pasamos 
    //a la siguiente sumandole 1 a mode
    mode++;
  }
 
  //Volvemos a cerrar los puertos
  if (ioperm(DATAPORT, 3, 0)) {perror("ioperm"); return 1;}
 
  return 0;
}
 
//Esta función hace parpadear los leds.
void Blink()
{
  //Ponemos todos los led a 1
  outb(255,DATAPORT);
  //Y esperamos 2*DELAY microsegundos
  usleep(2*DELAY);
 
  //Luego ponemos todos los leds a 0
  outb(0,DATAPORT);
  //Y volvemos a esperar
  usleep(2*DELAY);
}
//Esta función enciende alternativamente los leds pares y los impares
void Alternate()
{
  int i;
  //repetimos cuatro veces
  for(i=0;i<4;i++)
  {
    int output = 85;
 
    //Primero ponemos 85 que es 01010101 en binario,
    //con lo que se iluminan los leds impares, y esperamos 2*DELAY
    outb(output,DATAPORT);
    usleep(2*DELAY);
 
    //Desplazamos los bits de output un lugar a la izquierda,
    //con lo que nos queda "10101010"
    output = output << 1;
 
    //Al pasarlo al puerto paralelo se iluminan los leds pares
    outb(output,DATAPORT);
    usleep(2*DELAY);
  }
}
 
//Esta función enciende ulas luces al estilo del coche fantastico
void ZigZag()
{
  //output solo tiene el último bit distinto de 0
  int output = 1;
  //direction indica el sentido de movimiento de la luz: 1 izquierda,
  // 0 derecha. Empezamos hacia la derecha
  int direction = 1;
  while (output !=0)
  {
    //Sacamos output por el puerto
    outb(output, DATAPORT);
    usleep(DELAY);
 
    //Si dirección es distinto de cero
    //movemos los bits de output hacia la izquierda
    if(direction)
      output = output << 1;
    //Si no, los movemos hacia la derecha
    else
      output = output >> 1;
 
    //Si output vale 256 es que se nos ha salido
    //la luz por la izquierda así que cambiamos la dirección
    if(output==256)
    {
      output = output >> 1;
      direction = !direction;
    }
  }
}
 

bathim

Baneado :(
#6
Pess la direccion 0x378, se usa para salida en puerto paralelo cuando esta configurado en SPP o puerto standar, para la direccion 0x37A esta configurado en el bios con esa direccion.
Puede que sirva la siguiente pagina :
Código:
http://www.modelo.edu.mx/univ/virtech/circuito/paralelo.htm
 
Arriba