Bubi_00
29.11.2006, 09: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
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