Réception rc5 et transmission rs232 avec pic 16f84

Contenu du snippet

Ce code permet de décoder un signal de norme RC5 (protocole des télécommandes Philips et autres) et de l'envoyer sur la liaison série d'un PC (RS232).
La réception de la trame série peut se faire avec un programme en Visual Basic. Si ça intéresse quelqu'un je peux mettre un exemple de programme.
Ce bout de code ne test que les 4 derniers bits de la trame RS232 ( trame RC5 = 14 Bits)

Source / Exemple :


#include<p16f84>
	LIST p=16F84

; initialisation des registres 

indf 		equ h'00'
tmr0		equ h'01'
pcl		equ h'02'
status		equ h'03'
fsr		equ h'04'
porta		equ h'05'
portb		equ h'06'
intcon		equ h'0B'
trisa		equ h'85'
trisb		equ h'86'
r_option	equ h'81'

; initialisation des variables

cmp1	equ h'0C'
cmp2	equ h'0D'
donn	equ h'0E'

; initialisation des ports A & B

	org h'00'

	clrf	status
	clrf	porta
	clrf	portb
	bsf	status,5
	movlw	b'00011011'
	movwf	trisa
	movlw	b'00000000'
	movwf	trisb
	bcf	status,5
	clrf	status
	clrf	porta
	clrf	portb
	movlw	h'00'
	movwf	intcon
	clrf	cmp1
	clrf	cmp2
	clrf	donn
	bsf	porta,2

; debut du programme

test1	btfsc	porta,0
	goto	test1

	bsf	portb,1
	bsf	portb,2
	bsf	portb,3
	bsf	portb,4

	call	tempo2
	btfss	porta,0
	bcf	portb,3
	btfss	porta,0
	bsf	donn,3

	call	tempo1
	btfss	porta,0
	bcf	portb,2
	btfss	porta,0
	bsf	donn,2

	call	tempo1
	btfss	porta,0
	bcf	portb,1
	btfss	porta,0
	bsf	donn,1

	call	tempo1
	btfss	porta,0
	bcf	portb,4
	btfss	porta,0
	bsf	donn,4

; envoie au max232 de la trame RS232

	bcf	porta,2
	call	tempo3
	btfsc	donn,1
	bsf	porta,2
	call	tempo3
	btfsc	donn,2
	bsf	porta,2
	btfss	donn,2
	bcf	porta,2
	call	tempo3

	btfsc	donn,3
	bsf	porta,2
	btfss	donn,3
	bcf	porta,2
	call	tempo3

	btfsc	donn,4
	bsf	porta,2
	btfss	donn,4
	bsf	porta,2
	call	tempo3
	call	tempo3
	call	tempo3
	call	tempo3
	bsf	porta,2

	goto	test1

; sous programmes

; tempo de 1.78 ms (durée d'un bit à la norme RC5)

tempo1	movlw 	h'03'
	movwf	cmp2
	movlw 	h'50'
	movwf	cmp1
t1	decfsz	cmp1
	goto	t1
	decfsz	cmp2
	goto	t1
	return

; tempo de 17,8 ms (durée des 10 premiers bits qu'on ne regarde pas)

tempo2	movlw 	h'16'
	movwf	cmp2
	movlw 	h'00'
	movwf	cmp1
t2	decfsz	cmp1
	goto	t2
	decfsz	cmp2
	goto	t2
	return

; tempo de 1200 bauds (833 µs, correspond à la vitesse choisie de la liaison RS232)

tempo3	movlw 	h'0F'
	movwf	cmp2
	movlw 	h'02'
	movwf	cmp1
t3	decfsz	cmp1
	goto	t3
	decfsz	cmp2
	goto	t3
	return

	end

Conclusion :


Le circuit se veut relativement simple :
une tête réceptrice qui pré amplifie, filtre et démodule le signal RC5 (TSOP 18 par exemple)
un PIC 16F84
un MAX232 ( pour adapter les niveaux logiques pour la liaison RS232)

Attribution des ports :
RA1 : sortie de la tête réceptrice
RA2 : entrée du MAX 232
RB1 : led
RB1 : led
RB1 : led
RB1 : led
Notes : les leds sont allumées sur des « 0 »
Le câble qui relit la carte à l’interface et connecté à la sortie du MAX 232

Suite à des demandes j'ai rajouté le schéma simplifié du montage comme capture d'écran et j'ai posé le logiciel (du moins la base du logiciel) de reception sur vbfrance.com (LECTURE D'INFORMATIONS SUR RX DU PORT SERIE AVEC PORT.DLL).

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.