PIC + Bluetooth + Celular (con pic basic pro) detallado

Hola Amigos. Estoy enfrascado en este proyecto básico y me he trabado en un punto que debe ser cosa de nada pero no logro encontrar el error, ATENCION moderadores, abro un nuevo tema porque los que hay no son claros y en otros lenguajes y los que usamos PBP quedamos fuera,

Este es el clásico hola mundo desde un celular a un pic mediante bluetooth.

Elementos empleados:

Pic 16F628A
Modulo Bluetooth HC-06 (en zócalo soldado)
Celular con android

Microcode Studio + Pic Basic Pro 3 (lenguaje del code)
App Inventor (lenguaje android)
Ic Prog (programador Pic)

Manos a la obra.

Utilizo un modulo HC-06 JY-MCU que viene en un zócalo con las tensiones niveladas entre 3.3 y 5v.
Así puedo trabajar todo con 5v.

scaled.php


a 9600 bps por defecto y configuracion 8N1 y pass 1234

aqui dejo la imagen del circuito en protoboad

PROTOB.jpg


de los circuitos que he encontrado colocan el RX del bluetooth en potencial alto con una R 10k, el circuito debe recibir de un celular un 100 reconocerlo y encender un led, y al recibir un 200 debe apagar el led.

La aplicación que uso en el cel es de un ejemplo funcional, del cual obtuve el código fuente de :
http://www.4shared.com/file/B4u8TDen/HC06.html

el cual se conecta al modulo bluetooth y al pulsar un botón envía un 100 para encender un led y un 200 para apagarlo. Pero se puede cambiar a una letra y recibir la misma por ejemplo enviar A y recibir "A"

Este es el código que uso para el pic:

Código:
'*******************************************************************************
' DEFINICIÓN DE FUSES Y OSILADOR
DEFINE OSC 4
'*******************************************************************************
CMCON = 7                     
TRISA = %00000000
TRISB = %00010010
'*******************************************************************************
' INICIALIZANDO USART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On               

LED var byte
'*******************************************************************************
PORTA = %00000000
PORTB = %00000000
'*******************************************************************************
pause 1000

PORTB.0 = 1                      '*************************
pause 1000                       'esto es para saber q el pic vive
PORTB.0 = 0                      '*************************
 
inicio:
    
Hserin 100,continuo,[led]

continuo:
if led = "A" then
PORTB.0 = 1
pause 500
endif

if led = "B" then
PORTB.0 = 0
pause 500
endif

goto inicio
END
por ultimo una imagen de los fuses al programar el pic

PROGRAM.jpg


Para cualquiera que se inicie con bluetooth pic y pbp esto le servira de mucho, pero claro, hay que solucionar el pequeño problema.

Utilicé también un hyperterminal de android https://play.google.com/store/apps/details?id=es.pymasde.blueterm&hl=es-419, con el que puedo conectarme al módulo para enviar los datos A y B.

Iniciando el ensayo:

-Alimento el circuito.
-El led del módulo parpadea esperando la conexión de otro dispositivo.
-El led azul del pic se enciende y apaga indicando que el pic esta vivo.
-Abro la app y pulso conectar.
-El led del modulo queda encendido y la app dice estar conectado.
-Pulso encender led.
-El Led enciende.
-Pulso apagar.
-El pic responde apagando el led.

Desde aquí una vez que el pic responde el limite es la imaginación de cada uno.

Gracias a Reyvilla, Xae y Ricbevi por sus aportes y ayuda.

Desde ya, muchas gracias.
 

Adjuntos

  • HC06.zip
    19.6 KB · Visitas: 370
Última edición por un moderador:
Según expones en tus pruebas con el emulador de terminal, me da la impresión de que estás enviando la cadena "100" en lugar del byte con valor 100.
Prueba a enviar el caracter ascii 'd' que se corresponde con el valor decimal 100.
 
Hola XAE revisado, intente enviar la letra d desde el hyperterm sin exito, se establece la coneccion pero no enciende el led. gracias otra idea?
 
Hola Amigos. estoy enfrascado en este proyecto basico y me he trabado en un punto que debe ser cosa de nada pero no logro encontrar el error, ATENCION moderadores, abro un nuevo tema porque los que hay no son claros y en otros lenguajes y los que usamos PBP quedamos fuera,

Hola...quita el tilde de WDT y tilda el PWRT al programar el pic ya que "el perro guardián" te puede estar interfiriendo con lo que quieres hacer.
Saludos.

Ric.
 
Última edición por un moderador:
Hola compañero Bertub, estuve revisando tu codigo y tienes varios detalles, una esta en la definición del TX con el HSERIN no es TCSTA es TXSTA. Lo otro como te comento el compañero xae envia un caracter como una letra y en el recepto tienes que colocarlo por
ejemplo: if led = "B" then...
Y una recomendación solo si se quiere yo lo hago para evitar equivocarme por que se me olvide hacerlo luego, es realizar todas las configuraciones dentro del mismo código. Te dejo una simulación básica que hice rápido de tu circuito y el cogido corregido.
PD : Esto fue como encontrar una aguja en un pajar... :LOL: ...Me recordo hace un tiempo un código que casi me saca canas y resulta que era un 1 mal ubicado.
Mucho éxito prueba y me avisas...:apreton:
 

Adjuntos

  • Bertub BLUETOOT.rar
    17.9 KB · Visitas: 1,437
Querido reyvilla sos un maestro, sabia que era un error de nada, pero error al fin. Ambas cosas tenia que cambiar. el TXSTA y enviar una de para recibir un 100, ahora a probar otras combinaciones como enviar una A y recibir A enviar un 100 recibir un 100 etc. muchas gracias cambiare el codigo en el post para quien lo siga


Les hago una consulta, ya tengo funcionando todo como lo anuncie en el foro, pero ahora se me presento la inquietud siguiente:

hice una app en app inventor android que conecta 2 celulares por bluetooth uno como esclavo y el otro como maestro, el esclavo debe presionar CONECTAR para sincronizar y el maestro queda siempre en espera del esclavo. Quiero hacer lo mismo con el modulo bluetooth HC-05 como esclavo, que mande constantemente la peticion a cuaqueir maestro que se le acerque, y uso el celular como maestro pero no logro que se encuentre, como sucede entre los celulares. La idea es que el modulo y el cel se conecten al aproximarse uno a otro sin tener q presionar nada.

debido a que el celular maestro funciona con otro celular (esclavo) imagino que el problema esta en el esclavo del modulo hc-05, tal vez las configuraciones de paridad o no se que, es en este punto que necesito tu ayuda o sugerencia.

muchas gracias
 
Última edición por un moderador:
Hola muy buen tutorial estaba buscando algo asi, bien detallado.
Me funciono de maravilla todo ok.
La pregunta que quiero plantear es si se puede cambiar el nombre:linvor y pass:1234 que viene por defecto en el modulo bluetot, vi tutoriales que lo hacen via pc con puerto lpt1 pero mi computadora no tiene ese puerto entonces supongo que se podria poner una cadena de comandos para que el pic configure estos datos al modulo bluetot lei por ahi que son comandos como:
AT+NAMEnombre : Cambia el nombre del dispositivo, por ejemplo AT+NAMEdispBT1 responde con OKsetname y ahora tendrá el nombre de dispBT1, el nombre es limitado a 20 caracteres.

AT+PINxxxx : Cambia el pin de seguridad de 4 digitos, podemos usar AT+PIN0000 para setear el pin a 0000, responde con OKsetPIN, por default viene configurado 1234.

AT+BAUDx : Modifica el baud rate del dispositivo, x puede tomar los siguientes valores

1———1200
2———2400
3———4800
4———9600 (Default)
5———19200
6———38400
7———57600
8———115200
9———230400
A———460800
B———921600
C———1382400

como se hace para que salgan los datos desde el pic?
HSEROUT?
 
Hola muy buen tutorial estaba buscando algo asi, bien detallado.
Me funciono de maravilla todo ok.
La pregunta que quiero plantear es si se puede cambiar el nombre:linvor y pass:1234 que viene por defecto en el modulo bluetot, vi tutoriales que lo hacen via pc con puerto lpt1 pero mi computadora no tiene ese puerto entonces supongo que se podria poner una cadena de comandos para que el pic configure estos datos al modulo bluetot lei por ahi que son comandos como:
AT+NAMEnombre : Cambia el nombre del dispositivo, por ejemplo AT+NAMEdispBT1 responde con OKsetname y ahora tendrá el nombre de dispBT1, el nombre es limitado a 20 caracteres.

AT+PINxxxx : Cambia el pin de seguridad de 4 digitos, podemos usar AT+PIN0000 para setear el pin a 0000, responde con OKsetPIN, por default viene configurado 1234.

AT+BAUDx : Modifica el baud rate del dispositivo, x puede tomar los siguientes valores

1———1200
2———2400
3———4800
4———9600 (Default)
5———19200
6———38400
7———57600
8———115200
9———230400
A———460800
B———921600
C———1382400

como se hace para que salgan los datos desde el pic?
HSEROUT?

Pues veras, no es el LPT1 el que se usa, sino el Serie, RS232, pero con niveles TTL, por lo que tendrás que conseguirte un conversor de niveles, o hacerlo con el MAX232.
También puedes programarlo con el PIC, con SerOut o HSerout, mandándole los comandos adecuados. No olvides que tienes que adecuar los niveles de tensión a 3,3 voltios para el RX del módulo Bluetooth.
 
Hola compañero Bertub, estuve revisando tu codigo y tienes varios detalles, una esta en la definición del TX con el HSERIN no es TCSTA es TXSTA. Lo otro como te comento el compañero xae envia un caracter como una letra y en el recepto tienes que colocarlo por
ejemplo: if led = "B" then...
Y una recomendación solo si se quiere yo lo hago para evitar equivocarme por que se me olvide hacerlo luego, es realizar todas las configuraciones dentro del mismo código. Te dejo una simulación básica que hice rápido de tu circuito y el cogido corregido.
PD : Esto fue como encontrar una aguja en un pajar... :LOL: ...Me recordo hace un tiempo un código que casi me saca canas y resulta que era un 1 mal ubicado.
Mucho éxito prueba y me avisas...:apreton:



Hola ami me funciona de maravilla pero como prodria aser para poner unos 4 led mas en el programa eh intentado poniendo otra variable que ejemplo: hSERIN 101,continuo,[led] y asi y de otras formas, me podrian ayudar.
 
Hola ami me funciona de maravilla pero como prodria aser para poner unos 4 led mas en el programa eh intentado poniendo otra variable que ejemplo: hSERIN 101,continuo,[led] y asi y de otras formas, me podrian ayudar.

Declara la variable tal que así:
LED var byte[5]

y si quieres meterlos en la misma instrucción pones:

hSERIN 100,continuo,[led(0),led(1),led(2),led(3),led(4)]; espera 100 mseg antes de saltar.
'si hay datos de entrada sigue por esta linea
...
....
goto inicio

continuo:' saltará a esta etiqueta si no hay datos de entrada
....
....
return
 
Hola Amigos. estoy enfrascado en este proyecto basico y me he trabado en un punto que debe ser cosa de nada pero no logro encontrar el error, ATENCION moderadores, abro un nuevo tema porque los que hay no son claros y en otros lenguajes y los que usamos PBP quedamos fuera,


Buena tarde amigo, me intereso este tema , me podrias dar ma informacion sobre (App Inventor (lenguaje android)) ya que la direccion de 4 share que dejaste ya no funciona, la idea es desarollar este tema y se nada de programar en android pero estoy decidido a aprender , muchas gracias por tu aporte
 
Última edición por un moderador:
buena tarde amigo me intereso es te tema , me podrias dar ma informacion sobre (App Inventor (lenguaje android)) ya que la direccion de 4 share que dejaste ya no funciona la idea es desarollar este tema y se nada de programar en android pero estoy decidido a aprender , muchas gracias por tu aporte

Ingresa a http://beta.appinventor.mit.edu/ esa es la unica pagina del MIT inventor, de alli se dara cuenta que no tienes los programas necesarios y te lleva a una guia de instalacion etc. ejemplos y demas. suerte
 
hola amigos me intereso mucho el proyecto queria saber si me pueden ayudar
estoy recien incursionando en el mundo de los pic y queria saber el hserin 100 especificamente cual es su funcion ademas el programa de android como se lo hace les agradeceria mucho su ayuda
 
hola amigos me intereso mucho el proyecto queria saber si me pueden ayudar
estoy recien incursionando en el mundo de los pic y queria saber el hserin 100 especificamente cual es su funcion ademas el programa de android como se lo hace les agradeceria mucho su ayuda

Hola, El mundo pic es emocionante, bienvenido, te recomiendo leas sobre hserin en el lenguaje que elegiste para programar, de poco te servira una explicacion de hserin aislada, el programa en android lo hice en AppInventor del MIT, los link estan mas arriba, te recomiendo empieces con encender un led Hola mundo y siguas, hay muchos tutoriales que estan muy buenos y entretenidos y haciendo pavadas vas aprendiendo y de pronto estas integrando todas ellas para hacer algo tuyo. espero te sirva la respuesta, si necesitas algo mas profundo tal vez te pueda ayudar.
 
¿Alguien me puede ayudar?Pues resulta que arme este circuito tal cual,es el mismo modulo Bluetooth con los parametros por default 9600 Baudios...etc.,y bueno mis resultados fue que todo marcha bien a 4 Mhz.Despues hice pruebas colocando un cristal de 20 Mhz,logicamente coloque en los fuses el cambio de configuracion en la cabecera @ device HS_OSC...DEFINE OSC 20...pero no responde solamente parpadea el led que coloco al inicio el compañero BERTUB,"para saber que esta vivo el pic".,si no me equivoco el detalle ha de estar aqui en esta parte de la cabecera:
' INICIALIZANDO USART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_SPBRG 25
DEFINE HSER_Clear On
¿Osea alguien sabe como quedaria la configuracion para el cristal de 20Mhz?
¿Y una pregunta mas el PIN RX del pic quedaria como entrada cierto?
 
¿O sea, alguien sabe como quedaría la configuración para el cristal de 20Mhz?
Y una pregunta más; ¿el PIN RX del pic quedaría como entrada cierto?
Si estás usando un PIC16F628A con PICBasic Pro, sería de esta forma:
Código:
@ Device PIC16F628A    ; Microcontrolador utilizado
; Palabra de configuración:
@ Device HS_OSC,WDT_OFF,PWRT_ON,BOD_OFF,LVP_OFF
;*******************************************************************************
Define OSC 20                ; Definir que se trabajará con 20MHz.
Y si, el pin Rx tiene que ser configurado como entrada.

Pero si usas las instrucciones SerIn, HSerin, SerOut, HSerOut, etcétera, las mismas se encargan de configurar los pines correspondientes como entradas o salidas.

Y la configuración del módulo USART sería así:
; Configuración USART: (9600bps @ 20MHz. 9615bps reales y 0.16% de error.)
Define HSER_SPBRG 81h
Define HSER_BAUD 9600
Define HSER_TXSTA 24h
Define HSER_RCSTA 90h
 
Mi duda es el Hserin 100 por qué ese valor es la velocidad, memoria o qué?
respecto al programa appinventor, si lo estaba haciendo pero solo me permite hacer la interfaz, lo q se muestra en el dispositivo el screen, pero cuando doy click para crear la progamacn en bloques no me sale la pantalla, sino se descarga un archivo.

Hola, la sintaxis de hserin es la siguiente

HSERIN {Timeout ,Label ,} [ Item { . . . }

Timeout y Label pueden ser incluídos en forma opcional para permitir al programa continuar si un carácter no es recibido dentro de un límite de tiempo . Timeout está especificado en unidades de 1 milisegundo .

En definitiva 100 es el tiempo en segundo para esperar una entrada

Utiliza este manual que a mi me guio siempre

http://www.todopic.com.ar/pbp_sp.html



espero te sirva



¿Osea alguien sabe como quedaria la configuracion para el cristal de 20Mhz? [/QUOTE dijo:
que programa usas para programar el pic?, yo uso el IcProg y alli cuando uso cristales de 20 coloco HS en la seleccion de oscilador porque por mas que lo indique en el codigo, al programar me hace cualquier cosa, tal vez como a vos que te parpadea el led y nada mas. a parte de las indicaciones que ya te dieron
 
Última edición:
Atrás
Arriba