Forum: Mikrocontroller und Digitale Elektronik RS232 Übertragung geht nicht - Hilfe


von Alex (Gast)


Lesenswert?

hi,

ich kriegt die übertragung über die rs232 schnittstelle einfach nicht
hin.
was mache ich falsch??

hab jetzt nach zwei tagen immer noch keinen fehler gefunden jetzt hab
ich auch schon gedacht dass vielleicht des kabel nen bruch hat, aber
des is es auch nicht. dann vielleicht dass die com-ports kaputt sind
weil der pc schon 41/2 jahre alt ist und die pci-steckplätze auch
kaputt sind, dass es vielleicht auch jetzt den uart erwischt hat, aber
des is es auch nicht.

jetzt weiss ich nicht weiter. ich hab kein oszi, kann nix nachmessen.

also jetzt kann es nur noch am programm, quarz, oder max232a liegen.
wie gesagt ich hab aber kein oszi und kann nix nachmessen.
aber den quarz schliess ich aus. der max232a ist richtig beschaltet,
den schliess ich auch irgendwie aus. bleibt noch des prog.

hier der quelltext schaut euch den bitte mal an ich find nix mehr.
1
sendtopc                ;übertragung über rs232
2
movlw D'120'
3
movwf senddatatopc
4
5
6
;##### START OF SENDING STARTBIT
7
movlw D'17'
8
movwf loops2
9
bcf PORTC,1
10
startbitwait
11
nop                             ; 1 Befehl
12
nop                             ; 1 Befehl
13
nop                             ; 1 Befehl
14
decfsz loops2,1                 ; 1 Befehl
15
goto startbitwait               ; 2 Befehle
16
;##### END OF SENDING STARTBIT
17
18
;##### START OF SENDING 8 DATABITS
19
movlw D'8'                      ; 1 Befehl    - wird bei startbit
20
noch verwendet von der dauer
21
movwf loops                     ; 1 Befehl    - wird bei startbit noch
22
verwendet von der dauer
23
24
sendtopcbyte
25
movlw D'19'                     ; 1 Befehl
26
movwf loops2                    ; 1 Befehl
27
btfsc senddatatopc,7            ; 1 Befehl
28
bcf PORTC,1                     ; 1 Befehl
29
btfss senddatatopc,7            ; 1 Befehl
30
bsf PORTC,1                     ; 1 Befehl
31
waiting
32
nop                             ; 1 Befehl
33
nop                             ; 1 Befehl
34
decfsz loops2,1                 ; 1 Befehl
35
goto waiting                    ; 2 Befehle
36
37
rlncf senddatatopc,1            ; 1 Befehl
38
decfsz loops,1                  ; 1 Befehl
39
goto sendtopcbyte               ; 2 Befehle
40
;#### END OF SENDING 8 DATABITS
41
42
;#### START OF SENDING ENDBIT
43
bsf PORTC,1
44
movlw D'17'                     ; 1 Befehl
45
movwf loops2                    ; 1 Befehl
46
stopbitwait
47
nop                             ; 1 Befehl
48
nop                             ; 1 Befehl
49
nop                             ; 1 Befehl
50
decfsz loops2,1                 ; 1 Befehl
51
goto stopbitwait                ; 2 Befehle
52
;#### END OF SENDING ENDBIT
53
54
55
movlw D'255'
56
call WAIT
57
return

von Alex (Gast)


Lesenswert?

ach ja und am pic hängt ein 4mhz quarz und die übertragungsrate beträgt
9600bps.

von Karl H. (kbuchegg)


Lesenswert?

Vom PIC versteh ich leider nichts, da müssen andere aushelfen.
Aber auch wenn du keinen Messpark hast, kannst du einen
einfachen Test machen, bei dem du schon vieles aussortieren
kannst.

Nimm mal den PIC aus dem Sockel. Dann verbindest du im Sockel
mit einem Stück Draht die TX mit der RX Leitung.
Wenn du jetzt am PC drauflos tippst, musst du alles was du
tippst auch sehen. Zur Kontrolle die Drahtbrücke entfernen
und das Echo muss aufhören.
Damit hast Du getestet:
  das Kabel
  den MAX232

von Alex (Gast)


Lesenswert?

ok hab des jetzt so gemacht und am max232 kann auch nicht liegen, der
funktioniert. den quarz hab ich auch ausgetausch und es geht immer noch
nicht, also schliess ich den auch aus.

bleibt nur noch das programm.

was is da falsch?

von Hannes L. (hannes)


Lesenswert?

Baudratentauglichen Quarz probiert? (3,686400MHz)

...

von Alex (Gast)


Lesenswert?

ne hab ich leider nicht zur hand, aber des muss doch auch so gehen. ich
hab ja die wartenschleifen auf 9600bps recht genau abgestimmt.

ich will die zahl 73 übertragen und es kommt der buchstabe m bzw die
zahl 109 an. wie kann des sein.

von Stefan (Gast)


Lesenswert?

Probiere mal mit einem Wert, ob du einen systematischen Fehler im
Programm hast.

Jetzt:
1
Bit            76543210
2
3
73  = 0x49 = 0b01001001
4
109 = 0x6D = 0b01101101
5
                 ^  ^

Bei der Übertragung wird Bit0 zuerst und Bit 7 zuletzt übertragen. Die
beiden Fehler liegen an Stellen, wo zwei 0 Bits hintereinander kommen.
Kann das Sendeprogramm damit umgehen?

von Stefan (Gast)


Lesenswert?

BTW. wenn du sonst keine Tools wie ein Oszi hast, kannst du dir mit
einer LED und saumäßig langen Verzögerungsschleifen eine einfache
optische Anzeige mit 1 Baud oder so basteln, um die Senderoutine zu
testen.

von Andreas Jäger (Gast)


Lesenswert?

Mal 'ne andere Frage: Kannst du nicht einen PIC verwenden, der einen
UART hat? Ist doch viel einfacher.

von mr.chip (Gast)


Lesenswert?

Hallo

Ein ähnliches Problem hatte ich auch. Hat sich irgendwie von selbst
gelöst, eines ist mir jedoch aufgefallen: zuerst UART-Verbindung
erstellen, DANN Mikrocontroller einschalten.

Keine Ahnung wieso. Keine Ahnung, ob das solid ist. Vielleicht einfach
mal probieren? ;-)

Gruss

Michael

von Rahul (Gast)


Lesenswert?

Guck dir doch mal die Zahlen 73 und 109 binär an:
73 : 01001001
109: 01101101
Du hast ein Timing Problem...(und ich keine Ahnung von PICs)

von Rahul (Gast)


Lesenswert?

Ich hätte mir Stephans Post besser durchlesen sollen...

von Alex (Gast)


Lesenswert?

also mir ist jetzt was auf gefallen. ich hab kein timing problem.

zahl 73 wird gesendet:        01001001
des kommt an:                 01101101

zahl 73 wird gesendet:        01001001
des was ankommt umdrehen:     10110110

zahl 73 wird gesendet:        01001001
des was ankommt inventieren:  01001001

mein prob liegt bei der reihen folge der zu sendenden bits und beim
zustand der gesendet wird.

danke für eure antworten

von Rahul (Gast)


Lesenswert?

Das LSB wird zuerst gesendet...

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.