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

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.

Perdón, me equivoqué de link, me refería a la guía de usuario del módulo (que está aparte del datasheet):
http://ww1.microchip.com/downloads/en/DeviceDoc/bluetooth_cr_UG-v1.0r.pdf

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

No estoy seguro, pero creo que podes estar confundiendo la velocidad del UART/USART del módulo (conexión física a través de pines RX y TX) con la velocidad que emula el enlace bluetooth.
Te diría que no dejes de realizar la simple de prueba de conectar el pin GPIO7 a +3.3V y ver si con eso funciona, es sencillo y rápido de ver.

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"

Así como está creo que no debería haber problema, con las comillas dobles "\ra\r" uno está indicando una secuencia de caracteres terminada en carácter nulo. En binario lo que se envía es 13,97,13,0


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

Sí, debería verse el/los mismo/s caracter/es.

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:
Uh hermano, que jodida la naturaleza por aquellos lares. Uno acá se acostumbra a que lo peor que puede pasar es una inundación o sequía; y los políticos claro (pero eso no cuenta, porque los elegimos nosotros, es daño auto-inflingido en todo caso).
Voy a ver si en algún lado están juntando cosas para enviar, como vos decís, no es la 1ra ni la última vez que les pasa algo así, y han salido/van a seguir saliendo adelante; eso demuestra que los tienen bien puestos para no dejarse vencer.
Un abrazo y fuerza!!!
 
haber amigo cual es el tu programación completo que estas utilizando últimamente, capaz hay un problema en esa parte .
 
haber amigo cual es el tu programación completo que estas utilizando últimamente, capaz hay un problema en esa parte .

hola gracias por responder la programacion que tengo es la siguiente.esta en PCWHD CCS

Ver el archivo adjunto 107494

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)


Código:
#include "C:\Users\*******\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(500);
       printf ("\ra\r");
       output_low(PIN_B5);
       delay_ms(500);       
       }

}

eso es todo lo que tengo en el microcontrolador.
 
veo que la programación esta bien ,pero para que los timers si ni los utilizas no veo ninguna interrupción ,

Necesitas cargar trisb=0b11011011 para indicar la transmisión y recepción de datos .:)
 
hola miren he encargado a santiago un monton de cosas para ir depurando. quizas el modulo bluetooth no puedo configurarlo como corresponde as que encargue un modulo RS232 USB para sacar dudas un regulador de 3.3 volt y un max 232 que hora pueden funcionar con 3.3 volt que genial. =)

voy a conectar mediante cable el pic y sacare mis dudas tambien compre otro modulo bluetooth RN-42 pero no el XV. de ahi les pongo mas informacion. hay cosas que no puedo cambiar en el bluetooth como la paridad y esas cosas. ya pondre mas informacion

luis he puesto ese comando pero no ha cambiado nada. gracias por tu apoyo.
 
hola miren ya he intentado casi de todo y estoy trabado hay comunicacion y todo pero no se cual es el problema.... alguien podria darme alguna programacion que si funcione que sepa para enviar una letra por el pic al pc me tinka que quizas algo no se esta compilando como quiero....

comunicacion....png

alguie tiene un codigo quizas mi programacion esta mala o mal configurado en algun lado del compilador...ya no se:eek:

tengo forzado por gpio7 a 9600 y aun asi no aparece la letra a en el terminal sino el signo °°°°°°°

configuracion modulo bluetooth

configuracion bluetooth com4,9600.png

se comunican y puedo acceder a la configuracion por comando en atravez de hyperterminal para configurar el modulo bluetooth.

yo creo que el problema es el codigo que estoy enviando o la programacion del pic.

ya que si cambio los milisegundos

Código:
      while(true)
 
      { 
output_high(PIN_B5);
delay_ms(300);                 // si cambio los milisegundos aqui cambia los signos
printf ("a");                       // que aparecen en el terminal por la comunicaion
output_low(PIN_B5);         // del bluetooth en la pc
delay_ms(300);
       }
}

al cambiar los milisegundos me cambia el caracter que aparece en el tera term.

alguien podria ayudarme con algun codigo para sacar las dudas.:confused:
 
Última edición:
Este es un ejemplo de prender leds con las teclas a,b,c en minúscula.

Código:
#include <16f877.h>
#FUSES XT,NOWDT,NOPUT,NOPROTECT,NODEBUG,BROWNOUT,NOLVP,NOCPD,NOWRT
#use delay(clock = 4000000)
#use rs232(baud=9600,rcv=pin_c7,xmit=pin_c6,parity=N)
#byte trisb=0x86
#byte portb=0x06
#byte trisc=0x87
#byte portc=0x07
#bit rb0=portb.0
#bit rb1=portb.1
#bit rb2=portb.2

unsigned int8 dato;
 void main()
 {trisb=0;
  portb=0;
  trisc=0b10000000;
  while(1)
  {
    if(kbhit()==1) 
  {    dato=getc();
   if(dato=='a')
     {rb0^=1;
     if(rb0==0)
     printf("led verde apagado \r");
     else
     printf("led verde encendido \r");    
     }
   else if(dato=='b')
      {rb1^=1;
       if(rb1==0)
         printf("led amarrillo apagado \r");
         else
         printf("led amarrilo encendido \r");
      }
      else if(dato=='c')
         {rb2^=1;
          if(rb2==0)
          printf("led rojo apagado \r");
          else
          printf("led rojo encendido \r");
         }
      else 
      printf("dato incorrecto \r"); 
  }
  }
 }
Tienes que configurar tu visual terminal con la velocidad de baudios que es 9600 y el bit de paridad.
También fíjate en las conexiones, algo puede estar mal .
 

Adjuntos

  • 3.jpg
    3.jpg
    86.9 KB · Visitas: 21
Última edición por un moderador:
Hola Luis, tu diagrama si funciona en proteus, pero en físico no me funcionó.
¿No sé si sabrás por qué? Yo lo probé en un 16f628a cambiando algunas cosas.
Saludos.
 
Última edición por un moderador:
Hola Luis, tu diagrama si funciona en proteus, pero en físico no me funcionó.
¿No sé si sabrás por qué? Yo lo probé en un 16f628a cambiando algunas cosas.
Saludos.

amigo tenemos el mismo problema, yo tengo todo bien configurado por alguna razon algo que no se no lora enviar los datos como corresponde.

estoy seguro que tiene que ver algo con la configuaracion de las interrupciones pero va en la programacion.


tienes la comunicacion por cable o no...
 
Última edición:
yamilongiano, ¿probaste de hacer lo sugerí de conectar el pin GPIO7 a +3.3V?

hola si he conectado el pin 4 el GPIO7 a 3.3vdc

y se conecta pero yo creo que va en las interrupciones no se.

como avisarle que va a enviar la letra "a" (el bus de datos) y despues cerrar el bus de datos .

lo digo por que cuando cambio valores en milisegundos en los retardos me cambian los caracteres.

Código:
      while(true)
 
      {      
       output_high(PIN_B5);
       delay_ms(1000);              //cuando cambio el retardo cuanbia el signo
       output_low(PIN_B5);
       delay_ms(1000);
       printf ("a");                     // la letra a si llega pero de vez enc uando sale la letra beta
       }

}


como sale aqui en
tera term

ab.png

los puertos estan bien configurados quizas algo no configure bien en el wizard proyect o el programa tendra algunos errores producidos por CCS . ya no se que puede ser.

estoy 100% seguro que es la programacion del pic no envia el caracter adecuado, ya sea por cosa de interrupciones bit de inicios o de paradas del protocolo. quizas por ahi va la cosa.


ahora miren cuando saco los retardos

Código:
      while(true)
 
      {      
       output_high(PIN_A3);   // sin retardos
       printf ("a");
       output_low(PIN_A3);    // sin retardos
       }

fotogracia de lo que envia el pic por hyperterminal:

ax.png


y ahora sin los comandos (output_high(PIN_A3) y sin los retardos
en el programa del pic...


Código:
      while(true)
 
      {      

       printf ("a");

       }

no envia nada... y sigue habiendo comunicacion con el modulo .

no envia nada.png


por eso creo que quizas falta algo en el codigo que no me deja enviar la letra "a" desde el microcontrolador atravez del modulo bluetooth (rn-42 XV) al pc para que se repita la letra "a" en tera term (hyperterminal). es como si el pic no estuviera dando los tiempos correctos para que el pc lo interprete como la letra "a" o no estuvieran determinados bien los tiempos en el pic. para que lo que ponga en el comando printf ("XXXXX"); se vea correctamente en el hypertermina.

no se si aparte de la configuracion por software falta hacer pausas mediante hardware enviando un low o un high por unos milisegundos antes de enviar el codigo printf ("a");.

alguna idea....???:confused::confused::confused::confused:
 
Hola.
Vuelvo al tema... Solo para probar (misma configuración y a 9600 baud):

- Probar solo el módulo con la PC... unir las líneas RX y TX del módulo para que trabaje a modo de ECO, si el dato recivido en la PC es el mismo que el enviado al módulo... entonces el módulo va bien.

- Probar solo el PIC con la PC... en necesario un adaptador para un puerto serie, ya sea MAX232 o adaptador USB a RS232... hacer que el PIC trabaje en modo de ( ECO ) ver código... si el dato recivido en la PC es el mismo que el enviado al PIC... entonces el PIC va bien.

Código:
#include <16F628A.h>

#FUSES INTRC_IO
#FUSES NOWDT
#FUSES PUT
#FUSES NOMCLR
#FUSES NOLVP

#use delay(internal=4MHz)
#use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)

char dato;

void main()
{
   setup_oscillator(OSC_4MHZ);
   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);
   set_tris_b(0b00000010);

   while(true){   
      if(kbhit()){
         dato = getc(); 
         putc(dato);         
      }
   }
}

El PIC puede ser el más indicado en fallar, entonces si va mal la segunda prueba puede ser:
- Niveles de voltaje, (se supone que el PIC a 4Mhz trabaja bien a 3.3V pero...) adapta mejor el cambio de 5V a 3.3V y viceversa.
- Protocolo... ahunque lo dudo (se puede variar paridad, bit de parada) ya que es por hardware no se puede hacer mucho... no tengo la hoja del módulo a la mano... revisa que el UART del RN42 no tenga las señales del UART invertidas, solo por las dudas.

Sobre la inestabilidad del dato al cambiar el delay, eso si es raro... bugs del CCS? u otra cosa.

Adjunto un par de HEX, incluye explicación... compilados en CCS y otro compilador... ambos me van bien... no se más.

Saludos
 

Adjuntos

  • DemoF628A.rar
    1.4 KB · Visitas: 46
100 % de acuerdo con ByAxel, probar cada cosa por separado haciendo loopback.

Otra cosa que podría estar pasando es problemas de reloj. ¿Que capacitores utilizaste con el cristal?, ¿son NP0/cabecita negra?, ¿de que valor?.
Hace una prueba con delay_ms(5000) por ejemplo, encendiendo y apagando un led para ver si el tiempo real es el esperado (si se enciende cada 10 segundos).
Esto podría afectar al generador de baudrate si la velocidad de reloj es inestable o distinta a la esperada, y terminaría provocando el efecto de caracteres raros.
 
bueno me llegaron las piezas e hice pruebas....

al final es el modulo bluetooth, no se como configurarlo esa es la verdad al parecer.
me faltara configurar algunas cosas que desconosco y no se donde empezar jaja.

he conectado el circuito con el mismo programa y funciona perfectamente me envia una letra a sin ningun problema,y sin caracteres raros.

adjunto fotografia del protoboard.

chip ICL3232cp trabaja con 3.3 volt
pic 16f628a 3.3v con cristal interno de 4mhz
modulo usb TO SERIAL PORT UCON-232S

16f628a y rs232(3232).jpg

aqui otra foto.

20140416_232508.jpg

tera term.

funcionando con puerto rs232 por usb adaptador.png

por lo menos ahora me queda saber por que el modulo bluethooth tiene problemas con el envio de datos a mi pc ... alguien me podria dar otra manito.:confused: gracias a todos por ayudarme y ocupar su tiempo para aconsjarme gracias otra vez.
 
Hola yamilongiano yo ya pude comunicar mi pc con mi pic16f628a pero tube que usar otros pines declarandolos antes en el #fuses

Que bluetooth ocupaste?

Bueno si me funciono al final pero con otro dispositivo el rn42 , el que tenia era el rn42xv no se cual es la diferencia pero con el otro me funciona perfectamente. No se cual sera el problema en verdad con el otro moculo bluetooth...

Fin. Despues subire un tutorial en verdad es simple . Pero con el modulo Rn42. El otro aunque tenga todo configurado igual no funciona.
 
Buenas tardes. Quisiera ayuda.
Mi trabajo si se conecta, pero el problema es el envío de datos.
Cree una aplicación en App Inventor para que me envíe el dato, pero no se conecta.

Gracias por la ayuda.
 
Última edición por un moderador:
Atrás
Arriba