RS232 Übertragung geht nicht - Hilfe

Gast #324553
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
#324555
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
Gast #324556
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?
Gast #324558
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.
Gast #324559
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?
Gast #324560
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.
Gast #324562
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
Gast #324565
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

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