Réception rc5 et transmission rs232 avec pic 16f84

Soyez le premier à donner votre avis sur cette source.

Snippet vu 66 865 fois - Téléchargée 29 fois

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

Ajouter un commentaire Commentaires
Sirocooo Messages postés 412 Date d'inscription mercredi 19 décembre 2001 Statut Membre Dernière intervention 7 avril 2008 1
12 juin 2002 à 00:48
Génial c'est ce que je cherchais pour télécomander mon PC
Merci et bravo

je suis friand de prog en rapport avec la RS232. Entre autre je cherche des sources
vb ou asm pour espionner le port serie en RX et en TX.
FloZix Messages postés 42 Date d'inscription dimanche 3 mars 2002 Statut Membre Dernière intervention 24 juin 2008
12 juin 2002 à 10:32
Content d'avoir rendu service.
Si vous cherchez le schéma électronique d'une télécommande envoyer moi un message je vous l'enverrai. A savoir que n'importe quel télécommande RC5 peu faire l'affaire mais il faut analyser la trame qu'elle envoie à l'oscilloscope pour changer les bits à tester et surtout pour affiner voir même changer les tempos du PIC.
Pour envoyer avec le port série c’est pareil que la réception (cf. la source de VBFrance.com) mais avec SENDBYTES.
@+
RC516F84 Messages postés 2 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 15 septembre 2003
15 sept. 2003 à 16:35
C'est exactement ce que je cherchais à quelques détails pres mais je m'en accomoderai. Cependant le listing pourrais etre un peut plus détaillé sur le fonctionnement ;-)
cs_garaze Messages postés 2 Date d'inscription lundi 2 juin 2003 Statut Membre Dernière intervention 7 mai 2005
7 mai 2005 à 04:46
Bonjour je n'arrive pas a telecharger le fichier zip.

Merci de le mettre a dispo.
hexanium Messages postés 32 Date d'inscription mercredi 20 avril 2005 Statut Membre Dernière intervention 26 septembre 2005
23 juin 2005 à 15:39
Salut,
Merci pour ce code, j'ai juste un soucis, c la tempo de 1778µs quand je fais le calcul je trouve en gros 771 cycles,serait il possible de décrire le comptage de ta tempo:
Mon detail:
6c d'init avec le CALL +
( 91 + 160 ) x 3 c +
10c tests des 3 boucles +
2c le retrun
cela me donne 771 cycles ?

Quelqu'un peut m'indiquer mon erreur ou me dertailler la tempo ?

Merci

A++

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.