PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Frage zu RS232



Scuido
15.08.2008, 22:23
Hey,
mein Problem ist, ich habe versucht eine RS232 verbindung zum PC aufzubauen. Leider kommt nicht das an was ich erwarte.

Ich habe den PIC ohne Pegelkonvertierung an den PC geschlossen. Mir ist auch klar, dass die pegel invertiert werden. Ich sitze nun schon seit drei Tagen an dem Problem und weiß nicht mehr weiter.

Gruß
André Iwers

;*****************************************
list p=16f877A

;* PORTC: I/O
;* 0 -
;* 1 - ;* 2 -
;* 3 -
;* 4 -
;* 5 -
;* 6 - TX RS232
;* 7 - RX

; Taktquelle: 4 MHz

#include <P16f877A.INC>

__CONFIG _PWRTE_ON & _WDT_OFF & _HS_OSC & _LVP_OFF

org 0x00
Init
bsf STATUS, RP0
movlw B'10111111' ; I/O
movwf TRISC
bcf STATUS, RP0

; USART initialisieren
bsf STATUS,RP0 ; Bank1
movlw 0x24 ; Sender: RS232 7 TXEN, BRGH = 1
movwf TXSTA ;
bcf STATUS,RP0 ; Bank 0
movlw 0x90 ; Empfänger: RS232
movwf RCSTA ;

; USART Baudrate einstellen
bsf STATUS,RP0 ; Bank1
movlw D'25' ; Set Baud rate 9,6 kBPS bei 4 MHz
movwf SPBRG
bcf STATUS,RP0 ; Bank 0

;************************************************* *****************

btfss PIR1,TXIF ; ist Sender leer ?
goto $-1 ; nein, noch nicht leer
movlw 'B' ; nächstes Byte holen
movwf TXREG ; und in den RS232-Sender schreiben

btfss PIR1,TXIF ; ist Sender leer ?
goto $-1 ; nein, noch nicht leer
movlw 0xAA ; nächstes Byte holen
movwf TXREG ; und in den RS232-Sender schreiben

btfss PIR1,TXIF ; ist Sender leer ?
goto $-1 ; nein, noch nicht leer
movlw 0x0A ; nächstes Byte holen
movwf TXREG ; und in den RS232-Sender schreiben

btfss PIR1,TXIF ; ist Sender leer ?
goto $-1 ; nein, noch nicht leer
movlw 0xA0 ; nächstes Byte holen
movwf TXREG ; und in den RS232-Sender schreiben



start

goto start

end

ossy
19.08.2008, 08:59
Hallo Scuido,

kommt bei Dir garnichts am Computer an?

Oder hast du wire Zeichen?

Gruß Wolfgang

Scuido
19.08.2008, 10:07
hey,

irgendwie kommt nur mist an, habe aber glaube ich den fehler gefunden. ich muss die pegel ja invertieren wenn ich die hardware vom pic benutzen möchte. kann es bloß im mom net ausprobieren. schreibe aber wenns funzt.

gruß
andré

ossy
19.08.2008, 12:37
Hallo,

bei mir war das gleiche Problem.
Ich habe den PIC auf irgend einem PIN senden lassen, und das alles mit HTerm angesehen. Ich hatte nur wire Symbole. Bis mich jemand auf die Jdee gebracht hatte HTerm auf zwei stopbits zu setzen.
Siehe da die Symbole wurden besser. Ich denke wenn am Programm
gefeilt wird klapts auch.

Manchmal ist die Baudrate etwas daneben, und schon sind die Symbole wirr.

Teile mir Bitte mit wen du den Fehler gefunden hast.

Den PIC kannst du mit dem PC verbinden, auch ohne Pegelwandler.
Aber nur wenn der PIC Sendet.

Soll der PIC als Empfänger arbeiten, dann braucht nur ein ca. 22KOhm Wiederstand vorgeschaltet werden.

Grüße und gutes Gelingen

Wolfgang

ossy
19.08.2008, 12:48
Hallo,

ich nochmal.

Vermutlich hast du die Baudrate falsch eingestellt.

Dein Code:

; USART Baudrate einstellen
bsf STATUS,RP0 ; Bank1
movlw D'25' ; Set Baud rate 9,6 kBPS bei 4 MHz
movwf SPBRG
bcf STATUS,RP0 ; Bank 0

bei 4 MHz bist du bei 2400 Baud

Lt. Datenblatt

Versuche mal:

; USART Baudrate einstellen
bsf STATUS,RP0 ; Bank1
movlw D'6' ; Set Baud rate 9,6 kBPS bei 4 MHz
movwf SPBRG
bcf STATUS,RP0 ; Bank 0

Gruß Wolfgang

Scuido
19.08.2008, 13:30
hey,

habe ich mir auch schon gedacht.
ich habe aber BRGH auf 1 gesetzt. daher muss man 25 nehemen um auf 9,6 zu kommen. wenn du BRGH auf 0 setzt hast du natürlich recht. einzige problem ist nur bei BRGH = 0, dass der Fehleranteil bei ca 7% liegt und bei BRGH = 1 nur bei 0,16%


gruß
André

ossy
19.08.2008, 15:48
Hallo,

da war ich zu schnell im Datenblatt.

Gruß

Wolfgang

Scuido
21.08.2008, 18:51
hey,


also ich habe nun alles ausprobiert (hardware und software) und immer habe ich das problem, dass das terminalprogramm verdammt viele bytes anzeigt obwohl ich nur ein sende. er empfängt so lange bytes bis ich alles ausschalte.

ich weiß net mehr weiter
gruß
andre

ossy
22.08.2008, 07:57
Hallo Andre,

ich wede Dir mal eine HEX-Datei zukommenlassen. Die solltest DU dann mal reinbrennen, und mir bescheidgeben ob es funktiniert.

Kann ich aber erst heute abend.

Gruß Wolfgang

Scuido
23.08.2008, 11:52
hey danke,

habe den 16F877A :)

gruß
André

ossy
23.08.2008, 21:02
Hallo Andre,

mit dem Hexcode sendet der PIC jede sec. ein " W ".

Brenns rein und probiers mal aus.


:100000000428FF3FFF3FFF3F67300313831699002B
:10001000181531202008573A031D30282008A10068
:1000200046200630FC00FF30FB00FF30FA00FC0BDE
:100030001A282128FB0B1D282028FA0B1D281A2816
:1000400017281A30FB00FF30FA00FB0B28282B285A
:10005000FA0B282825284230FA00FA0B2D280A2806
:100060003028031383169816903083129800831655
:100070008717071383120C08F1000030F11A0130C2
:10008000F1007108013A03193A2808000313831696
:100090001808F1000030F1180130F1007108003A41
:1000A000031D5428000046288312210899000800E7
:02400E007A3FF7
:00000001FF



Gruß

Wolfgang

ossy
23.08.2008, 21:06
Hallo Andre,

Baud rate 2400 BPS bei 4 MHz

Gruß
Wolfgang

Scuido
26.08.2008, 22:16
Hey, habe es probiert. funktioniert 1a. keine ahnung warum es nicht vorher ging. klappt nun auch mit meinem code.
gruß
andré