Hallo,

Voor school ben ik bezig met een projekt waarbij data over RS232 moet worden verzonden. Hiervoor moet eerst een simpele demo opgezet worden om te laten zien dat je data kunt verzenden. Ik ben hier inmiddels al 3 dagen mee bezig maar het wil niet lukken.

Mijn bedoeling is om de status van 4 schakelaars door sturen van de ene PIC naar de andere via RS232 en deze weer te geven om een viertal LED's. We willen hiervoor de USART van de PIC 16f628 gebruiken.

Dit is een link naar het schema van den opstelling.

http://www.mijnalbum.nl/Album=BSVLVVC6

Dit is de code voor de ontvanger in PIC assembly.


	  	list		p=16f628
		#include	"p16F628.inc"

		__CONFIG _CP_OFF & _LVP_OFF &_BODEN_ON & _MCLRE_OFF  & _PWRTE_ON & _WDT_OFF &_INTRC_OSC_NOCLKOUT


	;TRISB
rx equ d'1'				;set
tx equ d'2'				;clear

	;TRISA
pin0 equ d'0' ;clear in ontvanger
pin1 equ d'1' ;clear in ontvanger
pin2 equ d'2' ;clear in ontvanger;
pin3 equ d'3' ;clear in ontvanger
	
	;SPBRG
baudrate equ d'25'

	;PIR1
RCIF equ d'5'
	

	org 00

;------------------------------------------------------------------

init 
	;bank switch
	bsf STATUS,RP0
	bcf STATUS,RP1 ;naar bank 1


	;TXSTA
	bsf TXSTA,BRGH
	bcf TXSTA,SYNC
	bsf TXSTA,TXEN
	bcf TXSTA,TX9
 	
	;SPBRG
	movlw baudrate
	movwf SPBRG
	
	;TRISA
	bcf TRISA,pin0
	bcf TRISA,pin1
	bcf TRISA,pin2
	bcf TRISA,pin3

	;TRISB
	bsf TRISB,rx
	bcf TRISB,tx
	
	;bank switch
	bcf STATUS, RP0
	bcf STATUS, RP1 ;naar bank 0

	;RCSTA
	bsf RCSTA,CREN
	bcf RCSTA,RX9
	bsf RCSTA,SPEN
	
;-------------------------------------------------------------------
main
	btfss PIR1,RCIF	
	goto main
	movfw RCREG
	movwf PORTA
	clrf RCREG
	goto main

end

En dit is de code voor de zender.

	  	list		p=16f628
		#include	"p16F628.inc"

		__CONFIG _CP_OFF & _LVP_OFF &_BODEN_ON & _MCLRE_OFF  & _PWRTE_ON & _WDT_OFF &_INTRC_OSC_NOCLKOUT



	;TRISB
rx equ d'1'				;set
tx equ d'2'				;clear

	;TRISA
pin0 equ d'0' ;set in zender
pin1 equ d'1' ;set in zender
pin2 equ d'2' ;set in zender
pin3 equ d'3' ;set in zender
	
	;SPBRG
baudrate equ d'25'

	org 00

;------------------------------------------------------------------

init 
	;bank switch
	bsf STATUS,RP0
	bcf STATUS,RP1 ;naar bank 1


	;TXSTA
	bsf TXSTA,BRGH
	bcf TXSTA,SYNC
	bsf TXSTA,TXEN
	bcf TXSTA,TX9
 	
	;SPBRG
	movlw baudrate
	movwf SPBRG
	
	;TRISA
	bsf TRISA,pin0
	bsf TRISA,pin1
	bsf TRISA,pin2
	bsf TRISA,pin3

	;TRISB
	bsf TRISB,rx
	bcf TRISB,tx
	
	;bank switch
	bcf STATUS, RP0
	bcf STATUS, RP1 ;naar bank 0

	;RCSTA
	bsf RCSTA,CREN
	bcf RCSTA,RX9
	bsf RCSTA,SPEN
	
;------------------------------------------------------------------
main

	movfw PORTA
	movwf TXREG
	goto main
end

Ik heb hier al met 2 mensen naar zitten kijken maar we krijgen dit niet aan de praat. We hebben tot nu toe alleen de gelegenheid gehad om te testen zonder de max 232 ic's en met de PIC's direct aan elkaar. In de simulator worden de juiste registers voor de initialisatie gewoon op de juiste manier geladen. Als dit in theorie zou moeten werken zullen we onze opstelling opnieuw moeten controleren. We kunnen onszelf niet bedenken wat we fout doen. We dachten eerst nog dat we de MCLR aansluiting vergeten waren maar die is gewoon intern doorgelinkt met VCC.

Kunnen jullie ons helpen????

Grt
Christian.

Prima idee om ze eerst gewoon met elkaar te verbinden.
MCLR moet via een weerstand (ca 10K naar de +).
Ik zie geen indicatie over de kloksnelheid in je fuses, dus ik ga uit van de interne klok. Klopt je baudrate berekening daar mee?
Houd er rekening mee dat PORTA default analoog is. Je schema lijkt PORTA echter digitaal te gebruiken ! Check ADCON en CMCON!

Heeey,

Bedankt voor de reactie ik ga het morgen proberen.
Volgens de datasheet is de MCLR gewoon uit te schakelen of te wel intern door te linken. Dat wordt geloof ik in de eerste regel "config" gedaan. Met het commando MCLRE_OF.

Grt
Christian.

Ik citeer uit de datasheet:

Chapter 12: USART
Bit SPEN (RCSTA<7>), and bits TRISB<2:1>, have to
be set in order to configure pins RB2/TX/CK and RB1/
RX/DT as the Universal Synchronous Asynchronous
Receiver Transmitter.

Zoek de fout...
(En ik neem het je niet kwalijk, heeft me ook een week gekost ooit..)

Het probleem lijkt te zitten in het VRCON register. Hierin staan instellingen wat betreft de voltage reference module. Deze moet uitgeschakeld worden. De TRISA staat nu ook goed en in het CMCON register lijk ik niks te kunnen selecteren qua uitgangen.

Ik ga morgen controleren of hij het doet. Dan laat ik van mij horen.

Alvast bedankt!!!!!!!!!!!!!!!!!!!

Lees in de datasheet het hoofdstuk over PORTA/TRISA. PORTA is default analoog.


CLRF PORTA ;Initialize PORTA by
;setting
;output data latches
MOVLW 0x07 ;Turn comparators off and
MOVWF CMCON ;enable pins for I/O
;functions

VRCON is alleen voltage reference, maar ik zie niet dat je dat gebruikt. Let op dat VRCON en CMCON hetzelfde register lijken te zijn, ze zitten alleen in twee verschillende banken.
En zoals Jochem al zei, altijd je TRISX registers initialiseren.
In hoofdstuk 12 staat wat je stap voor stap moet doen voor de verschillende synchronisatiemodi.

Het setten van de TRISX regsters had ik zeker al gedaan. Alleen moeten de beide pinnen als input "geset" zijn terwijl er bij de TX toch echt data uit gaat. Vind ik zelf wat onlogisch.

Verder zijn de registers CMCON en VRCON allebei voor een verschillende functie. CMCON is voor de ingebouwde comparators en VRCON is voor het ingebouwde "reference voltage" gedeelte.

Ik heb inmiddels het CMCON register op de juiste waarde gezet.

Ik ga het morgen testen als ik op een van de 8 werkende computers op school terecht kan;)

Grt
Christian

HIJ DOET HET!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Duizend maal dank namens onze complete projectgroep!!!!!!!!!!!!!

[Bericht gewijzigd door kees22 op (36%)]

Copy Paste (a)

Handig met meerdere mensen op het forum die soort van hetzelfde moeten maken...

Maargoed, UART uitzoeken is niet mijn taak :p
Ik weet niet steeds niet wie jij bent:P

Nog steeds niet??

Zelfs niet als ik mijn echte naam onder mijn berichten zet???????:P:P:P:P

Ik stel me morgen wel ff voor bij VHDL.

Grt
Christian