UART, Zeichen von PC zu Mikrocontroller

OP #834815
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
Persönliche Seite #834989
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.
OP #835291
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

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