Puerto Paralelo y Gambas3 + USB - Versión para impresión +- Comunidad Gambas-es (https://gambas-es.org) +-- Foro: Linux (https://gambas-es.org/forum-9.html) +--- Foro: Hardware & IoT (https://gambas-es.org/forum-11.html) +--- Tema: Puerto Paralelo y Gambas3 + USB (/thread-218.html) |
Puerto Paralelo y Gambas3 + USB - AlfredoSC - 23-12-2020 Hola: Hace casi un año que estuve realizando algunos programas en Gambas3 sobre Ubuntu 18.xx para controlar algunos de mis diseños con Microcontroladores PIC a traves del Puerto Paralelo. (Esto le vengo haciendo en Windows, sin problemas desde hace años). En Ubuntu y Gambas se me ha complicado demasiado. Dejé de usar las instrucciones convencionales de hPort = Open "/dev/parport0"...bla bla bla y en su lugar busqué otro método. Encontré lo siguiente: Buscando en la WEB, encontré que ioport es requerido para ganar control del o los puertos paralelo de la PC, por lo que lo instalé con: sudo apt-get install ioport Una vez instalado, se prueba con el siguiente comando: sudo outb --hex 0x378 0x32 Por supuesto, hay que tener un cable conectado al puerto paralelo de la PC y un proto-board donde se hayan conectado 8 leds a los pines D0-D7, y GND, con lo que se podrá ver el resultado en los leds encendidos y los apagados. En Gambas3 se debe hacer uso de la instrucción Exec de la siguiente manera: Dim Proc as Procces - Proc = Exec ["outb", "--hex", "0x378", "0x32"] For Output Si se requiere enviar una variable al Puerto Paralelo, hacer los siguiente: Dim Proc as Procces - variable = &h32 Proc = Exec ["outb", "--hex", "0x378", variable] For Output donde variable se escribe sin comillas. Como se requieren permisos para ejecutar la instrucción outb, Gambas3 debe ejecutarse con permisos de root. Espero que esto les sea de utilidad a quienes siguen usando el Puerto Paralelo.....Saludos. RE: Puerto Paralelo y Gambas3 - jguardon - 23-12-2020 Hola y gracias por el aporte. Mi duda es cuánta gente sigue usando el puerto paralelo. De hecho las PC modernas ya no lo incorporan, al menos físicamente en sus placas madre, de manera que si necesitamos disponer de uno, hemos de comprar una placa PCI o PCIe que lo provea. Pero la mayoría de los microcontroladores hoy en día se programan vía USB/RS-232 y el Parallel Port sigue en su camino de extinción aunque aún se siga utilizando en máquinas y desarrollos más o menos antiguos o quizás en aplicaciones más industriales. Saludos y bienvenido RE: Puerto Paralelo y Gambas3 - AlfredoSC - 23-12-2020 Hola: Yo me muevo en el ámbito de las radiocomunicaciones y la electrónica de control Efectivamente aún se utiliza mucho el Puerto Serial (no el paralelo) para programar equipos de radiocomunicación como Kenwood y Motorola. Así que debemos seguir conservando en buen estado nuestras antiguas PCs, que tienen puertos serie y paralelo. Como mi hobby es la electrónica pura y dura, me gusta mucho la experimentación RETRO, es decir, rescatar componentes electrónicos de algunos aparatos inservibles y hacerlos funcionar, programando en VB o Gambas. Por ejemplo: - Display inteligente (con Chip PT6959) de un dañado reproductor de DVD/CD, el cual puede ser "resucitado" bajo programación y conectado al puerto paralelo, hacer que muestra textos, la hora de la PC, el contenido de un archivo de texto que pasa con scroll. - Tarjeta de sonido de una vieja máquina de juegos Road Riot, conteniendo un sintetizador YM2151 y RAM y ROM de aquellas épocas, que he "resucitado" y bajo programación en VB y Gambas he logrado reproducir todos sus sonidos con diferentes comandos que yo mismo me he inventado, usando el puerto paralelo, y también el serial rs-232.... - Un diseño de DMX-512 en VB y tarjeta que yo he diseñado y fabricado, para controla Luces y Motores, usando como siempre el puerto serial, bajo los mismo principios que el estándar original DMX.... Por supuesto que he realizado varios proyectos con USB/RS232 y otros mas con USB/HID, sobre windows. Pero cuando quiero hacer lo mismo en Gambas3 con Linux, ahí tengo por ahora una barrera. Pregunta: ¿Tiene Gambas3 un componente para manejar USB?....quizá en gb.net?... Saludos... PD...Como ya soy un viejo de 62 años, me he quedado un poco en las tecnologías del pasado, pero estoy descubriendo lo nuevo, y estoy practicando, bajo el mismo tenor de las IoT, con java, javascript, python, C++, VB.net, Gambas, y lo que me encuentre por ahí....Saludos RE: Puerto Paralelo y Gambas3 - jguardon - 23-12-2020 Hola de nuevo, Alfredo. Me encanta conversar con "compañeros" de viaje del mundo de la electrónica y la radiocomunicación. Estudié electrónica de joven y he sido radioaficionado desde muy joven también, aunque ahora mismo no estoy activo en radio desde hace unos años. Me gusta mucho el cacharreo y ojalá tuviera más tiempo para dedicarme a ello. En cuanto al manejo del puerto USB en linux, es muy sencillo. En Linux todo, repito, TODO (incluso el hardware) es un fichero. Es decir, que se puede acceder a casi cualquier cosa mediante la ruta al fichero o al fichero que representa un dispositivo de hardware. Así que para acceder a cualquier puerto, tendremos que la ruta podría ser más o menos así: /dev/ttyS0, donde /dev es el directorio que contiene los dispositivos de hardware y ttyS0 en este caso es el primer puerto rs232 existente. Algo así como el COM1 en windows. ttyS1, ttyS2, etc para los siguientes. Del mismo modo, /dev/ttyUSB0 sería la ruta para leer/escribir en un puerto usb y también de la misma manera se podrían usar los números correlativos dependiendo de qué puerto esté en uso. Dos comandos importantes para saber qué puerto USB está en uso son los siguientes: dmesg - lista el buffer de mensajes del kernel y son visibles eventos de hardware como introducción o expulsión de un dispositivo USB lsusb - lista los dispositivos conectados al bus correspondiente A nivel informativo, estas herramientas son útiles para determinar si un dispositivo está físicamente conectado al sistema. En cuanto a la lectura y escritura en los dispositivos, linux (y Gambas) los trata por igual, como un stream de datos (bits). Por lo tanto, se pueden leer y enviar datos usando funciones nativas de gambas de una forma muy sencilla y transparente para el programador, ya que es muy similar a abrir un fichero, leer o escribir y cerrarlo al finalizar. He encontrado un ejemplo sencillo para ilustrar el concepto, sirve tanto para rs232 como para usb: https://fossies.org/linux/gambas/app/examples/Networking/SerialPort/.src/Module_RS232.module Y supongo que esto podría servir también para el puerto paralelo, aunque nunca lo he probado. Aquí hay algo más de información al respecto (en inglés): http://gambaswiki.org/wiki/howto/parport?l=es Espero que sirva de ayuda, si necesitas algo más concreto, puedes abrir un hilo específico en la sección correspondiente y trataremos de ayudarte. Saludos RE: Puerto Paralelo y Gambas3 - AlfredoSC - 24-12-2020 JGuardon, muchas gracias por la información sobre el USB. Ya estoy preparando algún proyecto donde pueda aplicarlo. Tengo una placa que diseñé y armé con un sintetizador YM2203 y uso un PIC 18F2550, así que con ese prototipo que hoy funciona bajo VB en Windows, haré lo correspondiente en Linux (Ubuntu 18.04) y Gambas3....ya pondré los resultados....Saludos y feliz Noche Buena 2020. RE: Puerto Paralelo y Gambas3 - jguardon - 24-12-2020 (24-12-2020, 05:07)AlfredoSC escribió: JGuardon, muchas gracias por la información sobre el USB. Ya estoy preparando algún proyecto donde pueda aplicarlo. Tengo una placa que diseñé y armé con un sintetizador YM2203 y uso un PIC 18F2550, así que con ese prototipo que hoy funciona bajo VB en Windows, haré lo correspondiente en Linux (Ubuntu 18.04) y Gambas3....ya pondré los resultados....Saludos y feliz Noche Buena 2020. Igualmente, felices fiestas Alfredo Sólo un apunte más. Por norma general, el acceso a los dispositivos del sistema requiere permisos de root, como bien dijiste en tu primer post. En tal caso el programa que utilice los puertos serie o USB requeriría de dichos permisos, usando 'sudo' o cambiando al usuario root. Pero hay una forma de evitar que nuestros programas tengan que escalar privilegios, ya que supone un riesgo importante de seguridad y es la siguiente: Necesitamos añadir nuestro usuario normal al grupo 'dialout' mediante este comando: Código: sudo usermod -a -G dialout "$USER" donde la variable $USER es sustituida automáticamente por nuestro nombre de usuario actual en la consola. El grupo dialout tiene privilegios para usar los puertos físicos de nuestra máquina, no siendo necesario recurrir al escalado de privilegios mediante sudo. En algunos casos es necesario desinstalar modemmanager y en todo caso, es necesario reiniciar la sesión o el PC para que el comando anterior haga efecto. Código: sudo apt remove modemmanager De esta forma ya no es necesario el uso de sudo para acceder a los puertos del sistema. Saludos RE: Puerto Paralelo y Gambas3 - AlfredoSC - 28-12-2020 Gracias a todas tus recomendaciones, seguí con mi proyecto usando el USB en Ubuntu 18.04, para lo cual ya había elaborado un prototipo usando un PIC18f13k50 para recoger los valores de 3 sensores (Temperatura, Voltaje y Cantidad de Luz ambiental) y enviar esta información por USB a un programa en VB6 en Win2. Pero ahora lo he logrado hacer en Linux. Bien, habiendo realizado un 90% del proyecto, estoy anexando: Un listado del programa en Cpp del proyecto PIC18f13k50, Un listado del Programa en GAMBAS3, un pantallazo del IDE en Linux. [img]/home/usuario/Documentos/Usb_TempVolt/Captura de pantalla de 2020-12-28 11-09-16.png[/img] Código: /* Programa con el 18f13k50 que se utiliza como sensor de intensidad de luz, temperatura y voltaje, Código: RE: Puerto Paralelo y Gambas3 - jguardon - 29-12-2020 Hola de nuevo, Alfredo Gracias por tus aportaciones, aunque tengo dudas sobre el código en C. Bueno, antes de nada, te invito a leer aquí cómo insertar código en el foro para que se resalte en colores. En cualquier caso, el código que pegaste en tu mensaje estaba todo en una sola línea y he tenido que editar tu mensaje para que fuera mínimamente legible, formateando en código manualmente en un editor moderno. No sé qué editor de código usas para C, pero al hacer copia/pega se pierde el formato completamente. Una vez ordenado el código no soy capaz de compilarlo. No soy experto en C, pero me choca que los comentarios que hay después de los #use y otras declaraciones (macros) no los detecte el editor. También debes de corregir la imagen que intentas insertar, ya que has utilizado la ruta local en lugar del método correcto descrito aquí. Y ya en cuanto al código gambas, que tampoco he probado por no disponer de los medios y requisitos necesarios para tu proyecto, me llama la atención al menos dos cosas:
Saludos RE: Puerto Paralelo y Gambas3 - AlfredoSC - 29-12-2020 Hola JGUARDON: Bueno el código "amontonado" del PIC se debe a que oprimí el botón de, Menu que dice "Fuente HTML" y me lo dejó todo en una sola línea, como bien dices. Ya no quise "moverle", porque se vaya a descomponer otro poco. je je....En VB6 si he usado un solo arreglo de 8 bits para leer correctamente un "mensaje USB", lo cual intenté en Gambas, pero sólo me daba el valor de "Volts". Yo me preguntaba ¿Que me hará falta?...Luego se me ocurrió -y recordé- que los mensajes USB son de 32, 64 bytes o más y es por eso que tuve que detectar al menos 32 lecturas del "mensaje USB", y sólo así pude recuperar los otros 2 datos, es decir Intensidad de Luz y Temperatura. Así que los tres datos vienen en las variables[6], [14] y [22].... Y efectivamente, el objetivo es que sea criticado el proyecto, sea mejorado y sea utilizado por otros hobbystas y que haya retroalimentación. Por último fui incapaz de enviar la imagen de mi aplicación, pues la original está en *.png y luego la convertí a *.jpg, pero ninguna se pudo cargar con el Menú que dice "Imagen"...Sorry... Recuerdo que cuando era muy joven, a todo "le movía" por curiosidad y para aprender. Al paso de los años aprendí que no se debe andar de "tentón" ya que por eso pasan cosas desastrosas...acuérdate que ya paso de los 60's.....y ahora si no sé, no le toco....je je je... Saludos. RE: Puerto Paralelo y Gambas3 + USB - AlfredoSC - 30-12-2020 Hola: Habiendo leído los 2 artículos sobre Pegar Código e Insertar Imagen, procedo a insertar la imagen que quedó pendiente....saludos... ![]() La funcionalidad del botón "Monitor" no es correcta en este momento, pero estoy trabajando en ello. Si es posible que me echen una mano para lograrlo, lo agradeceré.... Nuevamente por aquí: He colocado un Menú y un sub menú para elegir el bus HID que Linux ha destinado cuando se conecta el dispositivo externo USB, en este caso mi proyecto. En la ruta /dev/usb aparecen hiddev0 o hiddev1 y lp1. Así que mi comando de Menú hace que se abra un nuevo Form y con el Control FileChooser abro por default la ruta /dev/usb para que me muestre el contenido. Se hace click en hiddev0 o hiddev1, con lo que esa cadena se pone en el cuadro de texto del FMain destinado para el Puerto USB seleccionado. Funciona muy bien. En FMain el código adicional es: Código: Public Sub mnuUsb_Click() Y en el Form adicional, el código es: Código: ' Gambas class file ![]() Saludos... |