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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.