Haz una pregunta
  Foros de Electrˇnica » Dise˝o digital » Microcontroladores y sistemas embebidos
Foros Registrarse ┐Olvidaste tu contrase˝a?

Temas similares

26/03/2014 #1

Avatar de yamilongiano

PIC16F628A y comunicaciˇn RS-232 (Para simular Bluetooth)
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.
27/03/2014 #2

Avatar de ByAxel

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.
27/03/2014 #3

Avatar de yamilongiano

ByAxel dijo: Ver Mensaje
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.



PCWHD
Imßgenes Adjuntas
Tipo de Archivo: jpg Sin tÝtulo.jpg (71,1 KB (Kilobytes), 484 visitas)
27/03/2014 #4

Avatar de ByAxel

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.
27/03/2014 #5

Avatar de yamilongiano

ByAxel dijo: Ver Mensaje
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 muchas gracias por todo. ire poniendo mi codigo y mi proteus para que vean que estoy haciendo.
27/03/2014 #6

Avatar de ByAxel

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
27/03/2014 #7

Avatar de yamilongiano

ByAxel dijo: Ver Mensaje
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)?.
28/03/2014 #8

Avatar de ByAxel

yamilongiano dijo: Ver Mensaje
┐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.
28/03/2014 #9

Avatar de yamilongiano

error de programacion
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.

read...ok

verify...ok

write....fail.



┐alguna idea?
Imßgenes Adjuntas
Tipo de Archivo: png programan fail.png (208,5 KB (Kilobytes), 328 visitas)
28/03/2014 #10

Avatar de ByAxel

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
28/03/2014 #11

Avatar de yamilongiano

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.




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.
Imßgenes Adjuntas
Tipo de Archivo: png programado.png (198,0 KB (Kilobytes), 322 visitas)
30/03/2014 #12

Avatar de yamilongiano

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)



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...



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



lo escribo en el pic16f628a

luego al protoboard.



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.





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...?

ire a descanzar ya son las 2 AM ojala alguien tenga una idea. gracias por su tiempo.
Imßgenes Adjuntas
Tipo de Archivo: jpg este.jpg (101,8 KB (Kilobytes), 609 visitas)
Tipo de Archivo: png fucionando en proteus.png (53,4 KB (Kilobytes), 319 visitas)
Tipo de Archivo: png escrito pero no funka.png (202,8 KB (Kilobytes), 371 visitas)
Tipo de Archivo: jpg 20140330_014330.jpg (92,6 KB (Kilobytes), 309 visitas)
Tipo de Archivo: png coneciones rn42 y pic16f628a.png (6,0 KB (Kilobytes), 301 visitas)
30/03/2014 #13

Avatar de ByAxel

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.
30/03/2014 #14

Avatar de yamilongiano

ByAxel dijo: Ver Mensaje
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 ?.
31/03/2014 #15

Avatar de Ardogan

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.
31/03/2014 #16

Avatar de yamilongiano

respuesta
Ardogan dijo: Ver Mensaje
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=ctcg...ature=youtu.be





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

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.
Imßgenes Adjuntas
Tipo de Archivo: png enviando letra a en proteus.png (32,5 KB (Kilobytes), 280 visitas)
01/04/2014 #17

Avatar de Ardogan

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
01/04/2014 #18

Avatar de yamilongiano

Ardogan dijo: Ver Mensaje
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

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




haciendo doble click arriba del serie estandar....



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


foto configuracion de hyperterminal.



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.





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.
Imßgenes Adjuntas
Tipo de Archivo: png hardware serie estandar sobre bluetooth(com4).png (19,1 KB (Kilobytes), 264 visitas)
Tipo de Archivo: jpg configuracion del puerto com4 configurando RN-42 para hyperterminal.jpg (75,3 KB (Kilobytes), 265 visitas)
Tipo de Archivo: jpg hyperterminal configurado com4,9600,n,8.jpg (62,5 KB (Kilobytes), 262 visitas)
Tipo de Archivo: jpg hyperterminal recibiendo y configuracion bluetooth.jpg (67,8 KB (Kilobytes), 267 visitas)
Tipo de Archivo: png rn42xv.png (66,1 KB (Kilobytes), 259 visitas)
02/04/2014 #19

Avatar de Ardogan

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/e.../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.
02/04/2014 #20

Avatar de yamilongiano

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/e...V-ds-v1.0r.pdf

pines:



el dispositivo es este:



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.


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.
┐Tienes una mejor respuesta a este tema? ┐Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrˇnica » Dise˝o digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.