Echo über USART (RS232)

OP #1491466
Lesenswert?

Hallo Gemeinde,

irgend wie will das Echo über usart bei mir nicht richtig klappen 
anstatt der gedrückten Buchstaben kommen über RS232 nur unsinnige 
Zeichen zurück
der CODE:
1
#include <avr/io.h>
2
#define USART_BAUDRATE 9600
3
int8_t geht=0;
4
 void initUsart(void) {
5
  UCSRB |= (1 << RXEN)  | (1 << TXEN); //Sender und Empfänger ein
6
  UCSRC |= (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0);  //async
7
  UBRRL = (F_CPU / (USART_BAUDRATE * 16L) - 1); //baudrate und takt
8
 
9
}
10
int usartGetchar(void) {
11
  if (UCSRA & (1 << RXC))  //wenn zeichen da
12
    return  UDR;
13
       //gib zeichen zurück
14
    else  return -1;  //sonst gib -1 zurück
15
}
16
void usartPutchar(char c) {
17
    while ((UCSRA & (1 << UDRE))==0); //Warte solange solange besetzt  
18
  UDR =  (char)c;              
19
}
20
int main(void) {
21
  initUsart();
22
  while (1) { 
23
      geht=usartGetchar();
24
        //Zeichen lesen
25
    if (geht != -1)  //Wenn ein Zeichen da
26
         usartPutchar(geht); //dann Zeichen ausgeben
27
  }
28
  return 0;
29
}
kann mir jemand ein Tipp geben wo mein Fehler liegt?

Danke und bis dann
#1491493
Lesenswert?

Hallo Michal,

das Problem liegt wahrscheinlich nicht am Code sondern
daran, das die Baudrate zwischen Sender und µC nicht
übereinstimmt.

Was für einen Quarz hat du angeschloßen oder benutzt du
den internen RC?

Vergleiche mal die Frequenz des Quarzes mit der eingestellten
für "F_CPU".


Mfg

Christian

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