atmega + HC05

Status
Not open for further replies.

devjeetmandal

New Member
hello everyone..
i was trying to interface HC-05 bluetooth module with atmega8. F_CPU=1MHz and baud rate for communication is 9600. i have a led at PORTB pin 0 and i will use any bluetooth app from play store to turn the led on or off.

usart.h

void usart_init(uint16_t ubrr_value)
{
UBRRL = ubrr_value;
UBRRH = (ubrr_value>>8);
UCSRB|= (1<<RXEN)|(1<<TXEN);
UCSRC |= (1 << URSEL)|(3<<UCSZ0);
}


unsigned char usart_data_receive( void )
{
while ( !(UCSRA & (1<<RXC)) )
;
return UDR;
}



hc-05.h

char hc_05_bluetooth_receive_byte(void)
{
return usart_data_receive();
}


main.c

int main(void)
{
DDRB=0x01;
char received_data;
usart_init(6);
while(1)
{
received_data=hc_05_bluetooth_receive_byte();
if(received_data == '1')
{
PORTB=0x01;
}
else if(received_data == '2')
{
PORTB=0x00;
}
else
{

}
}
}



any guess why its not working?
 
I guess the problem ist here.
while ( !(UCSRA & (1<<RXC)) )

When one byte was received the controller hangs into this loop until an other byte was received.

I would suggest You to make the receiving routine in an interrupt routine.
Then create a small ring buffer.
The interrupt routine fill this buffer and set a pointer.
The main routine read that pointer and compare it with an readout pointer.
When both are uneque the routine handles the new bytes and increment the readout pointer an all is fine.
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…