Páginas (3): 1 2 3   
AlfredoSC   23-12-2020, 00:17
#1
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.
Última modificación: 30-12-2020, 00:59 por AlfredoSC.

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
jguardon   23-12-2020, 14:09
#2
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

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
AlfredoSC   23-12-2020, 22:21
#3
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

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
jguardon   23-12-2020, 23:36
#4
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/exa...232.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

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
AlfredoSC   24-12-2020, 05:07
#5
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.

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
jguardon   24-12-2020, 18:56
#6
(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

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
AlfredoSC   28-12-2020, 19:56
#7
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,
a traves de dos entradas analógicas, enviando la información por USB a una PC o Laptop,
desde donde se podrá consultar dichos valores a petición de un usuario o de manera periodica
en forma automática. Se usa un LED blanco, como sensor de luz, ya que este dispositivo,
cuando es iluminado presenta en sus terminales un voltaje, proporcional a la intensidad de la luz incidente. 
Se pone un botón en rc5 para enviar desde el PIC18 hacia la PC la información delos sensores.
(El modo de envío automático se deshabilita). En la aplicación de VB6 se coloca un botón para solicitar
datos al PIC18, enviando un valor numérico en el packet el cual debe ser reconocido por el PIC18. 
VendorID = 6019, ProductID = 2003 Alfredo Segura, Queretaro, Mexico, noviembre de 2020.*/ 

#include <18F13k50.h>
#fuses HS,NOWDT,NOPROTECT,NOCPB,NOLVP,NODEBUG,MCLR,CPUDIV1,PLLEN,USBDIV1,NOIESO,PUT
#use delay(clock = 48000000)   
//utiliza un XTAL de 12 MHz, para que con PLL arroje 48MHz 
#define USB_HID_DEVICE  TRUE    // Deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK    // Activa EP1(EndPoint1) para las transferencias IN Bulk/Interrupt
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK    // Activa EP1(EndPoint1) para las transferencias OUT Bulk/Interrupt
#define USB_EP1_TX_SIZE 8                  // Tamaño reservado para el Buffer Tx EndPoint1
#define USB_EP1_RX_SIZE 8                  // Tamaño reservado para el Buffer Rx EndPoint1 
#include <pic18_usb.h>
#include <hid_analog2.c>                 // Configuración del USB y los descriptores para este dispositivo
#include <usb.c>                           // Handles usb ,tokens y descriptores 
// Se declara el nombre a cada uno de los 8 elemento del vector recibe[8]   
#define  dato0 recibe[0]                                  
#define  dato1 recibe[1]                                   
#define  dato2 recibe[2]                                  
#define  dato3 recibe[3]
#define  dato4 recibe[4]
#define  dato5 recibe[5]
#define  dato6 recibe[6]
#define  dato7 recibe[7] 
// Se declara el nombre a cada uno de los 8 elemento del vector envia[8], enviar_n   
#define  enviar_0 envia[0]                                    
#define  enviar_1 envia[1]                                   
#define  enviar_2 envia[2]                         
#define  enviar_3 envia[3]                                  
#define  enviar_4 envia[4]
#define  enviar_5 envia[5]
#define  enviar_6 envia[6]
#define  enviar_7 envia[7] 
#use fast_io(A)          // LATA=0xF89  PORTA=0xF80, 5 I/O pins
#use fast_io(B)            // LATB=0xF8A  PORTB=0xF81, 4 I/O pins
#use fast_io(C)            // LATC=0xF8B  PORTC=0xF82, 8 I/O pins 
#byte ptoa = 0xf80#byte ptob = 0xf81
#byte ptoc = 0xf82 
#byte lata = 0xf89
#byte latb = 0xf8a
#byte latc = 0xf8b 
#bit ra0 = 0xf89.0         // D+ de USB
#bit ra1 = 0xf89.1         // D- de USB                           
// ra3 es MCLR                           
// ra4 y ra5 XTAL 12MHz
#bit rb6 = 0xf8a.6         // rb6 salida LED de conexión establecida
#bit rb7 = 0xf8a.7         // rb7 salida LED de actividad 
#bit rc3 = 0xf82.3         // Sensor Luz con LED Blanco
#bit rc5 = 0xf82.5         // Botón para iniciar envío de datos a una PC
#bit rc6 = 0xf82.6         // Sensor Voltaje#bit rc7 = 0xf82.7         
// Sensor Temperatura  int8 recibe[8];           
// Declaramos la variable recibe de 8 bytes
//int info0 = 0, info1, info2, info3, info4, info5, info6, info7;
int8 envia[8];             // Declaramos la variable envia de 8 bytes
int info[8] = {0,0,0,0,0,0,0,0};
int i, j, volts = 0, tempe = 0, luz = 0;
int volts_ant, tempe_ant, luz_ant;
int1 flag = 0, flag2 = 0;long k = 0; 
#int_timer0void actividad(void) {
  i++;
  k++;
  if (i >= 190) {
    rb7++;                     // LED de actividadi = 0;
  } 
  if (k >= 1500) {
    flag2 = 1;
    k = 0;
  } 
  set_timer0(0);


void ini(void) {
  enable_interrupts(global);
  disable_interrupts(int_timer0);
  setup_timer_0(t0_internal | t0_div_1); 
  setup_adc(adc_clock_internal);
  setup_adc_ports(sAN7 |sAN8 | sAN9 | vss_vdd); 
  set_tris_a(0b11101111);       // XTAL, D+, D-, MCLRset_tris_b(0b00001111);       
  // rb6 Enumerado, rb7 LED de actividadset_tris_c(0b11101000);       
  // rc3, rc6 y rc7 entradas analogicas. 
  usb_init();                  // Inicializa USB
  delay_ms(100);
  ptoa = 0x00, ptob = 0x00, ptoc = 0xbf;
  set_timer0(0);


void main(void) {
  ini();
  delay_ms(100); 
  usb_task();                  ///habilita USB
  usb_wait_for_enumeration();  ///Espera hasta que la PC reconozca este dispositivo
  rb6 = 1;
  enable_interrupts(int_timer0); 
  while(true) { 
    if(usb_kbhit(1)) {            // Se reciben dati[0,2,4,6,8,10,12] de una sola vez
      usb_get_packet(1, recibe, 8);
      info[0] = dato0;
      info[1] = dato1;
      info[2] = dato2;
      info[3] = dato3;
      info[4] = dato4;
      info[5] = dato5;
      info[6] = dato6;
      info[7] = dato7;
      delay_us(10);
      flag = 1;
    } 
    if (flag == 1) {                // Se ha recibido un MSG USB válido
      if (info[2] == 49) {            // Verificar si infa[2] == 49, indica petición de informe
        flag = 0;
        goto DISPARO;
      }flag = 0;
    } 
    if (rc5 == 0) {
      DISPARO:set_adc_channel(7);             // Prepara AN8 para leer Votaje
      luz = read_adc();
      delay_us(50);
      set_adc_channel(8);             // Prepara AN8 para leer Votaje
      volts = read_adc();
      delay_us(50);
      set_adc_channel(9);             // Prepara AN9 para leer Temperatura
      tempe = read_adc();
      delay_us(50); 
      enviar_0 = 255;
      enviar_1 = volts;
      enviar_2 = 255;
      enviar_3 = Tempe;
      enviar_4 = 255;
      enviar_5 = luz;
      enviar_6 = 255;
      enviar_7 = 255;
      //usb_put_packet(int8 endpoint, int8 * ptr, unsigned int16 len, USB_DTS_BIT tgl)
      usb_put_packet(1, envia, 8, usb_dts_toggle); 
      do {
        delay_us(50);
        j++;
      } while (rc5 == 0);
    } 
    if (flag2 == 1) {             // Monitorea sensores en forma automática
      set_adc_channel(7);             // Prepara AN8 para leer Votaje
      luz = read_adc();
      delay_us(50);
      set_adc_channel(8);             // Prepara AN8 para leer Votaje
      volts = read_adc();
      delay_us(50);
      set_adc_channel(9);             // Prepara AN9 para leer Temperatura
      tempe = read_adc();
      delay_us(50); 
      if (luz != luz_ant) {
        luz_ant = luz;
        flag2 = 0;
        goto DISPARO;
      } 
      if (volts != volts_ant) {
        volts_ant = volts;
        flag2 = 0;
        goto DISPARO;
      } 
      if (tempe != tempe_ant) {
        tempe_ant = tempe;
        flag2 = 0;
        goto DISPARO;
      }flag2 = 0;
    } delay_us(100);
  }
 


Código:
 
' Gambas class file

Public Const VendorID As Integer = 6019           '0x1783
Public Const ProductID As Integer = 2003          '0x07D3
Public BufferOut As New Integer[32]
Public BufferIn As New Integer[32]
Public usb_Bit As New Integer[32]
Public usb_B0 As Short
Public usb_B1 As Short
Public usb_B2 As Short
Public usb_B3 As Short
Public usb_B4 As Short
Public usb_B5 As Short
Public usb_B6 As Short
Public usb_B7 As Short
Public usb_B8 As Short
Public usb_B9 As Short
Public usb_B10 As Short
Public usb_B11 As Short
Public usb_B12 As Short
Public usb_B13 As Short
Public usb_B14 As Short
Public usb_B15 As Short
Public usb_B16 As Short
Public usb_B17 As Short
Public usb_B18 As Short
Public usb_B19 As Short
Public usb_B20 As Short
Public usb_B21 As Short
Public usb_B22 As Short
Public usb_B23 As Short
Public usb_B24 As Short
Public usb_B25 As Short
Public usb_B26 As Short
Public usb_B27 As Short
Public usb_B28 As Short
Public usb_B29 As Short
Public usb_B30 As Short
Public usb_B31 As Short

Public hProc As Process
Public puerto_usb As String
Public usb_insertado As Process
Public j As Integer
Public flag As Boolean



Public Sub cmdMonitor_Click()
Dim N As Integer

For N = 0 To 31
BufferOut[N] = 255
Next

BufferOut[0] = 0
BufferOut[3] = 49               ' este es el Disparador para pedir datos al PIC18

WriteSomeData()

End

Public Sub Form_Open()
'On Error Resume Next
' no quitar!
'ConnectToHID (Me.hwnd)
txtConectar.Text = "No"
cmdConectar.Enabled = True
Timer1.Enabled = True
Timer1.Delay = 1000
Me.Left = 1200
Me.Top = 100

End

Public Sub cmdConectar_Click()

lblvid.Text = VendorID
lblPid.Text = ProductID
txtConectar.Text = "SI"
cmdConectar.Enabled = False
puerto_usb = txtPuertoS.Text
Try usb_insertado = Exec ["cat", puerto_usb] For Read Write As "Display"
Wait 1

End

Public Sub Form_Close()

lblVid.Text = "NO VID"
lblPid.Text = "NO PID"

End


Public Sub Display_Read()
Dim Mm As Integer

txtDatos.Text = ""

' El primer byte es el ID del reporte, ej. BufferIn(0)
' los demás bytes son los datos del microcontrolador
' Los valores se reciben en DECIMAL

' Leer los nuevos datos del Display
Read #usb_insertado, usb_B0
Read #usb_insertado, usb_B1
Read #usb_insertado, usb_B2
Read #usb_insertado, usb_B3
Read #usb_insertado, usb_B4
Read #usb_insertado, usb_B5
Read #usb_insertado, usb_B6
Read #usb_insertado, usb_B7
Read #usb_insertado, usb_B8
Read #usb_insertado, usb_B9
Read #usb_insertado, usb_B10
Read #usb_insertado, usb_B11
Read #usb_insertado, usb_B12
Read #usb_insertado, usb_B13
Read #usb_insertado, usb_B14
Read #usb_insertado, usb_B15
Read #usb_insertado, usb_B16
Read #usb_insertado, usb_B17
Read #usb_insertado, usb_B18
Read #usb_insertado, usb_B19
Read #usb_insertado, usb_B20
Read #usb_insertado, usb_B21
Read #usb_insertado, usb_B22
Read #usb_insertado, usb_B23
Read #usb_insertado, usb_B24
Read #usb_insertado, usb_B25
Read #usb_insertado, usb_B26
Read #usb_insertado, usb_B27
Read #usb_insertado, usb_B28
Read #usb_insertado, usb_B29
Read #usb_insertado, usb_B30
Read #usb_insertado, usb_B31

' Distribuir los datos leidos en las acciones correspondientes

BufferIn[0] = usb_B0
BufferIn[1] = usb_B1
BufferIn[2] = usb_B2
BufferIn[3] = usb_B3
BufferIn[4] = usb_B4
BufferIn[5] = usb_B5
BufferIn[6] = usb_B6
BufferIn[7] = usb_B7
BufferIn[8] = usb_B8
BufferIn[9] = usb_B9
BufferIn[10] = usb_B10
BufferIn[11] = usb_B11
BufferIn[12] = usb_B12
BufferIn[13] = usb_B13
BufferIn[14] = usb_B14
BufferIn[15] = usb_B15
BufferIn[16] = usb_B16
BufferIn[17] = usb_B17
BufferIn[18] = usb_B18
BufferIn[19] = usb_B19
BufferIn[20] = usb_B20
BufferIn[21] = usb_B21
BufferIn[22] = usb_B22
BufferIn[23] = usb_B23
BufferIn[24] = usb_B24
BufferIn[25] = usb_B25
BufferIn[26] = usb_B26
BufferIn[27] = usb_B27
BufferIn[28] = usb_B28
BufferIn[29] = usb_B29
BufferIn[30] = usb_B30
BufferIn[31] = usb_B31

For Mm = 0 To 15
txtDatos.Text = txtDatos.Text & "    " & BufferIn[Mm]
Next

txtDatos.Text &= Chr$(13)

For Mm = 16 To 31
txtDatos.Text = txtDatos.Text & "    " & BufferIn[Mm]
Next

sldLuz.Value = Abs(BufferIn[22])      ' Luz
sldVolts.Value = Abs(BufferIn[6])      ' Voltaje
sldTempe.Value = Abs(BufferIn[14])      ' Temperatura

txtDatos.Text = txtDatos.Text & Chr$(13)

For Mm = 0 To 31
BufferIn[Mm] = 0
Next

End

Public Sub WriteSomeData()
'On Error Resume Next
BufferOut[0] = 0   ' El primer byte es siempre el REPORTE ID
Dim Mm As Integer
'For Mm = 0 To 7
' Escribe los datos, sin olvidar pasar el arreglo completo
Try Exec ["outb", puerto_usb, BufferOut]
Wait
'Next
txtDatos2.Text &= Str$(BufferOut) & Chr$(13) & Str$(BufferIn)

End

Public Sub cmdBorrar_Click()
txtDatos.Text = ""
End


Public Sub Timer1_Timer()
If cmdVivo.Background = Color.Green Then
cmdVivo.Background = Color.Gray
Else
cmdVivo.Background = Color.Green
End If

End

Public Sub cmdSalir_Click()

Quit

End
Última modificación: 29-12-2020, 22:37 por jguardon.

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
jguardon   29-12-2020, 23:10
#8
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:
  • Has usado 32 variables para cada bit de lectura/escritura del USB, pudiendo haber usado un simple array de bits
  • En lugar de usar las clase stream que dispone gambas para estos menesteres, has usado un ejecutable externo a gambas, que no siempre es lo ideal.
Entiendo que es solo un proyecto de pruebas que no va más allá, sólo es una pequeña crítica constructiva.

Saludos

Por favor, usa el corrector ortográfico antes de pulsar el botón 'Enviar'
AlfredoSC   29-12-2020, 23:38
#9
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.

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
AlfredoSC   30-12-2020, 01:03
#10
Hola: Habiendo leído los 2 artículos sobre Pegar Código e Insertar Imagen, procedo a insertar la imagen que quedó pendiente....saludos...
[Imagen: Dmq19H3.png]

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()

Form1.Show
  
End

Public Sub recibe(archivo As String)
  
  txtPuertoS.Text = archivo
  
End


Y en el Form adicional, el código es:

Código:
' Gambas class file


Public Sub Form_Open()
  Me.Left = 1200
  Me.top = 500
  FileC1.SelectedPath = "/dev/usb/"

End

Public Sub cmdAceptar_Click()
Dim archivo As String

archivo = FileC1.SelectedPath
FMain.recibe(archivo)

Wait 1
Me.Close
End


[Imagen: 535xSXb.png]


Saludos...
Última modificación: 30-12-2020, 01:19 por AlfredoSC.

Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
Páginas (3): 1 2 3   
  
Usuarios navegando en este tema: 3 invitado(s)
Powered By MyBB, © 2002-2024 MyBB Group.
Made with by Curves UI.