mikrocontroller.net

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


Autor: Michal Zoltowski (z_lahcim)
Datum:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>
#define USART_BAUDRATE 9600
int8_t geht=0;
 void initUsart(void) {
  UCSRB |= (1 << RXEN)  | (1 << TXEN); //Sender und Empfänger ein
  UCSRC |= (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0);  //async
  UBRRL = (F_CPU / (USART_BAUDRATE * 16L) - 1); //baudrate und takt
 
}
int usartGetchar(void) {
  if (UCSRA & (1 << RXC))  //wenn zeichen da
    return  UDR;
       //gib zeichen zurück
    else  return -1;  //sonst gib -1 zurück
}
void usartPutchar(char c) {
    while ((UCSRA & (1 << UDRE))==0); //Warte solange solange besetzt  
  UDR =  (char)c;              
}
int main(void) {
  initUsart();
  while (1) { 
      geht=usartGetchar();
        //Zeichen lesen
    if (geht != -1)  //Wenn ein Zeichen da
         usartPutchar(geht); //dann Zeichen ausgeben
  }
  return 0;
}
 
kann mir jemand ein Tipp geben wo mein Fehler liegt?

Danke und bis dann

: Verschoben durch Moderator
Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian Pförtner (pfoertner)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Pförtner (pfoertner)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michal Zoltowski (z_lahcim)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.