Forum: Mikrocontroller und Digitale Elektronik UART, Zeichen von PC zu Mikrocontroller


von Julian O. (juliano)


Lesenswert?

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

von Stefan B. (stefan) Benutzerseite


Lesenswert?

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.

von Julian O. (juliano)


Lesenswert?

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

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.