• Inauguro la seccion comentandoles que hace unos años tuve que hacer unas pruebas para manejar dispositivos tales como memorias EEPROM con puerto serie (I2C, SPI, etc), motores paso a paso, displays LCD inteligentes de 16 caracteres x 1 linea, y me encontre con que necesitaba hacer las pruebas desde la PC, ya que si bien programo microcontroladores PIC desde mas o menos 1993, sin tener un simulador por hard es bastante complicado analizar donde falla la comunicacion con los dispositivos externos, ya que todo sucede demasiado rapido y no hay forma de ver el contenido de la memoria del PIC en forma directa. Es por esto que empece a investigar si habia algun lenguaje, en lo posible BASIC, que funcionara en windows, porque los lenguajes basados en DOS no funcionan del todo bien cuando se quiere acceder al puerto paralelo, mas aun si se esta corriendo XP. Ya no recuerdo cuantos lenguajes probe, pero en su tiempo encontre que el Liberty BASIC era el que mas se adecuaba, porque controla perfectamente el puerto paralelo en XP, porque es interpretado y muy simple de programar y usar.
    Ahora estuve mirando en la web LINK y me encontre con que esta la version 4.03 (yo tenia la 2.02), asi que la baje y decidi probar si seguia funcionando con el puerto paralelo, para lo cual busque en el baúl de los recuerdos (mas bien una vieja caja de zapatillas  ;D ) y recupere una vieja placa que adapte para controlar un motor paso a paso, un poco bestia, ya que es de 4.5 V y consume 2A, por lo cual lo alimento con una fuente de PC AT (por si no se acuerdan, las que estaban antes de las ATX), que tienen la particularidad de tirar mas de 10A en la salida de 5V. Cuando hice esa prueba, habia leido sobre motores paso a paso y me decidi a probar como funcionaban, para lo cual adapte una placa de un receptor de alarmas, que recibe una señal de radio de sensores inalambricos y activa los reles correspondientes, yo use eso porque donde trabajaba estaba lleno de placas viejas o funcionando a medias, por lo cual aproveche que tiene 7 reles y use solo 4 para activar las distintas combinaciones de salidas que hacen girar al motor. Basicamente se activan con 5V los 4 cables en distintas combinaciones para lograr que el motor gire hacia un lado, hacia el otro, o se quede clavado en la posicion actual.
    Acabo de probar el programa que hice originalmente para eso, y funciona perfectamente en XP, con la placa conectada al puerto paralelo

    El programa, solo para que vean lo simple que queda en Liberty BASIC, es el siguiente:

       ' Apaga el motor al comenzar
       out 888,0
       ' Carga los valores de la secuencia de pasos del motor
       dim Seq(8)
       for i=0 to 7: read a: Seq(i)=a: next i
       ' Bucle principal, sale ingresando 0, se puede ingresar pasos negativos para invertir giro
       P = 1: S = 0: Dir = 1
       while P<>0
           input "Pasos a avanzar (0 para salir): "; P
           if P=0 then print "FIN...": end
           Dir = P / (abs(P))
           for i=1 to abs(P)
               S=S+Dir
               if Dir=-1 then if S<0 then S = 7
               if Dir=1 then if S>7 then S = 0
               out 888, Seq(S)
               timer 50, [Timer1]
               wait
           [Cont1]
               S=S+Dir
               if Dir=-1 then if S<0 then S = 7
               if Dir=1 then if S>7 then S = 0
               out 888, Seq(S)
               timer 50, [Timer2]
               wait
           [Cont2]
           next i
       wend

    [DataSeq]
       data 3,2,6,4,12,8,9,1

    [Timer1]
       timer 0
       goto [Cont1]

    [Timer2]
       timer 0
       goto [Cont2]


    Basicamente lo que hace es cargar un vector de 8 elementos con la secuencia de activacion de las salidas hacia el motor, los motores paso a paso tienen una secuencia determinada que hay que seguir, y en este tipo de motores tiene 8 pasos diferentes, para avanzar un paso simplemente hay que ejecutar la siguiente combinacion de la secuencia, y para retroceder hay que ejecutar la combinacion anterior. Aqui se pide la cantidad de pasos a avanzar, y se ejecutan todos los pasos intermedios hasta llegar al punto deseado, es tan simple como eso.
    Pero bueno, el ejemplo es solo para que vean como se ve un programa, ya no me acuerdo mucho de la parte de temporizado, tendria que leer la ayuda, pero son retardos puestos para evitar que los reles se peguen y despeguen demasiado rapido, ya que sino no se moveria correctamente el motor. Ahora, el circuito andando parece una computadora de los años 40s, con los clicks de los reles sonando a medida que avanza el motor, un poco primitivo el asunto, deberia haber usado transistores, pero era la manera mas rapida de probar sin tener que armar una placa.
    Este basic tiene una limitacion en la longitud del programa que se puede hacer sin registrarlo, pero para probar cosas simples sirve. Lo que queria saber, dado que hace años que no busco, es si alguno de uds encontro algun otro lenguaje de windows que sirva para manejar los puertos serie y paralelo
    Liberty1
     

  • Veo que no salio muy elegante el programa, se le fueron todos los TAB, asi que aca va una captura de pantalla:


    Liberty2
     

  • Yo anduve jugando hace un tiempo con el Puerto paralelo, pero casi no recuerdo nada porque al final no me servía lo que pensaba hacer.... el tema es que recuerdo una DLL llamada inpout32.dll que en realidad estaba hecha para Delphi que me parece casi el mejor lenguaje para hacer estas cosas. ahora tratando de encontrarla para extenderme un poco me encontré esto: http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=96  lo importante es que viene con las fuentes según dice.

     

Moderador (s): homecomputer, Selandari, ArielP, pastbytes, Durandal