PIC16F628A y comunicación RS-232 (Para simular Bluetooth)

#1
Hola a todos he estado buscando por aqui en el buscador pero quizas no encuentro las palabras adecuadas he encontrado de otros lenguajes pero no de C.

bueno les cuento puedo mandar mensajes del pic16f628a al hiperterminal simulado en proteus(usando #use rs232).
(la idea es simular la coneccion de bluetooth)


la verdad no creo que sea tan complicado. pero no encuentro las variables , ni la sintaxis.

la verdad vengo de ensamblador y me estoy pasando al C y por eso me a costado un poco.

bueno la idea es que yo pueda mandar un letra o un numero. y cuando el pic la resiva este me active una de las salidas del microcontrolador(encender un led).

eso seria todo. he leido por ahi que el bluetooth se puede simular perfectamente con los protocolos y configuracion del RS232 , asi que no creo que tenga problemas despues poniendole un RN-42 u otro similar.

por favor si me cierran el post al menos orientenme algo de ante manos gracias.(y)
 
#2
Hola.

No mencionas con que compilador pero al usar #use rs232, supongo que es el CCS.
Se más específico en la busqueda como CCS puerto serie, igual con bluetooth... pasa que el compilador CCS tiene un C algo modificado por lo que no es compatible con otros.

Ahora, puedes buscar (RS232 I/O) en el archivo de ayuda del CCS, ahí se muestran las funciones más usadas con ese puerto de comunicación; ya sea para enviar o recibir un dato o cartacter como cadenas de datos y de acuerdo a la necesidad el código puede tener cierta complejidad.

Saludos.
 
#3
Hola.

No mencionas con que compilador pero al usar #use rs232, supongo que es el CCS.
Se más específico en la busqueda como CCS puerto serie, igual con bluetooth... pasa que el compilador CCS tiene un C algo modificado por lo que no es compatible con otros.

Ahora, puedes buscar (RS232 I/O) en el archivo de ayuda del CCS, ahí se muestran las funciones más usadas con ese puerto de comunicación; ya sea para enviar o recibir un dato o cartacter como cadenas de datos y de acuerdo a la necesidad el código puede tener cierta complejidad.

Saludos.
hola gracias por tu tiempo. de verdad no sabia que habia dos tipos de lenguajes de C en microcontroladores.

estoy ocupando este lenguaje y este compilador ojala me puedan orientar un poco mas.

Sin título.jpg

PCWHD
 
Última edición:
#4
Al menos la mayoria de compiladores para PIC se basan en el estandar ANSI C (sintaxis) pero cada uno tiene ciertas modificaciones por lo que no son muy compatibles unos con otros.
El CCS se distingue por su propio modo de escritura y mayor cantidad de funciones o librerias... ésto tiene pro y contras pero depende de la complejidad de lo que se quiere programar y otros. Buena herramienta para el aprendíz.

Revisa el Manual de usuario del compilador PCW de CCS, es lo que hay en español.

Respecto al tema, para usar el puerto serie basta con:

- Declarar #USE RS232... Si los pines usados corresponden al USART por hardware (PIN_B1 y PIN_B2 en el 16F628), la comunicación se maneja por hardware de lo contrario es por software (ambos automático para el usuario).
- El envío de datos se puede hacer en cualquier línea dentro de main u otra funsion.. se utiliza putc(), putch(), printf()... tienen algunas diferencias.

Código:
...
putc(0);  // Dato del tipo numérico
putc('0'); // Dato o caracter ASCII.
printf("Hola Mundo"); // Envio de un cadena en string. Con printf() se puede modificar muchas cosas... revisa el Help del CCS.
...
- La recepción de datos es un caracter a la vez y se puede hacer manualmente usando las funciones kbhit() que verifica si hay un dato y getc() para obtener el dato o usando interrupción por recepción, éste último método solo funciona cuando el PIC utiliza el USART por hardware.

Código:
// Lectura simple 
char dato:;
...
if(kbhit()){  // Revisa si hay un dato en el buffer de recepción
   dato = getc(); // Lee el dato
   if(dato == '1')  // Compara
      output_high(PIN_B0); // y ejecuta una acción en respuesta
   else
      output_low(PIN_B0);
}
Con esos detalles ya puedes empezar practicando y luego simular bluetooth... practica!!.
Saludos.
 
#5
Al menos la mayoria de compiladores para PIC se basan en el estandar ANSI C (sintaxis) pero cada uno tiene ciertas modificaciones por lo que no son muy compatibles unos con otros.
El CCS se distingue por su propio modo de escritura y mayor cantidad de funciones o librerias... ésto tiene pro y contras pero depende de la complejidad de lo que se quiere programar y otros. Buena herramienta para el aprendíz.

Revisa el Manual de usuario del compilador PCW de CCS, es lo que hay en español.

Respecto al tema, para usar el puerto serie basta con:

- Declarar #USE RS232... Si los pines usados corresponden al USART por hardware (PIN_B1 y PIN_B2 en el 16F628), la comunicación se maneja por hardware de lo contrario es por software (ambos automático para el usuario).
- El envío de datos se puede hacer en cualquier línea dentro de main u otra funsion.. se utiliza putc(), putch(), printf()... tienen algunas diferencias.

Código:
...
putc(0);  // Dato del tipo numérico
putc('0'); // Dato o caracter ASCII.
printf("Hola Mundo"); // Envio de un cadena en string. Con printf() se puede modificar muchas cosas... revisa el Help del CCS.
...
- La recepción de datos es un caracter a la vez y se puede hacer manualmente usando las funciones kbhit() que verifica si hay un dato y getc() para obtener el dato o usando interrupción por recepción, éste último método solo funciona cuando el PIC utiliza el USART por hardware.

Código:
// Lectura simple 
char dato:;
...
if(kbhit()){  // Revisa si hay un dato en el buffer de recepción
   dato = getc(); // Lee el dato
   if(dato == '1')  // Compara
      output_high(PIN_B0); // y ejecuta una acción en respuesta
   else
      output_low(PIN_B0);
}
Con esos detalles ya puedes empezar practicando y luego simular bluetooth... practica!!.
Saludos.
te pasaste lo estoy leyendo el manual en español me da una idea de las intrucciones ahora a comenzar a juntar instrsucciones. el ultimo ejemplo con mi experiencia en programacion que igual es poca :), es como que me hablara y me dijiera que pasa en cada momento cuando lee el dato cuando lo compara etc... ahora vere como puedo enviar el dato por hyperterminal al PIC. pero muchas gracias por la ayuda. si tengo otra consulta ojala tengan tiempo m(y):aplauso:uchas gracias por todo. ire poniendo mi codigo y mi proteus para que vean que estoy haciendo.
 
#6
Me olvide, te puede ser de ayuda utilizar la opción PIC Wizard al crear un proyecto, éste sirve para configurar el hardware del PIC.
El manual no se de que año es pero sirve, actualmente el CCS tiene algunas cosas más.

Saludos
 
#7
Me olvide, te puede ser de ayuda utilizar la opción PIC Wizard al crear un proyecto, éste sirve para configurar el hardware del PIC.
El manual no se de que año es pero sirve, actualmente el CCS tiene algunas cosas más.

Saludos
muchas gracias con tu ayuda y leer un poco logre mi objetivo.

ahora no se si sera lo mismo hacer este proyecto en fisico con el modulo RN-42 que encontre en el mercado de mi pais. con el hyperterminal funciona perfectamente.

Código:
#include <16f628a.h>
#use delay (clock = 4M)
#use RS232 (baud = 9600, bits = 8, parity = N, xmit = pin_b2, rcv = pin_b1)

char dato;

void main()
{
      printf ("hola\r");
      delay_ms(1000);
      printf ("teclea la letra  a para encender y b para apagar el led");
      
      while(true)
inicio: 
      {
      
       dato = getc(); 
   
       if(dato == 'a')  // Compara
          output_high(PIN_B5); 
          
       if(dato == 'b')  // Compara
          output_low(PIN_B5); 
          
          goto inicio;
       }
}
gracias ByAxel.

este es mi codigo quizas no es tan bueno pero es mi primero en C lo dejo esta funcionando. ahora solo me quedan dudas.

¿supuestamente el bluethoot es casi lo mismo que el rs232 solo que en forma inalambrica, asi que debo conectarlos a los pines Rx t Tx de mi pic16f628a. (respetar los 3.7V)?.
 
Última edición:
#8
¿supuestamente el bluethoot es casi lo mismo que el rs232 solo que en forma inalambrica, asi que debo conectarlos a los pines Rx t Tx de mi pic16f628a. (respetar los 3.7V)?.
El módulo se encarga de todo respecto al protocolo/s que usa bluethoot, el único trabajo del PIC va a ser enviar/recivir datos utilizando el rs232 (su módulo USART).
Son necesarios 3 hilos (RX, TX y GND); RX del PIC al TX del módulo y TX del PIC al RX del módulo.

También es mejor que repetes el voltaje del módulo que son 3.3V (3.6V max. según la hoja de datos), el PIC igual a 3.3V ya que a 4Mhz no hay problema (ver especificaciones electricas en la hoja de datos).
Si no cumple en la práctica ya sería necesario 2 voltajes (5V para el PIC y 3.3 para el módulo) y adaptar de algún modo los niveles de tensión (con resistencias por ejemplo) en la línea de TX del PIC.

En el código, solo un detalle...
while(...) { ... } es un bucle y repite siempre (cuando la condición es verdadera) lo que esté dentro de sus llaves, no es necesario la instrucción GoTo que por cierto no es muy usado en C (sirve pero no es recomendable), C es programación estructurada... intenta con el tiempo no depender de Goto.

Saludos.
 
Última edición:
#9
hola de nuevo el programa en proteus funciona correctamente pero cuando trato de escribirlo en el pic sale un mensaje rojo que dice fail. nunca me habia salido eso.

sera algo del lenguaje C o algo que no programe con anterioridad.:confused:

read...ok

verify...ok

write....fail.

programan fail.png

¿alguna idea?:confused:
 
#10
mmm en el código falta la configuración de fuses... por defecto al parecer se ha establecido la memoria protegida... ahí en texto rojo "All Protect", en el texto sobre el aviso "Configuration" da clic, aparece una ventana para configurar manualmente.

Pero mejor desde el CCS #FUSES , probando que permita la escritura... primero sin código o borrando, luego con el código... revisa que no aparezca "All Protect".

Código:
#FUSES NOWDT
#FUSES NOMCLR
#FUSES NOBROWNOUT
#FUSES NOLVP
#FUSES NOPROTECT
 
#11
buenas, he logrado escribir en el microcontrolador sin ningun problema, el problema era en los ticket de configuracion.


pero con respecto a los fuses tambien tenias razon ahora estan configurados de mejor manera.

agreguo fotos por si alguien llega a tener el mismo problema que yo.

programado.png


el problema es que tenia el VDD pickit 3 con ticket no debe tener ningun ticket en esa parte.

program memory y eeprom data deben estar marcados.
 
#12
Hola he vuelto con mas informacion... ahora la simulacion a funcionado sin problemas.

pero en lo real he tenido un par de dramas. de hecho un dramon... no funciona el pic.

no se en que he fallado pero explico para ver si alguien me puede ayudar.

primero estoy usando de fuente el pickit 3 a 3.3VDC

Led naranja (lo use para poner otro pic con otro programa para verificar conecciones)
led rojo (el pic esta funcionando, para saber si esta vivo :))
led verde (para saber si el pickit 3 esta entregando energia)
led amarillo (es el comandado atravez de bluetooth)

este.jpg

bueno expongo el codigo que tengo...

Código:
#include <16f628a.h>
#use delay (clock = 4M)
#use RS232 (baud = 9600, bits = 8, parity = N, xmit = pin_b2, rcv = pin_b1)

#FUSES NOWDT
#FUSES NOMCLR
#FUSES NOBROWNOUT
#FUSES NOLVP
#FUSES NOPROTECT

char dato;

void main()
{     
      output_high(PIN_A1);
      printf ("sistema encendido\r");
      delay_ms(1000);
      printf ("teclea la letra a para encender y letra b para apagar\r");
      
      
      while(true)
 
      {
      
       dato = getc(); 
   
       if(dato == 'a')  
         { output_high(PIN_B5);
          
          printf ("\rLuz Encendida\r");
       
         }       
       if(dato == 'b') 
          { output_low(PIN_B5);  
          
            printf ("\rLuz Apagada\r"); 
          
          }
       }
}
lo simulo en proteus...

fucionando en proteus.png

funciona perfectamente enviando los datos por hyperterminal. y el led rojo prende para avisar de que esta activo.

escrito pero no funka.png

lo escribo en el pic16f628a

luego al protoboard.

20140330_014330.jpg

pruebo el circuito funcione correctamente con prender un led simple(funciona bien)use otro pic pero era para ver si el coneccionado estava bien.

una duda no pude hacerlo correr con el cristal interno de 4 M no se por que, lo he visto trabajar sin cristal y no se que me falta en la programacion.

bueno ahora hago el circuito al que le estoy poniendo corazon.

este.jpg

coneciones rn42 y pic16f628a.png

pero por alguna razon este programa no arranca. ni siquiera el led rojo prende y no se por que si en el proteus funciona perfectamente. al principio creo que tenia problemas con el CLR
pero no fue asi.

¿quizas me falta declarar algunas cosas que de verdad ignoro...?:confused:

ire a descanzar ya son las 2 AM ojala alguien tenga una idea. gracias por su tiempo.
 
#13
Hola.
Ya entrando al tema del módulo, no basta con enviar datos... es necesario enviar algunos comandos AT para su configuración... revisa aquí... es un tema de Neoteo pero también hay info en la web como en Microchip.

Con respecto al oscilador interno... en necesario cambiar en los fuses el tipo de oscilador por #FUSES INTRC_IO, también indicar en #use delay(internal=4MHz) y dentro de main setup_oscillator(OSC_4MHZ); ver el archivo 16F628A.h para más de detalles.

Una aplicación que te puede ayudar es el ( virtual serial port driver ), crea COM virtual... y puedes usarlo para ver como se comporta la simulación ( Proteus, requiere el componente COMPIM ) con el terminal de la PC por ejemplo... así descartar el PIC y centrarte en la configuración del módulo.

PD: Practica con recepción de cadenas de datos ( string ) es posible que que lo necesites, incluye la recepción por interrupción.

Saludos.
 
#14
Hola.
Ya entrando al tema del módulo, no basta con enviar datos... es necesario enviar algunos comandos AT para su configuración... revisa aquí... es un tema de Neoteo pero también hay info en la web como en Microchip.

Con respecto al oscilador interno... en necesario cambiar en los fuses el tipo de oscilador por #FUSES INTRC_IO, también indicar en #use delay(internal=4MHz) y dentro de main setup_oscillator(OSC_4MHZ); ver el archivo 16F628A.h para más de detalles.

Una aplicación que te puede ayudar es el ( virtual serial port driver ), crea COM virtual... y puedes usarlo para ver como se comporta la simulación ( Proteus, requiere el componente COMPIM ) con el terminal de la PC por ejemplo... así descartar el PIC y centrarte en la configuración del módulo.

PD: Practica con recepción de cadenas de datos ( string ) es posible que que lo necesites, incluye la recepción por interrupción.

Saludos.
hola, pero la duda es, el pic no deberia prender el led rojo por lo menos, por que cuando inicia deberia almenos encender el diodo piloto o no ?

void main()
{
output_high(PIN_A1); (deberia encender de todos modos)
printf ("sistema encendido\r");
delay_ms(1000);
printf ("teclea la letra a para encender y letra b para apagar\r");
o si no hay comunicacion por RX y TX tampoco comenzara el progarama interno del pic?.

por que la primera instruccion cuando energice es que prenda el led avisando que el programa esta corriendo ?.
 
#15
El led no estará conectado al revés no?.
Verificado eso, si no enciende el led es porque no ejecuta código -> le falta alimentación o señal de reloj.
Verifica si la alimentación está bien, pero con el pic funcionando solo, sin estar conectado al módulo RN42. Si solo no funciona, proba subiendo la tensión de alimentación a +5V (la hoja de datos dice que debería funcionar desde 3.0V, pero nunca se sabe).
A lo mejor el pickit3 no puede dar suficiente corriente para hacer funcionar al pic+RN42 + leds. Según veo en la guía de usuario, puede dar 30 mA, el RN42 puede consumir hasta 40 mA, leds supongamos 10 mA cada uno... ya estamos bien arriba de lo que puede suministrar el pickit3.
Medí con el circuito actual la tensión de alimentación con un tester, si ese es el problema la tensión de alimentación debería estar bien debajo de 3V.
 
#16
El led no estará conectado al revés no?.
Verificado eso, si no enciende el led es porque no ejecuta código -> le falta alimentación o señal de reloj.
Verifica si la alimentación está bien, pero con el pic funcionando solo, sin estar conectado al módulo RN42. Si solo no funciona, proba subiendo la tensión de alimentación a +5V (la hoja de datos dice que debería funcionar desde 3.0V, pero nunca se sabe).
A lo mejor el pickit3 no puede dar suficiente corriente para hacer funcionar al pic+RN42 + leds. Según veo en la guía de usuario, puede dar 30 mA, el RN42 puede consumir hasta 40 mA, leds supongamos 10 mA cada uno... ya estamos bien arriba de lo que puede suministrar el pickit3.
Medí con el circuito actual la tensión de alimentación con un tester, si ese es el problema la tensión de alimentación debería estar bien debajo de 3V.
hola a todos llegue a un punto muerto y no sabia que hacer asi que volvi a la base.... intentar que el pic me enviara algun dato cualquiera al computador. pues de ciertamanera lo he logrado. les explico

pero es mas les pongo un video del funcionamiento, pero la cosa no termina ahi , como dije logre configurar el hyperterminal en windows 8.1 para que se comunicara con mi bluetooth RN-42.

pero ya estoy mas seguro que es la programacion del pic la que no me deja enviar un dato adecuado la sincronizacion no se hacerla de manera correcta paraq ue una A sea una a osea configurar los tiempos adecuados o probar con ascii me podrian ayudar a enviar un valor por ahora lo importante es que envie datos al computador.

despues podre ir haciendo que se reciba datos o instruciones y al final controlarlo por bluetooth o por alguna aplicacion en android seria lo ideal.

ojala logre hacerlo y postearlo ya que en internet hay mucha informacion pero casi todo tiene que ver con compra esto y ello y las aplicaciones mas faciles vienen para usar kit con microcontroladores y la idea es usar los dispositivos mas economicos y faciles de adquirir.
y que puedan ser de gran utilidad.

bueno estoy subiendo el video.

#include "C:\Users\yamil\Desktop\compilador C\MAS PRUEBAS\main.h"


void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
char dato;
// TODO: USER CODE!!




while(true)

{
output_high(PIN_B5);
delay_ms(1000);
printf ("\ra\r");
output_low(PIN_B5);
delay_ms(1000);
}

}
lenguaje simple cada vez que prende el led envia la letra a cuando apaga significa que ya prendio

le puse un led a las salidas TX y RX y si envian informacion, yo creo que el problema es que no se la forma correcta de enviar.

ahora el video para que vean que si se comunica.
https://www.youtube.com/watch?v=ctcgxYaOaq8&feature=youtu.be



enviando letra a en proteus.png

ojala me puedan ayudar alguien que sepa mas gracias por su tiempo.(y)

aqui simulado en proteus con hyperterminal de proteus

otra cosa gracias ByAxel logre usar el crystal interno del pic.

PD: no encuentro un regulador de 3,3VDC parecido el 7805 aqui en mi ciudad no venden nada bueno. y ningun cargador de celulares jajaja. tendre que encargar a santiago, mientras seguire usando el pickit 3. quizas de verdad el voltaje no es el adecuado, o es inextable.
 
Última edición:
#17
Ok!!!, eso ya tiene mejor apariencia :)
A lo mejor no era la fuente, pero no dejes de tener en cuenta las limitaciones de corriente que puede entregar el pickit3.
Para obtener 3.3V con componentes comunes fáciles de conseguir, busca trabajar con el LM317, vas a tener una tensión a la salida de cualquier valor (siempre que la entrada sea mayor a la salida + 2V aprox).

Veamos... esta última prueba que hiciste (la del video), no tengo claro como esta todo conectado. ¿Es el RN42 comunicándose con la pc a través de bluetooth sin pic de por medio, con un adaptador bluetooth para la PC?, ¿si no es así como se comunica el pic con la PC, con un adaptador usb a puerto serie?

Independientemente de lo anterior, cuando uno recibe caracteres ininteligibles por puerto serie es muy probable que esté mal configurado el puerto (baud rate, paridad, control de flujo)...
Verifica que baudrate/paridad/control de flujo sea lo mismo del lado de la PC y del otro lado.

Si estás haciendo comunicación de RN42 con PC a través de un adaptador bluetooth: de la hoja de datos del RN42 veo que con el pin 4 se define la velocidad. No sé si lo conectaste, si está abierto debe estar activo el pull-down y el RN42 debe estar trabajando a 115Kbps. Para llevarlo a 9600 deberías poner ese pin a +3.3V
 
#18
Ok!!!, eso ya tiene mejor apariencia :)
A lo mejor no era la fuente, pero no dejes de tener en cuenta las limitaciones de corriente que puede entregar el pickit3.
Para obtener 3.3V con componentes comunes fáciles de conseguir, busca trabajar con el LM317, vas a tener una tensión a la salida de cualquier valor (siempre que la entrada sea mayor a la salida + 2V aprox).

Veamos... esta última prueba que hiciste (la del video), no tengo claro como esta todo conectado. ¿Es el RN42 comunicándose con la pc a través de bluetooth sin pic de por medio, con un adaptador bluetooth para la PC?, ¿si no es así como se comunica el pic con la PC, con un adaptador usb a puerto serie?

Independientemente de lo anterior, cuando uno recibe caracteres ininteligibles por puerto serie es muy probable que esté mal configurado el puerto (baud rate, paridad, control de flujo)...
Verifica que baudrate/paridad/control de flujo sea lo mismo del lado de la PC y del otro lado.

Si estás haciendo comunicación de RN42 con PC a través de un adaptador bluetooth: de la hoja de datos del RN42 veo que con el pin 4 se define la velocidad. No sé si lo conectaste, si está abierto debe estar activo el pull-down y el RN42 debe estar trabajando a 115Kbps. Para llevarlo a 9600 deberías poner ese pin a +3.3V
hola , el bluetooth esta energizado junto con el pic, y la alimentacion del modulo rn-42 y el pic16f628a, salen del pickit 3 ( voy a encargar a santiago los dispositivos para una fuente externa, en mi ciudad no venden nada bueno).

la comunicacion del rn-42 es atravez del bluetooth hacia el bluetooth del computador. y la comunicacion la realizo atravez del programa hyperterminal.

la verdad el pin4 no lo tengo energizado lo tengo desconectado, mi bluetooth es el RN42XV
rn42xv.png
no se si los pines son los mismos que los otros rn42 estandar.




bueno con respecto a la configuracion de bluetooth se las muestro a continuacion.

Código:
***ADVANCED Settings***                       
SrvName= SPP            
SrvClass=0000             
SrvClass=0000             
InqWindw=0100
PagWindw=0100
CfgTimer=255
StatuStr=NULL
HidFlags=200
DTRtimer=8
KeySwapr=0
***Settings***
BTA=000666639909
BTName=RNBT-9909
Baudrt=9600
Mode  =Slav
Authen=1
PinCod=1234
Bonded=0
Rem=NONE SET
Reboot!
õþ ò‰€ h_ý· þü ø  õ€ áþ¶ß ÷è÷7À;½öü ù ïUø €þó€ú  œðûø ç¦Á úþÏ€ þü ï¿ ‚üà￾× þø
 àþÃÐþ   üðø   þ}€œàøþü þ ÖãÐ ýøø‚?@ý‰€~üþ þ   °öÏ ä€‡’ü ÷ø￾àøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøøø
øøøøøøøøøøøøøøø
cuando me conecto por hyperterminal envio los 3 signos peso $$$ este me devuelve un CMD... eso quiere decir que esta conectado.

ahora con respecto a la configuraciond e bluetooth he mirado en el programa y al parecer esta todo bien. aqui pongo el codigo del programa del microcontrolador que tengo funcionando en el pic para que envie la letra "a".

Código:
#include <16F628A.h>
#FUSES NOWDT, INTRC, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD, RESERVED
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

#include "C:\Users\yamil\Desktop\compilador C\MAS PRUEBAS\main.h"


void main()
{

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
char dato;
// TODO: USER CODE!!




while(true)

{
output_high(PIN_B5);
delay_ms(1000);
printf ("\ra\r");
output_low(PIN_B5);
delay_ms(1000);
}

}
todo esto hecho con el wizard de PCWHD.... ahora la parte de la configuracion del puerto serie 232 sobre bluetooth en administrador de dispositivos busque el bluetooth.

hardware serie estandar sobre bluetooth(com4) foto

hardware serie estandar sobre bluetooth(com4).png


haciendo doble click arriba del serie estandar....

configuracion del puerto com4 configurando RN-42 para hyperterminal.jpg

me manda a propiedades en la pestaña configuracion del puerto.


foto configuracion de hyperterminal.
hyperterminal configurado com4,9600,n,8.jpg


y aqui la configuracion que se accede cuando envio los comandos para ver la configuracion.
el modulo bluetooth

aqui una foto de bluetooth enviando el signo "°" cuando de verdad envio la letra a.


hyperterminal recibiendo y configuracion bluetooth.jpg


codigo de envio de la letra "a"
Código:
      while(true)
 
      {      
       output_high(PIN_B5);
       delay_ms(1000);
       printf ("\ra\r");
       output_low(PIN_B5);
       delay_ms(1000);       
       }

}
jajaj se que es mucha informacion pero. yo creo que debe ser el programa alguna idea, gracias por su tiempo, hasta ahi mi trabajo con su ayuda.
 
#19
Ok, entonces la parte de comunicación RN42XV<--> PC funciona.
Algo está mal con la configuración del usart del pic entonces.
De la guía de usuario, página 45:
http://ww1.microchip.com/downloads/en/DeviceDoc/50002222A.pdf
dice que hay que conectar la línea CTS a GND o a RTS. ¿Eso está?.

Pero fuera de ese detalle, volvemos al baudrate. El UART del modulo bluetooth trabaja por default a 115200 bps, y tu pic le está enviando información a 9600 bps.

Configura el pic para transmita a 115200 bps:
#use rs232(baud=115200,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

o si querés que el módulo bluetooth trabaje a 9600 bps, mira lo que dice la guía del link en la página 11:
La pata GPIO7 conectada a +3.3V hace que el módulo trabaje a 9600 bps en vez del default de 115200bps.
 
#20
Hola gracias por responder estava viendo el link que me entregaste pero es de otro dispositivo. y la pagina 11 esta en blanco quizas te equivocaste de link.


el datasheet RN42XV esta en link de abajo y no encuentro eso de forzar mediante hardware atravez del GPIO7 ...

datasheet:

http://ww1.microchip.com/downloads/en/DeviceDoc/RN41XV-RN42XV-ds-v1.0r.pdf

pines:

Ver el archivo adjunto 107807

el dispositivo es este:

Ver el archivo adjunto 107808

y otra cosa voy a cambiar el baud a 115 para salir de la duda pero tengo configurado todo a 9600

pero es raro por que lo tengo configurado a 9600 (RN42XV) el pic y el hyperterminal tambienasi como el puerto.
como puedes ver aqui y en los post anteriores.
Ver el archivo adjunto 107775

una consulta al enviar la palabra "a"

Código:
while(true)

{
output_high(PIN_B5);
delay_ms(1000);
printf ("\ra\r");
output_low(PIN_B5);
delay_ms(1000);
}

}
deberia verse en el hyperterminal la letra "a", o debo enviar en codigo ascii para que interpreta la letra "a"

o el comando printf en el lenguaje C no es necesario enviar algun codigo si no que las palabras que enviamos se ven en hyperterminal.

¿no se si quede claro, si envio la letra "a" con el comando printf de lenguaje CCS con la configuracion adecuada del UART, en el hyperterminal deberia verse tal cual no con codigos indecifrables?

muchas gracias....por su tiempo.

PD: vivo en chile en iquique y el terremoto de 8.3 me dejo la casa de cabeza, como se dice patas arriba. aun sigue temblando, por lo menos puedo tener mi mente ocupada aqui. se me vino abajo el techo se rompieron las paredes, se quebro casi todo. se cortaron los cables.gracias adios mi casa soporto. otros no tuvieron la misma suerte, pero somos un pais fuerte y saldremos adelante. muchas gracias a los paises hermanos que nos dan su apoyo.:aplauso:
 
Arriba