PIC16F628A + Bluetooth HC-06 + Android

Estado
Cerrado para nuevas respuestas.
buenas un saludo :D

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. ...
 
Última edición:
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:

Código:
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í :D. Saludos
 
Me surge una duda :unsure:, ¿el modulo HC-06 que estás usando es de esos chinos que tienen integrados los pines conexión para conectarlo en el proto?.
 
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 .
 
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 :D

hasta ahi todo bien?=

depues leemos el dato ..
Código:
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..
 
bueno les comento que compre otro modulo bluetooth en este caso un HC 05 :D

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.
 
Última edición:
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
 
Es raro, ya que yo he utilizado un módulo similar (el mío, chino a más no poder) :unsure:, 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 :oops:), cuando lo tenga les doy alguna especificación extra (si tiene :rolleyes:) acerca de él.

Que bien que hayas dado con el problema. (y)
Saludos.
 
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:)
 
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.
 
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
 
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.
 
Estado
Cerrado para nuevas respuestas.
Atrás
Arriba