Today i am writing about AVR microcontroller comunication using uart. It is going be short post. Last couple days I have been working on AVR microcontroller comunication with a PC. Unfortunately it didn’t work. I have been looking for bad connections in circuits and the problem wasn’t in the circuit. After couple of hours of looking I decided to check the code. I couldn’t find a mistake so i changed the code for most simplified version I could write:

#define UART_BAUD 9600
#define __BAUD_PRESCALE ((F_CPU+UART_BAUD*8UL) / (16UL*UART_BAUD)-1)

void USART_Transmit(char data);
void USART_Init(uint16_t baud);

int main(void)
{
	USART_Init(__BAUD_PRESCALE);

	while(1)
	{
		USART_Transmit('d');
		USART_Transmit('a');
		USART_Transmit('t');
		USART_Transmit('a');
		USART_Transmit(0x0d);    // CR (Carriage Return) character
		USART_Transmit(0x0a);    // LF (line feed) character
		_delay_ms(1000);
	}
}

// definition of sending function
void USART_Transmit( unsigned char data )
{
    /* Wait for empty transmit buffer */
    while ( !( UCSRA & (1<<UDRE)) );

    /* Put data into buffer, sends the data */
    UDR = data;
}

And it worked 🙂 And lesson for today is – always check microcontroller with the most simply code you can write and then look for mistakes in circuit. Don’t do another way. This functions are from the AVR documentation, I didn’t change in transmitting function anything, I changed only initialisation for diffrent puspose.

Leave a Reply