USART Issues

Status
Not open for further replies.

Billt321

New Member
Hi,

Recently i have been trying to get interrupt driven serial working for a project of mine, however i have been struggling to get it to work. I am using an Atmega328p (16Mhz external xtal), and an FTDI231x to communicate to a PC . I believe all the hardware works fine, as using Arduino IDE i can get the serial to work, but i need to use it in Atmel Studio 6. The transmit sort of works, i can see the Tx LED flashing, however i only see zeros or symbols with Realterm. The data sent by the AVR looks to be wrong on a scope aswell. Also, when sending data to the AVR, the Rx interrupt doesn't fire either. I have also tried a lot of example code of the web, checking to ensure that the Fcpu values and such were correct, and none have worked. I have also disabled ckdiv8 in the fuses. Any suggestions?

Thanks in advance, Bill.

Code:
#include <avr/io.h>
#include <util/delay.h>

#define F_CPU 16000000UL
#define FOSC 16000000
#define BAUD 9600
#define MYUBRR (FOSC/16/BAUD)-1

volatile char usartReceive;
volatile int rxF;
unsigned char buffer;

void USART_init();

sei();

int main(){   
    //Setup
    USART_init();       
   
    while ( !( UCSR0A & (1<<UDRE0)) ) // Wait until buffer is empty
        buffer = "Hello";
        UDR0 = buffer;       
   
    //Main Loop
    while(1){
        while ( !( UCSR0A & (1<<UDRE0)) ) 
            UDR0 = 0b01010101
            _delay_ms(1000);
        if(rxF == 1){
            while ( !( UCSR0A & (1<<UDRE0)) ) 
            UDR0 = usartReceive;
            rxF = 0;
        }
    }
}

void USART_init(){

    UBRR0H = (unsigned long)(MYUBRR>>8);
    UBRR0L = (unsigned long)(MYUBRR);
    UCSR0B |= (1<<RXEN0)|(1<<TXEN0)|(1<<RXCIE0);
    UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00);    // 8 Data bits, one stop bit

}
ISR (USART_RX_vect){
   
    usartReceive = UDR0;
    rxF = 1;
   
}
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…