USART - Senden möglich aber kein Empfangen

Gast #1691667
Lesenswert?

Hallo
ich will die USART Schnittstelle nutzen.
Senden klappt auch schon.
Leider das Empfangen noch nicht.

Habe den Atmega32 mit einem Takt von 16MHz
und will eine Baudrate von 4800 1 Stopbit und keinem Paritätsbit(8N1)

Hier mal mein Programm:
(es soll eigentlich nur die Leds ausmachen, wenn ein Zeichen empfangen 
wurde)
1
//----------------------
2
#include <avr/io.h>
3
#include <stdint.h>
4
//----------------------
5
int main (void)
6
{
7
  char zeichen;
8

9
  UBRRH = 0;
10
  UBRRL = 207; //Baudrate von 4800
11

12
  UCSRB |= (1<<RXEN) | (1<<TXEN);
13
  UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
14

15
  DDRA = 0xff;
16
  PORTA = 0xff;
17

18
  while(1)
19
  {  
20
     while (!(UCSRA & (1<<RXC)))
21
     {
22
     }
23
    
24
     zeichen = UDR;
25
     PORTA = 0x00;
26
   }
27
  return(0);    
28
}

Ich sende die Zeichen mit dem HyperTerminal von WindowsXP.
Das komische dabei ist, sobald ich die Verbindung mit Hyperterminal 
schließe, gehn die Leds aus.

An was kann das liegen?
Gast #1691999
Lesenswert?

hallo,
@ falk
die habe ich schon durchgemacht und habe keinen fehler gefunden

@ flo
wieso sollte ich PORTA unabhängig schalten?
der bleibt ja solange in der while schleife bis einmal ein zeichen 
angekommen ist
Gast #1692035
Lesenswert?

NoName schrieb:
> Das komische dabei ist, sobald ich die Verbindung mit Hyperterminal
> schließe, gehn die Leds aus.

Prüfe auf der PC-Seite mal folgende Punkte:

- die Flussteuerung des COM Ports sollte auf "Keine" stehen
- deaktiviere vorsichtshalber den FIFO des COM Ports

Gruß,
Magnetus
Angehängte Dateien:
#1692289
Lesenswert?

NoName schrieb:
> hallo,
> @ falk
> die habe ich schon durchgemacht und habe keinen fehler gefunden
>
> @ flo
> wieso sollte ich PORTA unabhängig schalten?
> der bleibt ja solange in der while schleife bis einmal ein zeichen
> angekommen ist


Wenn du am Port A mehrere Led (zb 8) hängen hast, lass dir mal das 
Zeichen ausgeben.

Oder schalte die LED nach einer kurzen Verzögerungszeit wieder ein.

1
#define F_CPU 16000000
2

3
//----------------------
4
#include <avr/io.h>
5
#include <stdint.h>
6
#include <util/delay.h>
7

8
//----------------------
9
int main (void)
10
{
11
  char zeichen;
12

13
  UBRRH = 0;
14
  UBRRL = 207; //Baudrate von 4800
15

16
  UCSRB |= (1<<RXEN) | (1<<TXEN);
17
  UCSRC |= (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
18

19
  DDRA = 0xff;
20
  PORTA = 0xff;
21

22
  while(1)
23
  {  
24
     while (!(UCSRA & (1<<RXC)))
25
     {
26
     }
27
    
28
     zeichen = UDR;
29
     PORTA = 0x00;
30

31
     _delay_ms( 1000 );
32
     PORTA = 0xff;
33
   }
34
  return(0);    
35
}

Wenns jetzt am Anfang 1 mal blinkt und danach nur bei jedem Tastendruck, 
dann hast du dir beim Hochfahren des Mega irgendein Störzeichen auf der 
UART eingehandelt.

Drück auch im Hyperterminal mehrere Tasten und auch Return. Nicht dass 
da irgendwo noch ein Buffer dazwischen sitzt, der auf das Zeilenende für 
die Übertragung wartet.

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