Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

RÉCEPTION RC5 ET TRANSMISSION RS232 AVEC PIC 16F84


Information sur la source

Catégorie :Les PIC Niveau : Débutant Date de création : 11/06/2002 Date de mise à jour : 11/06/2002 15:44:20 Vu : 33 522

Note :
8 / 10 - par 3 personnes
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
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

  • #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
	#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).

 

Commentaires et avis

signaler à un administrateur
Commentaire de Sirocooo le 12/06/2002 00:48:34

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.

signaler à un administrateur
Commentaire de FloZix le 12/06/2002 10:32:49

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.
@+

signaler à un administrateur
Commentaire de RC516F84 le 15/09/2003 16:35:44

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 ;-)

signaler à un administrateur
Commentaire de garaze le 07/05/2005 04:46:37

Bonjour je n'arrive pas a telecharger le fichier zip.

Merci de le mettre a dispo.

signaler à un administrateur
Commentaire de hexanium le 23/06/2005 15:39:28

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++

signaler à un administrateur
Commentaire de hexanium le 23/06/2005 16:05:20

;Tempo de 1.78 ms (durée d'un bit à la norme RC5)
TEMPO_BIT_RC5 ; +2µs - Appel
   movlw 0x03 ; +1µs - ( 0x03 = 3 )
   movwf   TempoRC5_2 ; +1µs  
   movlw   0x50 ; +1µs - ( 0x50 = 80 )
movwf   TempoRC5_1 ; +1µs  
TEMPO_BIT_RC5_LOOP
   decfsz  TempoRC5_1 ; +1µs - ( 80 x 1 ) + 2 + ( 255 x 1 ) + 2 + ( 255 x 1 ) + 2 = 596
   goto    TEMPO_BIT_RC5_LOOP ; +2µs - ( 80 x 2 ) + ( 255 x 2 ) + ( 255 x 2 )             = 1180
   decfsz  TempoRC5_2 ; +1µs - (    1   ) + (    1    ) + (    2   )              = 4
goto    TEMPO_BIT_RC5_LOOP ; +2µs - (    2   ) + (    2    ) + (    2   )              = 6
   return ; +2µs

; Total: 1794µs

quelqu'un peut il confirmer ce calcul ?

je trouve 1794 au lieu de 1778 soit 16 µs de plus que la theorie, est ce génant ?
Est ce le bon calcul ?
En effet il y'a des jumps en plus qui on l'air d'avoir été négligé non ?

si je fais (3*80 ) + (3*255) + (3*255) = 1770 µs
si on rajoute l'init et le return 8    = 1778 µs
Mais j'ai l'impression qu'il y'a des jump qui n'on pas été pris en compte non ?

A++

signaler à un administrateur
Commentaire de natan01 le 12/09/2005 20:19:03

je trouve ce code tres interessant. moi j'aimerais le faire en VB. pouviez le mettre en ligne. merci en avance.

signaler à un administrateur
Commentaire de fouad177 le 11/02/2007 12:28:19

salut merci de se programme mais j'ai un probleme dans mon projet:je doit fair l'acquisition et l'affichage des signaux polyvalent via une carte d'acquisition et je crois que se code en assembleur va aider au partier d'acquisition mais comment fair pour afficher se signal est je utulise le port serie c'est tu as un programme dans se sens aider moi slp est voisi mon adresse email<< fouad_177@hotmail.com >>

signaler à un administrateur
Commentaire de didouni_ahlem le 26/02/2007 09:04:56

est ce que vous pouvez ajouter le code Vb (et si t'as le fais vous pouvez nous donner la référence) et merci d'avance

signaler à un administrateur
Commentaire de nesma le 21/04/2007 11:19:07

bonjour
je besoin d'un programme en microC (programmation de PIC 16F84A)pour la conversion de trame rc5 (code rc5 de commande universel)en trame rs232 pour la télèpilatage des equipements multimédias par courant porteur de ligne   (tv, vcr...)notre email abir.najeh@yahoo.fr
merci d'avance.

signaler à un administrateur
Commentaire de sacha04 le 23/05/2007 16:06:41

BJR ts le monde j ai un probleme avec mon projet: envoie de caractere par un pic 16F84 je pense qu il a pas de synchronisation entre le tx sortant du pic et le rs 232 ;pouvez vs me donnez un coup de main s il vs plait en faite mon projet est sys d alarme par envoie de gsm ;bon ts d abord les commande at marche a merveille mais le programme en assembleur nn .
j espere que j aurai une reponse le plus tot possible je vs serai reconnaissant merci ."sacha_jen@hotmail.com"ou slaveofpeace@hotmail.fr "  a l aide ..................

signaler à un administrateur
Commentaire de sacha04 le 23/05/2007 16:07:49

slaveofpeacereturn@hotmail.fr  dsl je ss fatigue...

signaler à un administrateur
Commentaire de sacha04 le 02/06/2007 23:36:44

c fé le programme ca marche bien mnt pas besoin d'aide qui vt l'aide sur se projet on peu l'aidé .
pistoos la prochain fios n'ecris pas mon adresse sur les forume c pas bien ok chaftek chowafa

signaler à un administrateur
Commentaire de azian456 le 10/06/2007 17:54:48

salut,j'ai le mem projet et j'ai besion de quelque explication sur le branchement de la pate 4 (MCLR) du pic SVP!!
merci d'avance

signaler à un administrateur
Commentaire de sacha04 le 12/06/2007 20:12:31

azian voila msn slaveofpeacereturn@hotmail.fr ou sur sacha_jen@hotmail.com notre programe et open source on le donne a n'importe ki vive le gratuit

signaler à un administrateur
Commentaire de lamihi le 13/12/2007 03:47:50

merci pour ce programme.
j'ai un projet sous le theme "commande d'un moteur pas à pas par le port série du pc a l'aide de l'assembleur 8086" et j'aimerai bien que tu m'aide et c'est gentil de ta part

signaler à un administrateur
Commentaire de sid34 le 18/12/2007 21:18:11

merci pour ce programme

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Octobre 2008
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,109 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.