Estoy intentando conectar un PIC12F1572 al módulo HC-06. Encontré un código en línea para conectar el HC-06 con un PIC16F84 e intenté cambiar el código para el PIC que usé siguiendo la guía del PIC para la comunicación asíncrona.
Mi experiencia y comfortzone están en PSU analógica, por lo que soy bastante nuevo en programación. Por lo tanto, creo que estoy pasando por alto algo muy fundamental.
Estoy bastante seguro de que el hardware está bien configurado. Y puedo conectar mi teléfono con el módulo HC-06. El problema es que no recibo ningún mensaje en mi teléfono que esté escrito en el código. Por ejemplo, el mensaje introductorio.
Mi código está aquí (cualquier sugerencia sería genial):
<i> #include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#pragma config FOSC = INTOSC // Oscillator Selection bits (INTOSCIO
oscillator: I/O function on RA4/OSC2/CLKOUT pin, I/O function on RA5/OSC1/CLKIN
#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT enabled)
#pragma config MCLRE = ON // MCLR Pin Function Select bit (MCLR pin function is digital input, MCLR internally tied to VDD)
#pragma config CP = OFF // Code Protection bit (Program memory code protection is enable)
#pragma config BOREN = ON // Brown Out Detect (BOR enabled)
#define _XTAL_FREQ 16000000 //Frequency 16MHz
void Initialize_Bluetooth()
{
OSCCONbits.SCS1 = 1; // internal clock
OSCCONbits.IRCF = 0b1111; // 16 MHz
ANSELA = 0x00; //disable all analog ports
TRISAbits.TRISA0 = 0;
TRISAbits.TRISA1 = 1;
//Set the baud rate using the look up table in datasheet
SPBRG = 416; //9600bps 16MHz Osc
TXSTAbits.BRGH=1;
RCSTAbits.SPEN=1; //1 = Serial port enabled
TXSTAbits.TXEN=1;
RCSTAbits.CREN=1; //1 = Enables receiver
TXSTAbits.SYNC=0;
BAUDCONbits.BRG16=1;
TXSTAbits.TX9=1;
RCSTAbits.RX9=1;
//Set 8-bit reception and transmission
INTCONbits.GIE=1;
INTCONbits.PEIE=1;
PIE1bits.RCIE=1;
PIE1bits.TXIE=1;
}
//___________BT initialized_____________//
//Function to load the Bluetooth Rx. buffer with one char.//
void BT_load_char(char byte)
{
TXREG = byte;
while(!PIR1bits.TXIF);
while(!TXSTAbits.TRMT);
}
//End of function//
//Function to Load Bluetooth Rx. buffer with string//
void BT_load_string(char* string)
{
while(*string)
BT_load_char(*string++);
}
//End of function//
//Function to broadcast data from RX. buffer//
void broadcast_BT()
{
TXREG = 13;
__delay_ms(5000);
}
//End of function//
//Function to get a char from Rx.buffer of BT//
char BT_get_char(void)
{
if(RCSTAbits.OERR) // check for over run error
{
RCSTAbits.CREN = 0;
RCSTAbits.CREN = 1; //Reset CREN
}
if( PIR1bits.RCIF==1) //if the user has sent a char return the char (ASCII value)
{
while(!PIR1bits.RCIF==1);
return RCREG;
}
else //if user has sent no message return 0
return 0;
}
//End of function/
void main(void)
{
//Scope variable declarations//
int get_value;
//End of variable declaration//
//I/O Declarations//
TRISAbits.TRISA3=0;
//End of I/O declaration//
Initialize_Bluetooth(); //lets get our bluetooth ready for action
//Show some introductory message once on power up//
BT_load_string("Bluetooth Initialized and Ready");
broadcast_BT();
BT_load_string("Press 1 to turn ON LED");
broadcast_BT();
BT_load_string("Press 0 to turn OFF LED");
broadcast_BT();
//End of message//
while(1) //The infinite lop
{
get_value = BT_get_char(); //Read the char. received via BT
//If we receive a '0'//
if (get_value=='0')
{
TRISAbits.TRISA3=0;
BT_load_string("LED turned OFF");
broadcast_BT();
}
//If we receive a '1'//
if (get_value=='1')
{
TRISAbits.TRISA3=1;
BT_load_string("LED turned ON");
broadcast_BT();
}
}
}
</i>
ACTUALIZACIÓN: Por lo tanto, quiero determinar si la velocidad en baudios del PIC se establece correctamente en 9600. Tomé una captura de pantalla del pin TX y RX del PIC, luego de enviar un 0 desde mi Android al módulo HC-06. ¿Cómo puedo determinar la velocidad en baudios según esta imagen de alcance? ¿O hay alguna otra forma más fácil de hacer esto,
Actualización: la velocidad en baudios del PIC se ha medido en 9600 y también se ha encontrado que la velocidad en baudios del HC 06 es de 9600. Así que al menos este no es el problema. ¿Alguien tiene una idea de lo que puede salir mal?
Tal vez, estoy pasando por alto algo en la función de transmisión.