Autor Tema: Bluetooth HC-06 y PIC  (Leído 3368 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado jesusm

  • PIC10
  • *
  • Mensajes: 7
Bluetooth HC-06 y PIC
« en: 15 de Julio de 2018, 11:13:46 »
Hola! Estoy iniciandome en este mundo. Estoy realizando un ejemplito con 4 leds y una aplicación con 4 botones que encienden el led respectivo. La aplicación manda el caracter a, A, b, B segun el boton pulsado. Intento leer la letra pero parece como si hubiera un overflow. En el presente código si pulso el botón 1 y 2 activa el Led conectado a PIN_D3. Si pulso cualquier otro botón no ocurre nada. No entiendo lo que pasa....

Código: C
  1. #include <16F877A.h>
  2.  
  3. #FUSES XT, NOWDT
  4. #use delay(crystal=4MHz)
  5. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N)  
  6. char dato;
  7.  
  8. void main ()
  9. {
  10.    SET_TRIS_D (0b00000000);
  11.    OUTPUT_D (0b00000000);
  12.    
  13.    while (true)
  14.    {
  15.       if (kbhit())
  16.       {
  17.          dato = getchar();      
  18.          if (dato == 2)
  19.          {
  20.             Output_high (PIN_D3);
  21.             delay_ms (1000);
  22.             Output_low (PIN_D3);
  23.          }
  24.          if (dato == 'A')
  25.          {
  26.             Output_high (PIN_D2);
  27.             delay_ms (1000);
  28.             Output_low (PIN_D2);
  29.          }
  30.          if (dato == 'b')
  31.          {
  32.             Output_high (PIN_D1);
  33.             delay_ms (1000);
  34.             Output_low (PIN_D1);
  35.          }
  36.          if (dato == 'B')
  37.          {
  38.             Output_high (PIN_D0);
  39.             delay_ms (1000);
  40.             Output_low (PIN_D0);
  41.          }
  42.       }
  43.    }
  44. }

Las conexiones son directas, incluso probé conectando al RX un divisor de tensión 5V-->3.3V.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Bluetooth HC-06 y PIC
« Respuesta #1 en: 16 de Julio de 2018, 09:56:13 »
Recepcion de datos y delays van bastante mal..

Agregale ERRORS al use RS232

Código: C
  1. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N, ERRORS)
Asi cuando detecta un error ( como el de sobreescritura), directamente se encarga el codigo dado por el compilador de borrarlo.

Pero tenes que partir de que si usas alguna recepcion de datos, que sea por interrupcion si no queres tener problemas.

Desconectado jesusm

  • PIC10
  • *
  • Mensajes: 7
Re:Bluetooth HC-06 y PIC
« Respuesta #2 en: 16 de Julio de 2018, 11:54:57 »
Lo primero agradecer tu tiempo por darme respuesta. Como sería el código para solo un led que responde ante un botón (envío de 'a')? No controlo muy bien las interrupciones...

Muchas gracias de antemano

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Bluetooth HC-06 y PIC
« Respuesta #3 en: 16 de Julio de 2018, 13:47:41 »
Algo asi

Código: C
  1. #include <16F877A.h>
  2.  
  3. #FUSES XT, NOWDT
  4. #use delay(crystal=4MHz)
  5. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N, ERRORS)  
  6.  
  7. volatile char dato;
  8.  
  9. #int_rda
  10. void serial_isr() {    //Nuestra funcion de interrupcion de la UART, dada por el #INT_RDA de antes,
  11.  
  12.   if(kbhit()){          // El KBHIT no es necesario, ya que si entra aca es por que llego algo si o si, pero se lo dejo por las dudas
  13.     dato=getc();
  14.   }
  15. }
  16.  
  17. void main ()
  18. {
  19.    set_tris_d(0b00000000);
  20.    output_d(0b00000000);
  21.  
  22.    enable_interrupts(int_rda);      //Habilitamos la interrupcion de la UART
  23.    enable_interrupts(global);       // Habilitamos las interrupciones globales
  24.    
  25.    while (true)
  26.    {
  27.       if (dato!=0)         // Lego algo ?
  28.       {
  29.          if (dato == 'a')
  30.          {
  31.             output_toggle(PIN_D3);
  32.          }
  33.          dato = 0;         // Para que no vuelva a entrar lo pongo en 0 como si no hubiera recibido nada.
  34.       }
  35.    }
  36. }


Si usas el set_tris ... entonces usa USE FAST_IO(D) sino no posee sentido, al no declararlo como FAST_IO en CCS, el mismo compilador te lo pasa a entrada o salida al pin, segun vos uses input o output.

Desconectado jesusm

  • PIC10
  • *
  • Mensajes: 7
Re:Bluetooth HC-06 y PIC
« Respuesta #4 en: 16 de Julio de 2018, 15:04:27 »
Te agradezco mucho la respuesta. Voy a comprar los condensadores de 22pF y probar en una protoboard vaya que sea culpa de la placa ésta (https://es.aliexpress.com/item/PIC16F877A-PIC-Minimum-System-Development-Board-JTAG-ICSP-Program-Emulator/32746512220.html?aff_platform=aaf&cpt=1531763885536&sk=vFUVbqR&aff_trace_key=1a27530edcb440fcbd6b2429395e573b-1531763885536-04923-vFUVbqR&terminal_id=b5f4bb5b3f6f44c6a0198e650aab84fb), también pediré un HC-05 por probar.
El código tiene muy buena pinta, pero en mi caso solo le echa cuenta si el dato == 254. Mando una 'a', 'A, 'b' y 'B' y en la condicion si dato==254 entra para todas estas letras.

Muchas gracias

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Bluetooth HC-06 y PIC
« Respuesta #5 en: 16 de Julio de 2018, 21:26:23 »
El código tiene muy buena pinta, pero en mi caso solo le echa cuenta si el dato == 254. Mando una 'a', 'A, 'b' y 'B' y en la condicion si dato==254 entra para todas estas letras.

Raro, seguramente este mal seleccionado el baudrate, deberias probar con una PC primero, con un conversor TTL-UART , asi ver que es lo que te envia el HC-06

Desconectado jesusm

  • PIC10
  • *
  • Mensajes: 7
Re:Bluetooth HC-06 y PIC
« Respuesta #6 en: 17 de Julio de 2018, 14:42:06 »
Como sería posible recibir los datos en una consola del PC?

Saludos

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Bluetooth HC-06 y PIC
« Respuesta #7 en: 17 de Julio de 2018, 19:06:11 »
Lo mas facil y es util tener es algo como esto:

https://naylampmechatronics.com/335-large_default/modulo-cp2102-conversor-usb-a-ttl.jpg

Lo enchufas al USB y te permite conectarlo a la UART del PIC o del Bluetooth


 

anything