UART, Zeichen von PC zu Mikrocontroller

OP #834815
Hallo am Sonntagnachmittag.

Ich habe folgendes Problem: Ich will Zeichen vom PC zum Uc (ATMEGA8) 
über RS232 bzw. UART senden.

Voraussetzungen:
- Senden vom Uc zum PC funktioniert (von daher sollten die Einstellungen 
in Hyperterm, also Baudrate, Stopbit usw. stimmen).
- Ein MAX232 ist eingebaut, beschaltet wie im Turorial 
AVR-Tutorial: UART
- Der uC wird mit einem Quarz (4,9152MHZ) betrieben, die Frequenz ist im 
Makefile angegeben

Codeschnipsel:

Initialisierung
1
void uart_init(void)
2
   {
3
   UCSRB = (1 << TXEN) | (1 << RXEN); // UART TX & RX einschalten
4

5
   UCSRC = (1 << URSEL) | (3<<UCSZ0);    // Asynchron 8N1 
6
   
7
   UBRRH = UBRR_VAL >> 8;
8
   UBRRL = UBRR_VAL & 0xFF;
9
   }

Funktion zum empfangen der Zeichen
1
char uart_getc(void)
2
   {
3
   while (!(UCSRA & (1<<RXC)))   // warten bis Zeichen verfuegbar
4
      {
5
      }
6
   return UDR;     // Zeichen aus UDR an Aufrufer zurueckgeben
7
   }

Ausschnitt aus main()
1
void main(void)
2
  {
3
  uart_init();
4
  uart_puts("start"); //Funktion zum senden von Strings
5
  while(1)
6
    {
7
    char test;
8
    test = uart_getc();
9
    uart_putc(test);
10
    uart_putc(',');
11
    }
12
  }

Liegt der Hund im Code begraben oder habe ich doch was in der 
Verschaltung vermurkst?

Achja meine Vorgehensweise:
ich starte Hyperterm, dann den uC. In Hyperterm erscheint "Start". Jetzt 
drücke ich eine Taste, daraufhin müsste doch eigentlich der uC ein 
"Echo" gefolgt von einem Komma erzeugen??

Einen schönen Sonntag! Julian
Persönliche Seite
Der Code sieht richtig aus. Baudratenprobleme sind es wohl nicht, wenn 
Senden AVR => PC geht.

Ich würde die Verkabelung peinlich genau prüfen. Es braucht mindestens 
DREI Verbindungen (TX, RX und gern vergessen GND - ist mir auch schon 
passiert)

Die TX-Leitung des PC führt im Ruhezustand Spannung. Die am Kabelende 
suchen und die muss dann an den MAX232 an einen RXIN gelangen. Der 
gleichzahlige RSOUT muss dann an den RXD des AVR.

Oder mal auf der AVR Seite das TXIN und RXOUT Paar brücken. Der PC 
müsste dann ein Echo bekommen, wenn MAX232, Stecker, Kabel, Stecker OK 
sind.
OP
Hi Stefan,

> Ich würde die Verkabelung peinlich genau prüfen. Es braucht mindestens
> DREI Verbindungen (TX, RX und gern vergessen GND - ist mir auch schon
> passiert)

3 Verbindungen sind da, eigentlich auch richtig.

> Oder mal auf der AVR Seite das TXIN und RXOUT Paar brücken. Der PC
> müsste dann ein Echo bekommen, wenn MAX232, Stecker, Kabel, Stecker OK
> sind.

Funktioniert, wenn auch mit ca. 10% Fehlern, d.h. es wir ein anderes 
Zeichen ge-echot wie eingegeben.

Nachdem ich gerade die Kabelbrücke entfernt und den uC wieder gestartet 
habe funktioniert alles wieder bestens. Vermutlich irgendein Wackler, 
ver******mte  Breadboards...

Danke trotzdem für deine Hilfe!

Eine gute Nacht, Julian

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.