ATMega1280 und UART Lib Peter Dannegger

OP #2046561
Lesenswert?

Hallo zusammen,
ich versuche seit ein paar Tagen die UART Lib von Peter Dannegger zu 
benutzen. Bisher habe ich eine andere Lib benutzt, die aber weit weniger 
ausgereift ist und auch keinen FIFO hat.
Leider kann ich über meine UART mit der neuen Lib aber kein Zeichen 
versenden.
Bei meiner alten Lib sah die init und putc so aus:
1
void initusart0(void)
2
{  
3
  UBRR0 = ((F_CPU+BAUD*8)/(BAUD*16)-1);
4
  UCSR0B |= (1 << TXEN0) | (1 << RXEN0) | (1 << RXCIE0);
5
  UCSR0C |= (1<<UCSZ01)|(1<<UCSZ00);
6
}
7

8
void putch0( char x )
9
{
10
    while (!(UCSR0A & (1<<UDRE0)));
11

12
    UDR0 = x;
13
}
Bei der Lib von Peter Dannegger initialisiere ich die USART0 folgend und 
sende einen String:
1
  init_uart0( (u16)(XTAL / BAUD / 16 - 0.5) );
2
  sei();
3
  uputs0("Hallo Peter\n\r");

Der String kommt aber nie an.
Baud ist 9600 und XTAL 8000000
Wo könnte ich die Fehlersuche ansetzen?
Fehler meldet der Compiler auch nicht. Alle Registernamen sind doch bei 
dieser Lib schon richtig eingestellt oder?
Danke für eure Hilfe
OP #2047128
Lesenswert?

Bin mittlerweile schpon etwas weiter gekommen.
Ich habe alles testweise in die uart.h getan, habe aber nur die uartinit 
etwas verändert.

Als Ausgabe erhalte ich so ein g, aber kein weiteres h oder abcdef.
Ein Echo erhalte ich dann auch nicht über
1
uputchar0( ugetchar0());

Wenn ich aber die die Funktion
1
uputs0("abcdef\n\r");
auskommentiere, dann kommt das h auch an und danach kriege ich auch 
teilweise ein Echo zurück. Manchmal kommt aber auch gar nix zurück und 
manchmal alles dreifach. Nach ca. einer halben Minute kommt dann gar 
nichts mehr zurück.

Vielen Dank für deine Hilfe.
Angehängte Dateien:
OP #2047551
Lesenswert?

Aber auch wenn ich die Funktion ganz raus nehme, ändert sich nichts. 
Erst wenn ich ein Zeichen an den controller schicke sendet er die 
Zeichen. Danach kann ich aber senden was ich will, er gibt mir kein echo 
zurück.

Das komische ist, dass ich das gleiche verhalten auch bei der uart lib 
von Peter fleury habe. Woran könnte das liegen?
OP #2047803
Lesenswert?

Und noch eine letzte kleine Frage:

Wenn ich eine weitere USART-Schnittstelle einbinden will, muss ich dann 
ausser bei allen Funktionen und Registernamen die 0 durch eine 1 zu 
ersetzen, auch die folgenden Variablen etwas umbenennen oder stören die 
sich nicht gegenseitig?!
1
static u8 rx_buff[RX1_SIZE];
2
static u8 rx_in;
3
static u8 rx_out;
4
static u8 tx_buff[TX1_SIZE];
5
static u8 tx_in;
6
static u8 tx_out;

Z.B. dann in
1
static u8 rx_buff1[RX1_SIZE];
2
static u8 rx_in1;
3
static u8 rx_out1;
4
static u8 tx_buff1[TX1_SIZE];
5
static u8 tx_in1;
6
static u8 tx_out1;

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren