# PIC16F628A + Bluetooth HC-06 + Android



## gilmar gonzalez (Ago 28, 2014)

buenas  un saludo  

resulta que me he propuesto hacer un pequeño proyecto el cual  consiste  en  encender y apagar un  LED  por medio  de una aplicación en android  y un pic16f628a utilizando  el puerto serial , conectado a un modulo bluetooth hc 06 .

la programación del pic  la  hice en lenguaje C  en el programa  CCS  , luego  hice el  circuito   en proteus    para poder simular  el modulo bluetooth utilizo  el terminal virtual.

bueno el codigo anda bien  no hay errores en la programación  lo  hice de tal manera que al enviar   un carácter =a  el led encienda  y al enviar un carácter=b el led se apague .


en el proteus funciona de maravilla  el problema esta en que al implementarlo físicamente no  funciona   :-[  e utilizado 3 app diferentes :


bluetooth terminal 
bluetooth spp
s2 therminal 

ninguna me ha funcionado
al parecer  el modulo bluetooth se conecta   correctamente  pero es como si  el pic no reconociera  el dato que  estoy enviando .


en general:

1)  el pic lo  alimente a 5v  ,  el modulo tiene  un regulador interno a 3v por lo cual no hay problema en alimentarlo a 5v igual  
2)  no es necesario acondicionar señales   a excepto  la señal  RX del  bluetooth  que  use un divisor de tensión para que llegue únicamente 3v ,  el pic  reconoce 3v como estado alto por ello basta con conectar directamente  el TX del bluetooth al RX del pic.
3)  el pic trabaja perfectamente  ya que puse un led   en el pin b5   que se prende y apaga al inicio de la rutina luego espera  la señal del bluetooth.

bueno y por ultimo  aqui el código  que es funcional  ya lo probé  en proteus desde el virtual terminal.


#include <main.h>
#use  delay(clock=4M)
#use  rs232(baud=9600,bits=8,parity=N,xmit=pin_b2,rcv=pin_b1)
void main()
{
  char dato;
  delay_ms(500);
  output_high(pin_b5);
  delay_ms(500);
  output_low(pin_b5);


   while(TRUE)
   {  


      if (kbhit())

        dato=getc ();

      if ( dato=='a')
      output_high(pin_b5);

      if ( dato=='b')
      output_low(pin_b5);
   }

}

como se dan cuenta el código es muy sencillo  solo quiero partir de este punto desde  encender y apagar un led via bluetooth para luego implementar  mas instrucciones y hacer algo mas complejo.

no se cual sea la razon por la cual el pic no este recibiendo la señal  si el circuito lo conecte tal cual lo hice en proteus.

algo en lo que tengo dudas es en la velocidad de transmisión  de datos , se supone que  en el modulo viene por defecto en 9600 baudios pero quise salir de la duda por que no estaba muy seguro  y   tantie  con algunas que me permite el oscilador que tengo de 4MHZ.


2400
4800
9600
19200

baudios  


de hay en adelante me di cuenta que necesitaba un oscilador  de mayor frecuencia. :-\\
asi que no pude salir por completo de la duda.
 aun asi la aplicación logra conectarse  y enviar el carácter pero  el pic parece que no  reconociera el dato.


si pudieran ayudarme se los agradecería 

hasta pronto. ...


----------



## 0002 (Ago 28, 2014)

Cuando utilizas la comunicación RS232 con micro y un módulo bluetooth, al enviar un caracter por el enlace, el micro espera el ASCII de dicho caracter, es decir en vez de esperar recibir una "a", espera recibir 97 (que es el ASCII de la "a" minúscula), pudieras intentar esto:


```
if(dato==97){
   output_high(LED);
   }
      else if(dato==98){
      output_low(LED);
      }
         else if(dato!=97&&dato!=98){
         dato=0x00;
         }
```

A mi me funcionó así . Saludos


----------



## gilmar gonzalez (Ago 28, 2014)

claro  tanto utilizando  a  o 97 funciona  en proteus pero  al implementarlo en el circuito no funciona


----------



## 0002 (Ago 28, 2014)

Me surge una duda , ¿el modulo HC-06 que estás usando es de esos chinos que tienen integrados los pines conexión para conectarlo en el proto?.


----------



## gilmar gonzalez (Ago 28, 2014)

si asi es es de este  tipo  
http://anodas.lt/image/cache/data/b...ino-atmel_mlm-o-2636188463_042012-500x500.jpg


creo que  dañe el modulo  por que al principio no hice el divisor de tension      XD   no se que hacer si comprar otro  o no.


----------



## papirrin (Ago 28, 2014)

> creo que dañe el modulo por que al principio no hice el divisor de tension


lo mas seguro es que si,  XD


----------



## gilmar gonzalez (Ago 28, 2014)

no el modulo no esta dañado ,lo alimente  y uní el TX con el RX del modulo   y lo conecte a la aplicación   y al escribir una a , me devuelve una  a  es decir envía y recibe datos correctamente .


----------



## FLX (Ago 28, 2014)

mira la respuesta es sencilla pero lleva tiempo acostumbrarse a el manejo de datos  de CCS   ( creeme que me ha costado) 

bueno  en primera define tu variable que es la encargada de almacenar el dato recivido por el bluetooth    digamos que algo asi..

char data_in[2];

ya tenemos el dato  definido como un char.....     y te preguntaras por que el [2]   bueno cuando el  bluetooth envia la letra A   tambien envia un final de linea '/0'    por eso debes tener en cuenta que el char siempre sea un bit mas grande que  tu mensaje  

hasta ahi todo bien?=  

depues  leemos  el dato .. 

```
data_in[0]=getc;

if(data_in[0]=='A'){
output_high(led_rojo);

}

else if(data_in[0]=='B')
{
output_high(led_verde);
delay_ms(500);

}
```

y listo  el dato cae a la casilla cero de data_in    y puede ser   utilizada en una operacion if   while     switch  .. etc..


----------



## gilmar gonzalez (Ago 28, 2014)

bueno   les  comento que  compre otro modulo bluetooth  en este caso un HC 05 

tanto con la programación que  yo hice , como  con la programación que ustedes me colaboraron  funciono perfectamente.


en fin un modulo bluetooth echado a perder por no haber  acondicionado la señal  que envía el pic  hacia el  ,  recordar que el modulo bluetooth   tiene integrado un regulador de 3v pero eso no significa que  podamos  enviarle señales del voltaje que se nos de la gana  XD  .

la señal de envió de datos del bluetooth  no  se necesita acondicionar  ya que el pic reconoce 3v como estado lógico alto.

 de todas maneras sigo con la duda  si  haber hecho esta conexión mal fue suficiente para dañar el modulo o es un problema de fabrica ya  que   hice la prueba de  auto enviar un carácter y funciono correctamente.


gracias por su colaboración han sido de  gran ayuda.


----------



## papirrin (Ago 28, 2014)

> en fin un modulo bluetooth echado a perder por no haber acondicionado la señal que envía el pic hacia el ,



a mi me paso lo mismo, aunque este dañado, al modulo le funciona practicamente todo, pero no envia la señal de salida.
en cuanto tenga oportunidad tambien voy a comprar un HC-05 y lo cuidare mas XD


----------



## 0002 (Ago 29, 2014)

Es raro, ya que yo he utilizado un módulo similar (el mío, chino a más no poder) , conectado directamente a los pines TX y RX del micro (alimentado a 5V ambos), utilizando el hyperterminal del microcode, y la comunicación es sin problemas. 

En este momento no lo tengo a la mano, pero se me ocurre que tenga el divisor integrado (cosa que me ha ayudado en exceso ), cuando lo tenga les doy alguna especificación extra (si tiene ) acerca de él.

Que bien que hayas dado con el problema. 
Saludos.


----------



## oscaraen (Ene 16, 2015)

señores, estuve cacharriando y leyendo la hoja de datos del modulo bluetooth hc-06 chino, y lo conecte a 5v, de hecho el regulador interno maneja hasta 6, para recibir correctamete los datos se requiere en el pin 3 (txd) colocar una resistencia de pull up (de 10kΩ me funciona), hice un proyecto de manejar un carro desde android por bluetooth y tuve esos problemas de recepcion, y confirme que recibia imprimiendo en un puerto, el dato recibido en el buffer de recepcion, sin la resistencia es aleatorio el valor que tomaba, con la resistencia, se recibia el valor correctamente.

para recibir en ascci solo basta con preguntar
if(dato_recibido=='a')....
la letra entre comillas el compilador lo toma como ascci

ojala no hallan tirado a la basura los modulos 'quemados', en realidad no lo estaban


----------



## Cristhiancdbc (Ene 25, 2015)

tienes el diseño que montaste? he leído que en el módulo HC-06 el TX es el pin que recibe desde el cel y el RX que envía al cel ... Por ende, el TX del módulo de bluetooth debe ir al RX definido en el PIC y el RX del módulo bluetooth al TX del PIC. En el datasheet al parecer no está bien definido esto. Intenta y nos comentas. Saludos.


----------



## proteus7 (Ene 25, 2015)

pues yo tengo un hc05 y lo conecto directamente  al pic16f628 y funciona de maravilla esta en asm lo probe en mi matriz de leds  con pic16f628 de 8x80 y funcona sin problemas.  tengo un codigo en el cual muestra en 8 leds todo lo que se le envia por el celular si alguien le sirve avise y lo subo


----------



## Cristhiancdbc (Ene 25, 2015)

Exactamente. El HC-05 y el 06 varían con respecto a lo que te comento.


----------



## SKYFALL (Mar 13, 2015)

Pues la verdad todo eso que han comentado sobre aplicaciones android y modulos bluetooth esta super interesante, yo les agradeceria a todos que subieran sus planos y sus codigos para experimentar al respecto.


----------

