RS232 Atmega8 Probleme mit Empfang von Daten

Gast #2410016
Lesenswert?

Hallo zusammen,
ich möchte gerne meinen Stromzähler per serieller optischer 
Schnittstelle auslesen. Ich verwende dazu einen SFH309 Fototransisor, 
eine LED (zum Anzeigen ob gesendet wird)  und einen 10kOhm Widerstand. 
Das Auslesen klappt ohne Atmega direkt per HTERM und RS232-TTL- Wandler 
einwandfrei (Anschluss vom Stromzähler an RXD vom RS232-TTL Wandler). 
Ich bekomme alle zwei Sekunden ein sauberes Protokoll zugeschickt.
Wenn ich nun allerdings meinen ATmega 8 benutze (Anschluss vom 
Stromzähler an Atmega RXD, TXD vom Atmega zum RXD vom RS232-TTL Wandler) 
habe ich folgende Probleme:
1) es werden ständig Werte empfangen. In der Sendepause z.B. ständig HEX 
1D,71 oder FC.
2) Alle Werte empfange ich doppelt. Das Protokoll fängt z.B. immer mit 
4x 1B an, ich empfange nun 8x1B.
Was ich bisher versucht habe: Parity verändert, Sensor verschoben.
Leider ohne Erfolg.
Hoffe es kann mir jemand einen Tip geben.
Gruß
Holgie
1
#include <avr/io.h> 
2
#include <string.h> // Fuer "strcmp" 
3
#include <stdlib.h> // Fuer "itoa" 
4

5

6
void check_v24(void) { 
7
  unsigned char data; 
8

9
  // warten bis ein byte empfangen 
10
 // while(!(UCSRA&(1<<RXC))) 
11
 //   ; 
12

13
 // data=UDR; 
14

15
if (bit_is_set(UCSRA, RXC)) 
16
data = UDR;
17

18

19
  // ein byte senden 
20
  while(!(UCSRA&(1<<UDRE))) 
21
    ;  
22

23
  UDR=data; 
24

25
} 
26

27

28
int main(void) { 
29

30

31
  // FOSZ=3,6MHz, BAUD=9600 
32
  UBRRH=0; 
33
  UBRRL=23; 
34

35
  UCSRB = (1<<RXEN) | (1<<TXEN); 
36

37
  UCSRC = (1<<URSEL) | (3<<UCSZ0); 
38

39

40
  while(1) { 
41

42
    check_v24(); 
43

44
  } 
45

46
  return(0);
47
}
#2410025
Lesenswert?

1
void check_v24(void) { 
2
  unsigned char data; 
3

4
  // warten bis ein byte empfangen 
5
 // while(!(UCSRA&(1<<RXC))) 
6
 //   ; 
7

8
 // data=UDR; 
9

10
if (bit_is_set(UCSRA, RXC)) 
11
data = UDR;
12

13

14
  // ein byte senden 
15
  while(!(UCSRA&(1<<UDRE))) 
16
    ;  
17

18
  UDR=data; 
19

20
}

Rück den COde mal vernünftig ein und überleg dir, welchen Wert wohl data 
hat, wenn du nichts empfangen hast. Du sendest auf Tx auch dann etwas 
raus, wenn du nichts über Rx empfangen hast.

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