Este foro usa cookies
Este foro utiliza cookies para almacenar su información de inicio de sesión si está registrado y su última visita si no lo está. Las cookies son pequeños documentos de texto almacenados en su computadora; las cookies establecidas por este foro solo se pueden usar en este sitio web y no representan ningún riesgo de seguridad. Las cookies en este foro también rastrean los temas específicos que ha leído y la última vez que los leyó. Si Ud. continúa navegando, entenderemos que acepta todas las cookies.

Se almacenará una cookie en su navegador, independientemente de la elección, para evitar que se le vuelva a hacer esta pregunta. Podrá cambiar la configuración de sus cookies en cualquier momento utilizando el enlace en el pie de página.

El foro antiguo se encuentra accesible desde https://foro.gambas-es.org en modo de solo lectura.

Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5

Puerto Paralelo y Gambas3 + USB
#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
  1. /* Programa con el 18f13k50 que se utiliza como sensor de intensidad de luz, temperatura y voltaje,
  2. a traves de dos entradas analógicas, enviando la información por USB a una PC o Laptop,
  3. desde donde se podrá consultar dichos valores a petición de un usuario o de manera periodica
  4. en forma automática. Se usa un LED blanco, como sensor de luz, ya que este dispositivo,
  5. cuando es iluminado presenta en sus terminales un voltaje, proporcional a la intensidad de la luz incidente. 
  6. Se pone un botón en rc5 para enviar desde el PIC18 hacia la PC la información delos sensores.
  7. (El modo de envío automático se deshabilita). En la aplicación de VB6 se coloca un botón para solicitar
  8. datos al PIC18, enviando un valor numérico en el packet el cual debe ser reconocido por el PIC18. 
  9. VendorID = 6019, ProductID = 2003 Alfredo Segura, Queretaro, Mexico, noviembre de 2020.*/ 
  10.  
  11. #include <18F13k50.h>
  12. #fuses HS,NOWDT,NOPROTECT,NOCPB,NOLVP,NODEBUG,MCLR,CPUDIV1,PLLEN,USBDIV1,NOIESO,PUT
  13. #use delay(clock = 48000000) 
  14. //utiliza un XTAL de 12 MHz, para que con PLL arroje 48MHz 
  15. #define USB_HID_DEVICE  TRUE    // Deshabilitamos el uso de las directivas HID
  16. #define USB_EP1_TX_ENABLE  USB_ENABLE_BULK    // Activa EP1(EndPoint1) para las transferencias IN Bulk/Interrupt
  17. #define USB_EP1_RX_ENABLE  USB_ENABLE_BULK    // Activa EP1(EndPoint1) para las transferencias OUT Bulk/Interrupt
  18. #define USB_EP1_TX_SIZE 8                  // Tamaño reservado para el Buffer Tx EndPoint1
  19. #define USB_EP1_RX_SIZE 8                  // Tamaño reservado para el Buffer Rx EndPoint1 
  20. #include <pic18_usb.h>
  21. #include <hid_analog2.c>                 // Configuración del USB y los descriptores para este dispositivo
  22. #include <usb.c>                           // Handles usb ,tokens y descriptores 
  23. // Se declara el nombre a cada uno de los 8 elemento del vector recibe[8]   
  24. #define  dato0 recibe[0]                                  
  25. #define  dato1 recibe[1]                                   
  26. #define  dato2 recibe[2]                                  
  27. #define  dato3 recibe[3]
  28. #define  dato4 recibe[4]
  29. #define  dato5 recibe[5]
  30. #define  dato6 recibe[6]
  31. #define  dato7 recibe[7] 
  32. // Se declara el nombre a cada uno de los 8 elemento del vector envia[8], enviar_n   
  33. #define  enviar_0 envia[0]                                    
  34. #define  enviar_1 envia[1]                                   
  35. #define  enviar_2 envia[2]                         
  36. #define  enviar_3 envia[3]                                  
  37. #define  enviar_4 envia[4]
  38. #define  enviar_5 envia[5]
  39. #define  enviar_6 envia[6]
  40. #define  enviar_7 envia[7] 
  41. #use fast_io(A)          // LATA=0xF89  PORTA=0xF80, 5 I/O pins
  42. #use fast_io(B)            // LATB=0xF8A  PORTB=0xF81, 4 I/O pins
  43. #use fast_io(C)            // LATC=0xF8B  PORTC=0xF82, 8 I/O pins 
  44. #byte ptoa = 0xf80#byte ptob = 0xf81
  45. #byte ptoc = 0xf82 
  46. #byte lata = 0xf89
  47. #byte latb = 0xf8a
  48. #byte latc = 0xf8b 
  49. #bit ra0 = 0xf89.0         // D+ de USB
  50. #bit ra1 = 0xf89.1         // D- de USB                           
  51. // ra3 es MCLR                           
  52. // ra4 y ra5 XTAL 12MHz
  53. #bit rb6 = 0xf8a.6         // rb6 salida LED de conexión establecida
  54. #bit rb7 = 0xf8a.7         // rb7 salida LED de actividad 
  55. #bit rc3 = 0xf82.3         // Sensor Luz con LED Blanco
  56. #bit rc5 = 0xf82.5         // Botón para iniciar envío de datos a una PC
  57. #bit rc6 = 0xf82.6         // Sensor Voltaje#bit rc7 = 0xf82.7         
  58. // Sensor Temperatura  int8 recibe[8];           
  59. // Declaramos la variable recibe de 8 bytes
  60. //int info0 = 0, info1, info2, info3, info4, info5, info6, info7;
  61. int8 envia[8];             // Declaramos la variable envia de 8 bytes
  62. int info[8] = {0,0,0,0,0,0,0,0};
  63. int i, j, volts = 0, tempe = 0, luz = 0;
  64. int volts_ant, tempe_ant, luz_ant;
  65. int1 flag = 0, flag2 = 0;long k = 0; 
  66. #int_timer0void actividad(void) {
  67. i++;
  68. k++;
  69. if (i >= 190) {
  70. rb7++;                     // LED de actividadi = 0;
  71. } 
  72. if (k >= 1500) {
  73. flag2 = 1;
  74. k = 0;
  75. } 
  76. set_timer0(0);
  77.  
  78. } 
  79. void ini(void) {
  80. enable_interrupts(global);
  81. disable_interrupts(int_timer0);
  82. setup_timer_0(t0_internal | t0_div_1); 
  83. setup_adc(adc_clock_internal);
  84. setup_adc_ports(sAN7 |sAN8 | sAN9 | vss_vdd); 
  85. set_tris_a(0b11101111);       // XTAL, D+, D-, MCLRset_tris_b(0b00001111);       
  86. // rb6 Enumerado, rb7 LED de actividadset_tris_c(0b11101000);       
  87. // rc3, rc6 y rc7 entradas analogicas. 
  88. usb_init();                  // Inicializa USB
  89. delay_ms(100);
  90. ptoa = 0x00, ptob = 0x00, ptoc = 0xbf;
  91. set_timer0(0);
  92. } 
  93.  
  94. void main(void) {
  95. ini();
  96. delay_ms(100); 
  97. usb_task();                  ///habilita USB
  98. usb_wait_for_enumeration();  ///Espera hasta que la PC reconozca este dispositivo
  99. rb6 = 1;
  100. enable_interrupts(int_timer0); 
  101. while(true) { 
  102. if(usb_kbhit(1)) {            // Se reciben dati[0,2,4,6,8,10,12] de una sola vez
  103. usb_get_packet(1, recibe, 8);
  104. info[0] = dato0;
  105. info[1] = dato1;
  106. info[2] = dato2;
  107. info[3] = dato3;
  108. info[4] = dato4;
  109. info[5] = dato5;
  110. info[6] = dato6;
  111. info[7] = dato7;
  112. delay_us(10);
  113. flag = 1;
  114. } 
  115. if (flag == 1) {                // Se ha recibido un MSG USB válido
  116. if (info[2] == 49) {            // Verificar si infa[2] == 49, indica petición de informe
  117. flag = 0;
  118. goto DISPARO;
  119. }flag = 0;
  120. } 
  121. if (rc5 == 0) {
  122. DISPARO:set_adc_channel(7);             // Prepara AN8 para leer Votaje
  123. luz = read_adc();
  124. delay_us(50);
  125. set_adc_channel(8);             // Prepara AN8 para leer Votaje
  126. volts = read_adc();
  127. delay_us(50);
  128. set_adc_channel(9);             // Prepara AN9 para leer Temperatura
  129. tempe = read_adc();
  130. delay_us(50); 
  131. enviar_0 = 255;
  132. enviar_1 = volts;
  133. enviar_2 = 255;
  134. enviar_3 = Tempe;
  135. enviar_4 = 255;
  136. enviar_5 = luz;
  137. enviar_6 = 255;
  138. enviar_7 = 255;
  139. //usb_put_packet(int8 endpoint, int8 * ptr, unsigned int16 len, USB_DTS_BIT tgl)
  140. usb_put_packet(1, envia, 8, usb_dts_toggle); 
  141. do {
  142. delay_us(50);
  143. j++;
  144. } while (rc5 == 0);
  145. } 
  146. if (flag2 == 1) {             // Monitorea sensores en forma automática
  147. set_adc_channel(7);             // Prepara AN8 para leer Votaje
  148. luz = read_adc();
  149. delay_us(50);
  150. set_adc_channel(8);             // Prepara AN8 para leer Votaje
  151. volts = read_adc();
  152. delay_us(50);
  153. set_adc_channel(9);             // Prepara AN9 para leer Temperatura
  154. tempe = read_adc();
  155. delay_us(50); 
  156. if (luz != luz_ant) {
  157. luz_ant = luz;
  158. flag2 = 0;
  159. goto DISPARO;
  160. } 
  161. if (volts != volts_ant) {
  162. volts_ant = volts;
  163. flag2 = 0;
  164. goto DISPARO;
  165. } 
  166. if (tempe != tempe_ant) {
  167. tempe_ant = tempe;
  168. flag2 = 0;
  169. goto DISPARO;
  170. }flag2 = 0;
  171. } delay_us(100);
  172. }
  173. } 


 


GAMBAS
  1.  
  2. ' Gambas class file
  3.  
  4. Public Const VendorID As Integer = 6019           '0x1783
  5. Public Const ProductID As Integer = 2003          '0x07D3
  6. Public BufferOut As New Integer[32]
  7. Public BufferIn As New Integer[32]
  8. Public usb_Bit As New Integer[32]
  9. Public usb_B0 As Short
  10. Public usb_B1 As Short
  11. Public usb_B2 As Short
  12. Public usb_B3 As Short
  13. Public usb_B4 As Short
  14. Public usb_B5 As Short
  15. Public usb_B6 As Short
  16. Public usb_B7 As Short
  17. Public usb_B8 As Short
  18. Public usb_B9 As Short
  19. Public usb_B10 As Short
  20. Public usb_B11 As Short
  21. Public usb_B12 As Short
  22. Public usb_B13 As Short
  23. Public usb_B14 As Short
  24. Public usb_B15 As Short
  25. Public usb_B16 As Short
  26. Public usb_B17 As Short
  27. Public usb_B18 As Short
  28. Public usb_B19 As Short
  29. Public usb_B20 As Short
  30. Public usb_B21 As Short
  31. Public usb_B22 As Short
  32. Public usb_B23 As Short
  33. Public usb_B24 As Short
  34. Public usb_B25 As Short
  35. Public usb_B26 As Short
  36. Public usb_B27 As Short
  37. Public usb_B28 As Short
  38. Public usb_B29 As Short
  39. Public usb_B30 As Short
  40. Public usb_B31 As Short
  41.  
  42. Public puerto_usb As String
  43. Public usb_insertado As Process
  44.  
  45.  
  46.  
  47. Public Sub cmdMonitor_Click()
  48.  
  49. For N = 0 To 31
  50. BufferOut[N] = 255
  51.  
  52. BufferOut[0] = 0
  53. BufferOut[3] = 49               ' este es el Disparador para pedir datos al PIC18
  54.  
  55. WriteSomeData()
  56.  
  57.  
  58. Public Sub Form_Open()
  59. 'On Error Resume Next
  60. ' no quitar!
  61. 'ConnectToHID (Me.hwnd)
  62. txtConectar.Text = "No"
  63. cmdConectar.Enabled = True
  64. Timer1.Enabled = True
  65. Timer1.Delay = 1000
  66. Me.Left = 1200
  67. Me.Top = 100
  68.  
  69.  
  70. Public Sub cmdConectar_Click()
  71.  
  72. lblvid.Text = VendorID
  73. lblPid.Text = ProductID
  74. txtConectar.Text = "SI"
  75. cmdConectar.Enabled = False
  76. puerto_usb = txtPuertoS.Text
  77. Try usb_insertado = Exec ["cat", puerto_usb] For Read Write As "Display"
  78.  
  79.  
  80. Public Sub Form_Close()
  81.  
  82. lblVid.Text = "NO VID"
  83. lblPid.Text = "NO PID"
  84.  
  85.  
  86.  
  87. Public Sub Display_Read()
  88.  
  89. txtDatos.Text = ""
  90.  
  91. ' El primer byte es el ID del reporte, ej. BufferIn(0)
  92. ' los demás bytes son los datos del microcontrolador
  93. ' Los valores se reciben en DECIMAL
  94.  
  95. ' Leer los nuevos datos del Display
  96. Read #usb_insertado, usb_B0
  97. Read #usb_insertado, usb_B1
  98. Read #usb_insertado, usb_B2
  99. Read #usb_insertado, usb_B3
  100. Read #usb_insertado, usb_B4
  101. Read #usb_insertado, usb_B5
  102. Read #usb_insertado, usb_B6
  103. Read #usb_insertado, usb_B7
  104. Read #usb_insertado, usb_B8
  105. Read #usb_insertado, usb_B9
  106. Read #usb_insertado, usb_B10
  107. Read #usb_insertado, usb_B11
  108. Read #usb_insertado, usb_B12
  109. Read #usb_insertado, usb_B13
  110. Read #usb_insertado, usb_B14
  111. Read #usb_insertado, usb_B15
  112. Read #usb_insertado, usb_B16
  113. Read #usb_insertado, usb_B17
  114. Read #usb_insertado, usb_B18
  115. Read #usb_insertado, usb_B19
  116. Read #usb_insertado, usb_B20
  117. Read #usb_insertado, usb_B21
  118. Read #usb_insertado, usb_B22
  119. Read #usb_insertado, usb_B23
  120. Read #usb_insertado, usb_B24
  121. Read #usb_insertado, usb_B25
  122. Read #usb_insertado, usb_B26
  123. Read #usb_insertado, usb_B27
  124. Read #usb_insertado, usb_B28
  125. Read #usb_insertado, usb_B29
  126. Read #usb_insertado, usb_B30
  127. Read #usb_insertado, usb_B31
  128.  
  129. ' Distribuir los datos leidos en las acciones correspondientes
  130.  
  131. BufferIn[0] = usb_B0
  132. BufferIn[1] = usb_B1
  133. BufferIn[2] = usb_B2
  134. BufferIn[3] = usb_B3
  135. BufferIn[4] = usb_B4
  136. BufferIn[5] = usb_B5
  137. BufferIn[6] = usb_B6
  138. BufferIn[7] = usb_B7
  139. BufferIn[8] = usb_B8
  140. BufferIn[9] = usb_B9
  141. BufferIn[10] = usb_B10
  142. BufferIn[11] = usb_B11
  143. BufferIn[12] = usb_B12
  144. BufferIn[13] = usb_B13
  145. BufferIn[14] = usb_B14
  146. BufferIn[15] = usb_B15
  147. BufferIn[16] = usb_B16
  148. BufferIn[17] = usb_B17
  149. BufferIn[18] = usb_B18
  150. BufferIn[19] = usb_B19
  151. BufferIn[20] = usb_B20
  152. BufferIn[21] = usb_B21
  153. BufferIn[22] = usb_B22
  154. BufferIn[23] = usb_B23
  155. BufferIn[24] = usb_B24
  156. BufferIn[25] = usb_B25
  157. BufferIn[26] = usb_B26
  158. BufferIn[27] = usb_B27
  159. BufferIn[28] = usb_B28
  160. BufferIn[29] = usb_B29
  161. BufferIn[30] = usb_B30
  162. BufferIn[31] = usb_B31
  163.  
  164. For Mm = 0 To 15
  165. txtDatos.Text = txtDatos.Text & "    " & BufferIn[Mm]
  166.  
  167. txtDatos.Text &= Chr$(13)
  168.  
  169. For Mm = 16 To 31
  170. txtDatos.Text = txtDatos.Text & "    " & BufferIn[Mm]
  171.  
  172. sldLuz.Value = Abs(BufferIn[22])      ' Luz
  173. sldVolts.Value = Abs(BufferIn[6])      ' Voltaje
  174. sldTempe.Value = Abs(BufferIn[14])      ' Temperatura
  175.  
  176. txtDatos.Text = txtDatos.Text & Chr$(13)
  177.  
  178. For Mm = 0 To 31
  179. BufferIn[Mm] = 0
  180.  
  181.  
  182. Public Sub WriteSomeData()
  183. 'On Error Resume Next
  184. BufferOut[0] = 0   ' El primer byte es siempre el REPORTE ID
  185. 'For Mm = 0 To 7
  186. ' Escribe los datos, sin olvidar pasar el arreglo completo
  187. Try Exec ["outb", puerto_usb, BufferOut]
  188. 'Next
  189. txtDatos2.Text &= Str$(BufferOut) & Chr$(13) & Str$(BufferIn)
  190.  
  191.  
  192. Public Sub cmdBorrar_Click()
  193. txtDatos.Text = ""
  194.  
  195.  
  196. Public Sub Timer1_Timer()
  197. If cmdVivo.Background = Color.Green Then
  198. cmdVivo.Background = Color.Gray
  199. cmdVivo.Background = Color.Green
  200.  
  201.  
  202. Public Sub cmdSalir_Click()
  203.  
  204.  



Es mejor saber un poco de todo, que todo de muy poco. Lo primero, garantiza la supervivencia humana.
    ¡Gracias!


Mensajes en este tema
Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 23-12-2020, 00:17
RE: Puerto Paralelo y Gambas3 - por jguardon - 23-12-2020, 14:09
RE: Puerto Paralelo y Gambas3 - por AlfredoSC - 23-12-2020, 22:21
RE: Puerto Paralelo y Gambas3 - por jguardon - 23-12-2020, 23:36
RE: Puerto Paralelo y Gambas3 - por AlfredoSC - 24-12-2020, 05:07
RE: Puerto Paralelo y Gambas3 - por jguardon - 24-12-2020, 18:56
RE: Puerto Paralelo y Gambas3 - por AlfredoSC - 28-12-2020, 19:56
RE: Puerto Paralelo y Gambas3 - por jguardon - 29-12-2020, 23:10
RE: Puerto Paralelo y Gambas3 - por AlfredoSC - 29-12-2020, 23:38
RE: Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 30-12-2020, 01:03
RE: Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 08-01-2021, 21:53
RE: Puerto Paralelo y Gambas3 + USB - por jguardon - 09-01-2021, 13:50
RE: Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 09-01-2021, 20:38
RE: Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 09-01-2021, 22:58
RE: Puerto Paralelo y Gambas3 + USB - por jguardon - 17-01-2021, 13:02
RE: Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 17-01-2021, 20:01
RE: Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 18-01-2021, 01:18
RE: Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 20-02-2021, 03:41
RE: Puerto Paralelo y Gambas3 + USB - por tincho - 22-02-2021, 15:17
RE: Puerto Paralelo y Gambas3 + USB - por jguardon - 22-02-2021, 22:17
RE: Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 25-02-2021, 05:29
RE: Puerto Paralelo y Gambas3 + USB - por AlfredoSC - 25-02-2021, 23:25
RE: Puerto Paralelo y Gambas3 + USB - por tincho - 05-03-2021, 00:55

Posibles temas similares…
Tema / Autor Respuestas Vistas Último mensaje

Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)