Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

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.

New Articles From Microcontroller Tips

Back
Top