Forum: Mikrocontroller und Digitale Elektronik Echo über USART (RS232)


von Michal Z. (z_lahcim)


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

: Verschoben durch User
von Benedikt K. (benedikt)


Lesenswert?

Forum: Codesammlung
Wenn ihr eigene Programme oder Anleitungen geschrieben habt könnt ihr 
sie hier posten. Fragen werden gelöscht!

Daher verschiebe ich diesen Thread auch wieder nach µC & Elektronik.

von Christian P. (pfoertner)


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

von Christian P. (pfoertner)


Lesenswert?

Hallo Michal,

da fällt mir noch was ein welchen µC verwendet du?

Bei neueren Typen gibt es in den Fuses einen Punkt
"Divide clock by 8 internally". dieser teil die Quarz-
Frequenz durch 8.

Dann passt deine F_CPU auch nicht.


Mfg

Christian

von Michal Z. (z_lahcim)


Lesenswert?

Hallo Christian,

verwende den ATMega32. Hab die Frequenz hoch gesetzt und sofort klappte 
es.
Das war ja auch der Fehler. Jetzt klappt es aber wunderbar,

Vielen Dank für den Tip.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.