kmail890
Newbie level 3
Hey,
I've got a problem with USART communication on ATmega16, I'm using USB-RS232 converter (AVR-CDC), with newest drivers and firmware, but simple echo doesn't work atmega is clocked by 11.0592MHz crystal, so there should be no errors.
Here's the code:
and a sample communication (LED display is connected to atmega, so i know what it is receiving):
Thanks in advance for any help!
I've got a problem with USART communication on ATmega16, I'm using USB-RS232 converter (AVR-CDC), with newest drivers and firmware, but simple echo doesn't work atmega is clocked by 11.0592MHz crystal, so there should be no errors.
Here's the code:
Code:
#define FOSC 11059200
#define BAUD 9600
#define MYUBRR FOSC/16/BAUD-1
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#include <inttypes.h>
void USART_Init(unsigned int);
void USART_Transmit(unsigned char data);
unsigned char USART_Receive(void);
unsigned char a;
int main(void)
{
USART_Init (MYUBRR);
while(1)
{
a=USART_Receive();
USART_Transmit(a);
}
}
void USART_Init(unsigned int ubrr)
{
/* Set baud rate */
UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 1stop bit */
UCSRC |= (1 << URSEL) | (1 << UCSZ1) | (1<<UCSZ0);
}
void USART_Transmit(unsigned char data)
{
/* Wait for empty transmit buffer */
while (!( UCSRA & (1<<UDRE)));
/* Put data into buffer, sends the data */
UDR = data;
}
unsigned char USART_Receive(void)
{
/* Wait for data to be received */
while (!(UCSRA & (1<<RXC)));
/* Get and return received data from buffer */
return UDR;
}
and a sample communication (LED display is connected to atmega, so i know what it is receiving):
Code:
sent atmega received
00000000 00000000 00000000
00000001 01111111 01000000
00000010 00111111 01100000
00000011 01111110 00100000
00000100 00011111 01110000
00000101 01111101 01000001
00000110 00111110 00110000
00000111 01111100 00010000
00001000 00001111 01111000
Thanks in advance for any help!