PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : USART ATMega325



Bubi_00
29.11.2006, 08:25
Hi Leute

Ich bekomm einfach nicht die Serielle Schnittstelle zum laufen...
Zuerst war der MAX farbriksmässig hinüber, dann auch noch ein kleiner Verdrahtungsfehler :)
Jetzt sollte es aber gehn, bzw bin soweit das ich die PINS auf ein ein extra Board rausgezogen habe( Funktioniert einwandfrei mit einem ATMega8)

Hier mal der Code. Lasst euch nicht von der Sendefunktion verwirren.. :)
Sie funktioniert ;)




#include <avr/io.h>


#define USART_BAUD_RATE 9600
#define USART_BAUD_SELECT (F_CPU/(USART_BAUD_RATE*16L)-1)
#include <inttypes.h>
#include <stdio.h>

static int uart_putchar(char c, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(uart_putchar, NULL, _FDEV_SETUP_WRITE);

static int uart_putchar(char c, FILE *stream) {
loop_until_bit_is_set(UCSR0A, UDRE0);
UDR0 = c;
return 0;
}
void uart_init(void) {
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
UCSR0C = (1<<UMSEL0)|(1<<UCSZ01)|(1<<UCSZ00);
UBRR0L = (unsigned char) USART_BAUD_SELECT;

stdout = &mystdout; // in main() auch benoetigt
printf("\nHello, world! I,m there\n");

}



Genau das selbe Programm läuft auf einem ATMega8 einwandfrei...(nur andere Registernamen)

Und noch ne Frage:
Warum steht im Datenblatt usw überall UART0 er hat doch eh nur einen ?!



Mfg

linux_80
29.11.2006, 18:04
Hallo,

ich denke mal das es dann einfach wird den Code zu portieren, denn bei anderen AVRs ist es auch schon so, das die 0 da dran hängt obwohl nur eine USART da ist.
Es wird dann leichter den Code auf einem AVR zu verwenden der mehr als eine USART hat, da man sonst entweder alle ändern, oder ein haufen #IFDEF usw. einbauen muss.