Marks256
New Member
The target is an atmega16 running at 7.3728MHz.
I've been trying all day just to get an EXAMPLE (as in copy/paste from the internet) for the USART on my avr to simply echo a bit from a PC running a terminal program.
I've tried at minimum 15 different examples, including interrupt driven ones, and non interrupt driven ones. and not a single one of the examples have worked for me. I have however, had the most luck with the following code;
however when ever i press a key on the terminal, all i get back is a "+", no matter what the key i pressed was! Further investigation shows that UDR always equals 0xFF! but this example at least RESPONDS to a keypress for me. Any other ones don't even respond to a key press. All of the examples have compiled without a single error or warning.
Any ideas?
I've been trying all day just to get an EXAMPLE (as in copy/paste from the internet) for the USART on my avr to simply echo a bit from a PC running a terminal program.
I've tried at minimum 15 different examples, including interrupt driven ones, and non interrupt driven ones. and not a single one of the examples have worked for me. I have however, had the most luck with the following code;
Code:
#include <avr/io.h>
#include <util/delay.h>
#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
int main (void)
{
char ReceivedByte;
UCSRB |= (1 << RXEN) | (1 << TXEN); // Turn on the transmission and reception circuitry
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); // Use 8-bit character sizes
UBRRL = BAUD_PRESCALE; // Load lower 8-bits of the baud rate value into the low byte of the UBRR register
UBRRH = (BAUD_PRESCALE >> 8); // Load upper 8-bits of the baud rate value into the high byte of the UBRR register
for (;;) // Loop forever
{
while ((UCSRA & (1 << RXC)) == 0) {}; // Do nothing until data have been recieved and is ready to be read from UDR
ReceivedByte = UDR; // Fetch the recieved byte value into the variable "ByteReceived"
while ((UCSRA & (1 << UDRE)) == 0) {}; // Do nothing until UDR is ready for more data to be written to it
UDR = ReceivedByte; // Echo back the received byte back to the computer
}
}
however when ever i press a key on the terminal, all i get back is a "+", no matter what the key i pressed was! Further investigation shows that UDR always equals 0xFF! but this example at least RESPONDS to a keypress for me. Any other ones don't even respond to a key press. All of the examples have compiled without a single error or warning.
Any ideas?