www.mikrocontroller.net

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


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.
sendtopc                ;übertragung über rs232
movlw D'120'
movwf senddatatopc


;##### START OF SENDING STARTBIT
movlw D'17'
movwf loops2
bcf PORTC,1
startbitwait
nop                             ; 1 Befehl
nop                             ; 1 Befehl
nop                             ; 1 Befehl
decfsz loops2,1                 ; 1 Befehl
goto startbitwait               ; 2 Befehle
;##### END OF SENDING STARTBIT

;##### START OF SENDING 8 DATABITS
movlw D'8'                      ; 1 Befehl    - wird bei startbit
noch verwendet von der dauer
movwf loops                     ; 1 Befehl    - wird bei startbit noch
verwendet von der dauer

sendtopcbyte
movlw D'19'                     ; 1 Befehl
movwf loops2                    ; 1 Befehl
btfsc senddatatopc,7            ; 1 Befehl
bcf PORTC,1                     ; 1 Befehl
btfss senddatatopc,7            ; 1 Befehl
bsf PORTC,1                     ; 1 Befehl
waiting
nop                             ; 1 Befehl
nop                             ; 1 Befehl
decfsz loops2,1                 ; 1 Befehl
goto waiting                    ; 2 Befehle

rlncf senddatatopc,1            ; 1 Befehl
decfsz loops,1                  ; 1 Befehl
goto sendtopcbyte               ; 2 Befehle
;#### END OF SENDING 8 DATABITS

;#### START OF SENDING ENDBIT
bsf PORTC,1
movlw D'17'                     ; 1 Befehl
movwf loops2                    ; 1 Befehl
stopbitwait
nop                             ; 1 Befehl
nop                             ; 1 Befehl
nop                             ; 1 Befehl
decfsz loops2,1                 ; 1 Befehl
goto stopbitwait                ; 2 Befehle
;#### END OF SENDING ENDBIT


movlw D'255'
call WAIT
return

Autor: Alex (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Baudratentauglichen Quarz probiert? (3,686400MHz)

...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Probiere mal mit einem Wert, ob du einen systematischen Fehler im
Programm hast.

Jetzt:
Bit            76543210

73  = 0x49 = 0b01001001
109 = 0x6D = 0b01101101
                 ^  ^

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?

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andreas Jäger (Gast)
Datum:

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

Autor: mr.chip (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte mir Stephans Post besser durchlesen sollen...

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das LSB wird zuerst gesendet...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.