Hallo
ich bin noch recht neu in dem Bereich was µC an geht und hab vor einer Weile angefangen mich mit dem pic16f628 vertraut zu machen.
besonders mit der RS232 kommunikation, worüber ich mit nem alten Notebook kontakt zum pic aufnehmen will.
Das Empfangen von bytes mit dem pic klappt mittlerweile auch. Allerdings klappt es nur (pic läuft mit intosc 4mhz) wenn ich ins Register SPBREG 6 schreibe und in TXSTA, BRGH=0 setze (9600 Baud). Obwohl auf sprut.de steht dass diese einstellung zu unzulässiger Abweichung kommt (und somit zu Lesefehlern). Eigendlich müßte ich BRGH=0 und SPBRG=25 setzen. Aber mit den Einstellungen kommt nur bit-Salat an.
Kann dass der Frequenzabweichung des internen Oszillators liegen?
Weiteres Problem:
Ich schaffe es einfach nicht Daten mit dem PIC zu senden (obwohl das ja eigendlich einfacher sein soll als Empfangen).
An dieser seite hab ich mich gehalten:
http://sprut.de/electronic/pic/grund/rs232.htm
aber nicht erfolgreich was das Daten senden betrifft.
vielleicht sieht jemand den Fehler im Code oder kann mir Tipps geben.
ich benutze den Pegelwandler MAX232 um mit dem PC zu kommunizieren.
mit dem Oszi kann ich überprüfen ob sich an den pins was tut. besonders Pin 8 (TX)
im normalen I/O modus kann ich den pin ansteuern.
ich wäre sehr dankbar wenn mir jemand helfen kann.Code:list p=16f628 ;************************************ ;* ;* ;* Pinbelegung ;* ---------------------------------- ;* PORTA: 0 (RA0) a ;* 1 (RA1) b ;* 2 (RA2) c ;* 3 (RA3) d ;* 4 (RA4) e ;* 5 (RA5) - ;* 6 (RA6) f ;* 7 (RA7) g ;* PORTB: 0 ;* 1 (RX) rot vom Treiber ;* 2 (TX) blau zum Treiber ;* 3 ;* 4 ;* 5 ;* 6 ;* 7 ;* ;* ;* ;* ;* ;* #include <p16f628.inc> __CONFIG _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT & _BODEN_OFF zeichen equ 0x20 org 0x00 ; empfangenen wert aus RCREG lesen und an Port A ausgeben ; initialisieren BSF STATUS, RP0 ; auf Bank 1 umschalten CLRF TRISA ; PORTA auf Output BCF STATUS, RP0 ; auf Bank 0 zurückschalten BSF CMCON, CM0 ;Comparatoren ausschalten BSF CMCON, CM1 ;damit PORTA BSF CMCON, CM2 ;als IO genutzt werden kann ; USART initialisieren und Baudrate einstellen MOVLW b'00100100' MOVWF TXSTA MOVLW b'10010000' MOVWF RCSTA BSF STATUS,RP0 ; Bank1 BCF STATUS,RP1 ; Bank1 MOVLW 6 ; Set Baud rate 9,6 kBPS bei 4 MHz MOVWF SPBRG BCF TXSTA, BRGH ; BRGH=0 BCF STATUS,RP0 ; Bank 0 clrf PORTA ;porta auf low schalten RS232in btfss PIR1,RCIF ; sind Daten da ? goto RS232in ; nein, noch keine Daten da movf RCREG, w ; RS232-Register auslesen movwf zeichen movlw 0x30 ; zahl in w setzen subwf zeichen, w ;w von zeichen abziehen und in w speichern movwf PORTA ; und in das register von PORTA schreiben movwf TXREG ; Das Byte wieder zurück senden (was aber nicht funzt) goto RS232in end
gruß Applegunner







Zitieren

Lesezeichen