Bienvenue aux nouveaux arrivants sur FantasPic !
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.
--- L’équipe FantasPic ---
Modérateur : mazertoc
Emetteur RC5 8 canaux
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour à toute l'équipe,
Après avoir finalisé le récepteur RC5, je souhaite réaliser la partie émetteur en utilisant tjrs un PIC 16f84.
J'ai réfléchit en utilisant le port B pour le clavier avec RB0 à RB3 en colonne et RB4 à RB7 pour les lignes. Chaque touche serait écrit dans l'eeprom et l'appui sur l'une d'entre elle me permettrait d'aller pointer à l'adresse dans l'eeprom et envoyer le code sur la diode IR.
Tout ça semble très facile à mettre en oeuvre mais là où je coince c'est pour attaquer ce programme.
En fouillant la toile, j'ai trouvé ceci qui me semble pas mal si je me contente de l'essentiel dont j'ai besoin.
Le seul hic c'est que le lien ci-dessous m'envoie des fichiers en .prn qu'il m'est impossible d'ouvrir même avec LPT1
http://laurent.deschamps.free.fr/ir/tel ... mot_ir.htm
Si qq'un à une combine pour ouvrir ces fichiers qui doivent apporter bcp à la compréhension, ce serait super!
Ou peut-être que qq'un du forum a déjà réaliser qq chose à ce sujet; ce qui serait encore mieux
Après avoir finalisé le récepteur RC5, je souhaite réaliser la partie émetteur en utilisant tjrs un PIC 16f84.
J'ai réfléchit en utilisant le port B pour le clavier avec RB0 à RB3 en colonne et RB4 à RB7 pour les lignes. Chaque touche serait écrit dans l'eeprom et l'appui sur l'une d'entre elle me permettrait d'aller pointer à l'adresse dans l'eeprom et envoyer le code sur la diode IR.
Tout ça semble très facile à mettre en oeuvre mais là où je coince c'est pour attaquer ce programme.
En fouillant la toile, j'ai trouvé ceci qui me semble pas mal si je me contente de l'essentiel dont j'ai besoin.
Le seul hic c'est que le lien ci-dessous m'envoie des fichiers en .prn qu'il m'est impossible d'ouvrir même avec LPT1
http://laurent.deschamps.free.fr/ir/tel ... mot_ir.htm
Si qq'un à une combine pour ouvrir ces fichiers qui doivent apporter bcp à la compréhension, ce serait super!
Ou peut-être que qq'un du forum a déjà réaliser qq chose à ce sujet; ce qui serait encore mieux
Code : Tout sélectionner
;*****************************************************************************
;* *
;* Envoi de codes infra-rouges par t‚l‚commande *
;* *
;* par Laurent Deschamps & Christophe Bonn‚ry, ‚lŠves Sup‚lec *
;* *
;*****************************************************************************
;
; ATTENTION ! Ce programme est une version modifi‚e du programme telecomm.asm,
; ‚l‚ment du projet COMMUTATION AUDIO A COMMANDE INFRA-ROUGE.
;
;
; PRESENTATION DU PROGRAMME.
;
; Ce programme tourne sur un PIC16C84, cadenc‚ par un quartz … 2*1,8432 MHz.
; telecomm.asm a ‚t‚ ‚crit pour un PIC utilisant un quartz de 1,8432 MHz.
;
;
;
;
; STRUCTURE DU PROGRAMME.
;
; DECLARATIONS
; CONFIGURATIONS
;
; DEBUT BOUCLE PRINCIPALE
; Appelle KeyScan
; Appelle Envoie_Code
; FIN BOUCLE PRINCIPALE
;
;**** SOUS-PROGRAMMES:
;
; KEYSCAN : Boucle
; : test des touches -> si touche appuy‚e, RETOUR avec code.
; sinon : mise en veille
; : Au r‚veil (appui sur 1 touche),
; -> Boucle.
; FIN KEYSCAN
; ENVOIE_CODE
; Traite l'envoi du code suivant la touche enfonc‚e.
; FIN ENVOIE_CODE
;
; note: ENVOIE_CODE se sert de 2 sous-programmes ENVOIE_1 et ENVOIE_0 dont
; le r“le est d'envoyer un ‚tat respectivement allum‚ ou ‚teint avec porteuse
; pendant une dur‚e pass‚e en paramŠtre (dans le registre W).
;
;*****************************************************************************
; NOTE IMPORTANTE
;
; Nous utilisons pour d‚tecter l'appui sur une touche le systŠme de grillage
; (voir le rapport).
; Il s'agit d'envoyer un signal sur une ligne et de lire les colonnes.
; Pour des raisons pratiques (pull-up : voir le rapport) ce signal est le
; niveau 0 logique. Donc un niveau 1 logique sur une entr‚e-sortie
; correspond … l'‚tat non activ‚.
; Ceci est encore vrai pour la derniŠre patte d'E/S (RA4) qui commande la
; diode d'‚mission IR.
;*****************************************************************************
;
; Le programme comprend 407 lignes de code et n‚cessite 15 octets de RAM.
;
;****************************** R‚f‚rences ***********************************
;
; Programme : telecomm.asm
; R‚vision : V 2.3 mars 97
; Auteurs : Laurent.Deschamps@supelec.fr
; & Christophe.Bonnery@supelec.fr
;
;*****************************************************************************
LIST P = 16C84
LIST F = INHX8M
__config H'3F1A';
;**************************** DECLARATIONS ***********************************
;
;--------- CONSTANTES PIC
;
PIC84 EQU 000H ; d‚but du code
RAM EQU 0CH ; d‚part de la RAM
PC EQU 2H ; adresse du compteur ordinal
RETOUR_INT EQU 004H ; adresse g‚n‚r‚e dans PC aprŠs interruption
OPT EQU 1H ; adresse du registre d'options (banc 1)
RTCC EQU 1H ; adresse du timer (banc 0)
STATUS EQU 3H ; adresse du registre d'‚tat
; bits du registre d'‚tat
Z EQU 2H ; NUL
CY EQU 0H ; CARRY
RP0 EQU 5H ; choix du banc (RP0=1 : banc 1)
INTCON EQU 00BH ; adresse du registre d'interruptions
T0IF EQU 2H ; bit flag: TMR0 a fini de compter
PORT_A EQU 5H ; (banc 0)
PORT_B EQU 6H ; (banc 0)
TRISA EQU 5H ; (banc 1)
TRISB EQU 6H ; (banc 1)
W EQU 0H ; mn‚moniques pour les instructions …
F EQU 1H ; 2 op‚randes
;
;---------- CONSTANTES RC5
;
RC5_CODE_ECOUTE EQU H'FF' ; bits de commande pour le mode ‚coute
RC5_CODE_ENR EQU B'00101000' ; " " " " enregistrement
;
;---------- CONSTANTES CODES
;
YAM_pwr EQU H'F8'
YAM_volm EQU H'D8'
YAM_volp EQU H'58'
SONY_stop EQU H'1D'
SONY_pause EQU H'9D'
SONY_lect EQU H'4D'
SONY_plagep EQU H'0D'
SONY_plages EQU H'8D'
SONY_recharr EQU H'CD'
SONY_rechav EQU H'2D'
PIO_pwr EQU H'3C'
PIO_statm EQU H'87'
PIO_statp EQU H'0F'
TEC_lecav EQU H'54'
TEC_lecarr EQU H'DC'
TEC_stop EQU H'01'
TEC_pwr EQU H'BA'
TEC_recharr EQU H'45'
TEC_rechav EQU H'CD'
TEC_rec EQU H'10'
TEC_AB EQU H'AB'
RC5_AUX EQU B'11010101'
RC5_CD EQU B'11010100'
RC5_TUNER EQU B'11010001'
RC5_TAPE1 EQU B'11010010'
RC5_TAPE2 EQU B'11001011'
RC5_VCR EQU B'11000111'
RC5_PC EQU B'11001111'
RC5_PHONO EQU B'11001101'
BANDE_arr EQU B'10110000'
BANDE_av EQU B'10111000'
BANDE_lect EQU B'11010100'
BANDE_pwr EQU B'00110000'
BANDE_stop EQU B'10011000'
;
;
;
; ------ VARIABLES
;
ORG RAM
code_touche res 1 ; num‚ro de la touche enfonc‚e
compt res 1 ; compteur
compt2 res 1 ; compteur bis
mult5 res 1 ; multiple de 5 : en-tˆte de ligne
colonne res 1 ; (mult5+nøcolonne=code_touche)
R res 1 ; 1 si ENR appuy‚e, 0 sinon
code res 6 ; mot binaire … envoyer
test_relache res 1 ; bool‚en pour Yamaha
duree_0 res 1 ; pour header/stopcode Yamaha
duree res 1 ; pour param‚trage de ENVOIE_1 et ENVOIE_0
;*****************************************************************************
;*************************** DEBUT DU PROGRAMME ******************************
;*****************************************************************************
;
ORG PIC84
GOTO DEBUT
;
ORG RETOUR_INT ; a priori on ne passera jamais par ces trois
CALL INITINT ; lignes car il n'y aura jamais d'interruption
RETFIE ; effective : bit g‚n‚ral de INTCON (GIE) … 0.
DEBUT CALL INIT
MAIN CALL KEYSCAN
CALL ENVOIE_CODE
GOTO MAIN
;**********-------- INITIALISATION ------------**********
INIT BSF STATUS,RP0 ; passage au banc 1
MOVLW B'00000' ; toutes les pattes du port A en sortie
MOVWF TRISA
MOVLW B'11110001' ; RB0 et RB4-RB7 en entr‚e
MOVWF TRISB
MOVLW B'00000111' ; Options: pull-ups actifs, interruption sur
MOVWF OPT ; front descendant, TMR0 sur cycle interne,
CALL INITINT ; rapport 1:256 pour TMR0 (sert pour les WAIT)
BCF STATUS,RP0 ; on revient au banc 0
RETURN
;***********------- TEST DES TOUCHES ---------*********
KEYSCAN
CLRF code_touche
TEST_R CLRF R ; on suppose ENR non appuy‚e
MOVLW B'11111101' ; On envoie un signal sur RB1 : correspond
MOVWF PORT_B ; … la ligne de la touche ENR
MOVLW B'11111' ;
MOVWF PORT_A
BTFSS PORT_B,0 ; Test : si RB0 est … 0, c'est qu'on a appuy‚
BSF R,0 ; sur ENR
; test ligne par ligne
CLRF mult5 ; pour la premiŠre ligne, mult5=0
; on rappelle: code_touche=mult5+colonne
LIGN_B MOVLW B'11111101' ;
MOVWF compt ; on commence par tester RB1
BCL_B MOVLW B'11111' ;
MOVWF PORT_A ; inactivation des lignes RAn
MOVF compt,W
MOVWF PORT_B ; envoi sur RB1 ou RB2 ou RB3
SETC ; CARRY … 1 pour pr‚parer la rotation gauche
RLF compt,F
CALL LIT_ET_CODE ; note: LIT_ET_CODE incr‚mente mult5
MOVLW B'11101111'
SUBWF compt,W
BTFSS STATUS,Z
GOTO BCL_B
; on a test‚ RB1,RB2,RB3
LIGN_A MOVLW B'11110' ; on recommence avec RA0
MOVWF compt
BCL_A
MOVLW H'FF' ; inactivation des lignes RBn
MOVWF PORT_B ;
MOVF compt,W ; envoi de 11110 ou 11101 ou 11011 ou 10111
MOVWF PORT_A ; sur port A
SETC ; CARRY … 1 pour pr‚parer la rotation gauche
RLF compt,F
CALL LIT_ET_CODE ; note: LIT_ET_CODE incr‚mente mult5
MOVLW B'11101111' ;
SUBWF compt,W ;
BTFSS STATUS,Z ; test: a-t-on trait‚ toutes les lignes ?
GOTO BCL_A ;
MOVF code_touche,W
BTFSS STATUS,Z ; test : est-ce qu'une touche a ‚t‚ appuy‚e ?
GOTO REVIENT ; oui, on revient (pour ‚mettre)
CLRF PORT_A ; non, on passe en mode sleep, avec toutes
CLRF PORT_B ; les lignes activ‚es
BSF PORT_A,4 ; en n'oubliant pas d'‚teindre la LED !
CALL INITINT
SLEEP
GOTO KEYSCAN
REVIENT
MOVLW B'11111' ;
MOVWF PORT_A ; inactivation de toutes les lignes
MOVLW H'FF' ;
MOVWF PORT_B ;
RETURN
LIT_ET_CODE
RB0 BTFSC PORT_B,0 ; test colonne 1 (<-> RB0)
GOTO RB4_7 ; pas de signal
INCF mult5,W ; signal -> on code, le code s'obtenant par:
MOVWF code_touche ; mult5+nøcolonne (colonne 1 ici).
RB4_7 MOVLW B'11100000' ; Test des colonnes 2 … 5
MOVWF compt2 ; si la colonne<->RB4 est active, les 4 bits
MOVLW D'2' ; de poids fort de compt2 et PORT_B seront
MOVWF colonne ; ‚gaux.
BCL_LIT
MOVLW B'11110000' ; masque : c'est RB7-RB4 qui nous int‚resse
ANDWF PORT_B,W
SUBWF compt2,W
BTFSS STATUS,Z ; signal re‡u ?
GOTO INC_LIT ; non, on va tester la colonne suivante
MOVF colonne,W ; oui, on met … jour code_touche
ADDWF mult5,W
MOVWF code_touche
INC_LIT INCF colonne,F
CLRC ; ex: la premiŠre fois, compt2 passe de
RLF compt2,F ; 11100000 … 11010000, la deuxiŠme
BSF compt2,4 ; … 10110000...
MOVLW B'11110000' ;
SUBWF compt2,W ;
BTFSS STATUS,Z ; test: a-t-on trait‚ toutes les colonnes ?
GOTO BCL_LIT ;
MOVLW D'5'
ADDWF mult5,F ; incr‚ment de mult5
RETURN
;************-------- ENVOI DU CODE --------*****************
;
;---------- ORIENTATION VERS LE S/P CORRESPONDANT AU TYPE DE CODE
ENVOIE_CODE
CLRC
RLF code_touche,W
ADDWF PC,F ; saute : 2*code_touche lignes
NOP ;code_touche=0
NOP
NOP ;code_touche=1 ; ENR a ‚t‚ appuy‚e seule
RETURN
MOVLW RC5_PHONO ;c.t.= 2
GOTO ENV_RC5
MOVLW RC5_PC ;c.t.= 3
GOTO ENV_RC5
MOVLW YAM_volp ;c.t.= 4
GOTO ENV_YAM
MOVLW YAM_volm ;c.t.= 5
GOTO ENV_YAM
MOVLW BANDE_stop ;c.t.= 6
GOTO ENV_BANDE
MOVLW RC5_VCR ;c.t.= 7
GOTO ENV_RC5
MOVLW BANDE_av ;c.t.= 8
GOTO ENV_BANDE
MOVLW BANDE_lect ;c.t.= 9
GOTO ENV_BANDE
MOVLW BANDE_arr ;c.t.= 10
GOTO ENV_BANDE
MOVLW TEC_rec ;c.t.= 11
GOTO ENV_TEC
MOVLW RC5_TAPE2 ;c.t.= 12
GOTO ENV_RC5
MOVLW TEC_rechav ;c.t.= 13
GOTO ENV_TEC
MOVLW TEC_recharr ;c.t.= 14
GOTO ENV_TEC
MOVLW BANDE_pwr ;c.t.= 15
GOTO ENV_RC5
MOVLW PIO_pwr ;c.t.= 16
GOTO ENV_PIO
MOVLW RC5_TUNER ;c.t.= 17
GOTO ENV_RC5
MOVLW PIO_statp ;c.t.= 18
GOTO ENV_PIO
MOVLW PIO_statm ;c.t.= 19
GOTO ENV_PIO
MOVLW TEC_AB ;c.t.= 20
GOTO ENV_TEC
MOVLW TEC_pwr ;c.t.= 21
GOTO ENV_TEC
MOVLW RC5_TAPE1 ;c.t.= 22
GOTO ENV_RC5
MOVLW TEC_lecav ;c.t.= 23
GOTO ENV_TEC
MOVLW TEC_lecarr ;c.t.= 24
GOTO ENV_TEC
MOVLW TEC_stop ;c.t.= 25
GOTO ENV_TEC
MOVLW SONY_plagep ;c.t.= 26
GOTO ENV_SONY
MOVLW RC5_CD ;c.t.= 27
GOTO ENV_RC5
MOVLW SONY_rechav ;c.t.= 28
GOTO ENV_SONY
MOVLW SONY_recharr ;c.t.= 29
GOTO ENV_SONY
MOVLW SONY_plages ;c.t.= 30
GOTO ENV_SONY
MOVLW YAM_pwr ;c.t.= 31
GOTO ENV_YAM
MOVLW RC5_AUX ;c.t.= 32
GOTO ENV_RC5
MOVLW SONY_lect ;c.t.= 33
GOTO ENV_SONY
MOVLW SONY_pause ;c.t.= 34
GOTO ENV_SONY
MOVLW SONY_stop ;c.t.= 35
GOTO ENV_SONY
;------------ ENVOI D'UN CODE RC5 DESTINE AU BOITIER ------------
ENV_RC5
MOVWF code ;11Raaaaa ccccccXX
; code=W code+1
MOVLW RC5_CODE_ECOUTE ;
MOVWF code+1 ; on suppose ecoute
MOVLW RC5_CODE_ENR ;
BTFSC R,0 ; saute si R=0
MOVWF code+1 ; sinon mode enregistrement
CALL RC5_ENV_14 ;
CALL WAIT85ms
GOTO FIN_ENVOI
;------------ ENVOI D'UN CODE SONY -------------------
ENV_SONY
MOVWF code ;ccccccc1 0001
MOVLW B'00010000' ; code=W code+1
MOVWF code+1
MOVLW D'12'
MOVWF compt
;envoi du header
MOVLW D'88' ;4*550æs
CALL ENVOIE_1
MOVLW D'23' ;550æs
CALL ENVOIE_0
;envoi des 12 bits
BCL_SONY
CALL ENV_SONY_BIT
RLF code+1,F
RLF code,F
DECFSZ compt,F
GOTO BCL_SONY
CALL WAIT25ms
GOTO FIN_ENVOI
ENV_SONY_BIT
MOVLW D'21' ;T=550æs
BTFSC code,7
CALL ENVOIE_1 ;code du 1: "1"-"1"-"0"
MOVLW D'20'
CALL ENVOIE_1 ;code du 0: "1"-"0"
MOVLW D'22'
CALL ENVOIE_0
RETURN
;------------ ENVOI D'UN CODE YAMAHA -----------------
ENV_YAM
MOVWF code+2
COMF code+2,W ; COMF compl‚mente les bits de F
MOVWF code+3
MOVLW H'5E'
MOVWF code
MOVLW H'A1'
MOVWF code+1
; on a bien 5E A1 W Wbarre
; code code+1 code+2 code+3
CALL YAM_PIO ; on envoie le code sans stop code
; attente de 40ms
CALL WAIT40ms
YAM_TEST
CALL ENV_SCODE
CALL WAIT92ms
BCF PORT_B,1 ; test : touche relƒch‚e ?
BSF test_relache,0 ; on suppose : relache=1 : on a relƒch‚
BTFSC PORT_B,7 ;vol- non app -> test vol+ sinon relache=0
BTFSS PORT_B,6 ;vol+ appuy‚ -> relache=0 sinon on saute
BCF test_relache,0
BSF PORT_B,1
BCF PORT_A,3 ; pour power
NOP
BTFSS PORT_B,0
BCF test_relache,0
BSF PORT_A,3
BTFSC test_relache,0 ; a-t-on relach‚ en fin de compte ?
GOTO RELACHE ; oui on arrˆte d'‚mettre
GOTO YAM_TEST ; non, on va r‚‚mettre le stopcode et retester
RELACHE
GOTO FIN_ENVOI
ENV_SCODE
MOVLW D'85'
CALL ENV_HEAD_SC
MOVLW D'19'
CALL ENVOIE_1
RETURN
;------------ ENVOI D'UN CODE PIONEER --------------------
ENV_PIO MOVWF code+3 ;
MOVWF code+2 ;
MOVLW B'11110000' ; masque
ANDWF code+2,F
BSF code+2,3 ; code+2 est OK : W7 W6 W5 W4 1000
SWAPF code+3,F ; En hexa : code+3=H1H2 -> code+3=H2H1
MOVLW B'00000111' ; masque
IORWF code+3,F
BCF code+3,3 ; code+3 est OK : W3 W2 W1 W0 0111
MOVLW H'25'
MOVWF code
MOVLW H'DA'
MOVWF code+1 ; le code est bon
; envoi header + 32 bits + stop code
CALL YAM_PIO
CALL WAIT62ms
GOTO FIN_ENVOI
;------------ ENVOI D'UN CODE TECHNICS --------------------
ENV_TEC MOVWF code+4 ; W7W6W5W4 0000 W3W2W1W0 0101
MOVWF code+5 ; code+4 code+5
MOVLW B'11110000' ;masque
ANDWF code+4,F ; code+4 est OK
SWAPF code+5,F
ANDWF code+5,F
BSF code+5,0
BSF code+5,2 ; code+5 est OK
; cas o— la commande est deck1/2
MOVLW H'A0'
SUBWF code+4,W
BTFSS STATUS,Z
GOTO TEST_POWER
MOVLW H'A9' ; on a Deck1/2
MOVWF code+4
MOVLW H'BC'
MOVWF code+5 ; code+4 et code+5 OK
; cas o— la commande est power
TEST_POWER
MOVLW H'B0'
SUBWF code+4,W
BTFSS STATUS,Z
GOTO SUITE_CODE
MOVLW H'BC'
MOVWF code+4
MOVLW H'A9'
MOVWF code+5 ; code+4 et code+5 OK
SUITE_CODE ; remplissage de code,+1,+2,+3
MOVLW H'40'
MOVWF code
MOVLW H'04'
MOVWF code+1
MOVLW H'05'
MOVWF code+2
MOVLW H'10'
MOVWF code+3 ; le code est bon
MOVLW D'48' ; 48 bits … envoyer
MOVWF compt
; envoi header
MOVLW D'153' ; 10*400æs
CALL ENVOIE_1
MOVLW D'61' ; 4*400æs
CALL ENVOIE_0
; envoi des 48 bits
BCL_TEC
MOVLW D'15' ; 400æs
CALL ENVOIE_1
MOVLW D'14'
CALL ENVOIE_0
MOVLW D'30'
BTFSC code,7
CALL ENVOIE_0
RLF code+5,F ; passage
RLF code+4,F ;
RLF code+3,F ; au
RLF code+2,F ;
RLF code+1,F ; bit
RLF code,F ; suivant
DECFSZ compt,F ; a-t-on envoy‚ les 48 bits ?
GOTO BCL_TEC ; non
; envoi du stop code
MOVLW D'15' ; oui
CALL ENVOIE_1
CALL WAIT76ms
GOTO FIN_ENVOI
;------------ ENVOI D'UN CODE RC5 DESTINE A LA PLATINE BANDE -----
ENV_BANDE
MOVWF code+1 ; 11R01011 cccccc00
MOVLW B'11001011' ; code code+1=W
MOVWF code
CALL RC5_ENV_14
CALL WAIT85ms
GOTO FIN_ENVOI
FIN_ENVOI
RETURN
;*********************** SOUS-PROGRAMMES ******************************
;
INITINT MOVLW B'00111000' ;GIE=0 : pas d'interruption effective
MOVWF INTCON ;T0IE=1: pour l'attente de Yamaha
RETURN ;INTE,RBIE=1: pour le wake-up
;T0IF,INTF,RBIF=0:pas d'interruption constat‚e
RC5_ENV_14
MOVLW D'14'
MOVWF compt
BCL_RC5 CALL ENV_RC5_BIT
RLF code+1,F
RLF code,F
DECFSZ compt,F
GOTO BCL_RC5
RETURN
ENV_RC5_BIT
MOVLW D'32' ;889æs
BTFSC code,7 ;test du bit a envoyer
GOTO RC5_UN ;c'est 1
RC5_ZERO
CALL ENVOIE_1 ;c'est 0
MOVLW D'34'
CALL ENVOIE_0
GOTO RETOUR_RC5_BIT
RC5_UN CALL ENVOIE_0
MOVLW D'34'
CALL ENVOIE_1
RETOUR_RC5_BIT
RETURN
YAM_PIO MOVLW D'32' ; proc‚dure commune … Yamaha et Pioneer
MOVWF compt
;envoi du header
MOVLW D'161';
CALL ENV_HEAD_SC;
;envoi des 32 bits
BCL_YAM
MOVLW D'19' ;525æs
CALL ENVOIE_1
MOVLW D'19' ;525æs
CALL ENVOIE_0
MOVLW D'40'
BTFSC code,7
CALL ENVOIE_0 ;code du 1: "1"-"0"-"0"-"0"
RLF code+3,F
RLF code+2,F
RLF code+1,F
RLF code,F
DECFSZ compt,F
GOTO BCL_YAM
;envoi du stop code: "1"
MOVLW D'21' ;525æs
CALL ENVOIE_1
RETURN
ENV_HEAD_SC ; envoie le header ou le stop code de Yamaha
MOVWF duree_0
MOVLW H'FF'
CALL ENVOIE_1 ;}
MOVLW D'67' ;} 16*525æS
CALL ENVOIE_1 ;}
MOVF duree_0,W ;8*525æs (header) ou 4*525æs (stop code)
CALL ENVOIE_0
RETURN
;-------------------- S/P D'EMISSION ---------------------------
; 24 cycles d'instruction correspondent … la p‚riode de la porteuse choisie
;
;
ENVOIE_1
MOVWF duree
BCL_1 BCF PORT_A,4 ; 0
NOP ; 1
NOP ; 2
NOP ; 3
CALL WAIT_4 ; 4-5
BSF PORT_A,4 ; 8
CALL WAIT_4 ; 9-10
CALL WAIT_8 ; 13-14
DECFSZ duree,F ; 21
GOTO BCL_1 ; 22-23
RETURN
ENVOIE_0
MOVWF duree
BCL_0 BSF PORT_A,4 ; 0
CALL WAIT_8 ; 1-2
CALL WAIT_8 ; 9-10
CALL WAIT_4 ; 17-18
DECFSZ duree,F ; 21
GOTO BCL_0 ; 22-23
RETURN
;
;------------------------------------------------------------------
;
;------------ S/P D'ATTENTE ------------
;
WAIT_4 RETURN ; 6-7 ou 11-12
WAIT_8 CALL WAIT_4 ; ...
RETURN ; ...
WAIT25ms
MOVLW D'166'
CALL WAIT_TMR0
RETURN
WAIT40ms
MOVLW D'112'
CALL WAIT_TMR0
RETURN
WAIT62ms
MOVLW D'33'
CALL WAIT_TMR0
RETURN
WAIT5ms
MOVLW D'238'
CALL WAIT_TMR0
RETURN
WAIT14ms
MOVLW D'206'
CALL WAIT_TMR0
RETURN
WAIT21ms
MOVLW D'180'
CALL WAIT_TMR0
RETURN
WAIT71ms
MOVLW D'0'
CALL WAIT_TMR0
RETURN
WAIT76ms
CALL WAIT71ms
CALL WAIT5ms
RETURN
WAIT85ms
CALL WAIT71ms
CALL WAIT14ms
RETURN
WAIT92ms
CALL WAIT71ms
CALL WAIT21ms
RETURN
WAIT_TMR0
MOVWF RTCC
CALL INITINT
BCL_TMR0
BTFSS INTCON,T0IF
GOTO BCL_TMR0
BCF INTCON,T0IF
RETURN
;---------------------------------------------
END
Emetteur RC5 8 canaux
Emetteur RC5 8 canaux
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Emetteur RC5 8 canaux
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Emetteur RC5 8 canaux
Bonjour a tous,
Voici les 3 fichiers converti et uploader sur fantaspic.
@++
Voici les 3 fichiers converti et uploader sur fantaspic.
@++
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Emetteur RC5 8 canaux
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
nondediode a écrit :Désolé Triac, mais chez moi ça ne fonctionne pas
Je suis en windows10. La conversion se fait bien mais le téléchargement échoue en indiquant qu'une erreur est survenue ou que l'adresse weeb a été déplacée
attention à la mise en forme du lien vers le site du convertisseur ..
je l'ai testé aussi
en WIN 10, et ça marche nickel
convertisseur PRN vers PDF
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Emetteur RC5 8 canaux
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Emetteur RC5 8 canaux
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour à tous,
J'ai été absent qq jours et je reviens sur le sujet.
Concernant l’émetteur, si il m'est très facile de bricoler une télécommande existante pour faire fonctionner le récepteur que j'ai réalisé, j'ai bcp de difficulté à trouver un exemple pour démarrer un programme sur un 16F84. J'ai besoin de 8 boutons.
Quelqu'un a t'il des idées là dessus?
En vous remerciant.
J'ai été absent qq jours et je reviens sur le sujet.
Concernant l’émetteur, si il m'est très facile de bricoler une télécommande existante pour faire fonctionner le récepteur que j'ai réalisé, j'ai bcp de difficulté à trouver un exemple pour démarrer un programme sur un 16F84. J'ai besoin de 8 boutons.
Quelqu'un a t'il des idées là dessus?
En vous remerciant.
Emetteur RC5 8 canaux
Bonjour nondediode, et tout le forum,
Première chose à faire utiliser le PORTB pour les 8 boutons en activant les résistances sur PORTB, pour plus de détail lire ce post #7
Obligation de travailler avec un quartz
1) Il faut créer une porteuse(en fonction de ton récepteur qui peut être compris entre de 30Khz à 40khz), sa veut dire qu'il faut la
calculer en fonction de ton quartz.
2) Une fois cette routine faite, il faut incorporer les temps que tu veux envoyer dans cette porteuse,
on diras que c'est la base fréquence, faire comme si tu confectionnés un simple émetteur.
Fin de semaine je te fait un exemple
A+
Première chose à faire utiliser le PORTB pour les 8 boutons en activant les résistances sur PORTB, pour plus de détail lire ce post #7
Obligation de travailler avec un quartz
1) Il faut créer une porteuse(en fonction de ton récepteur qui peut être compris entre de 30Khz à 40khz), sa veut dire qu'il faut la
calculer en fonction de ton quartz.
2) Une fois cette routine faite, il faut incorporer les temps que tu veux envoyer dans cette porteuse,
on diras que c'est la base fréquence, faire comme si tu confectionnés un simple émetteur.
Fin de semaine je te fait un exemple
A+
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Emetteur RC5 8 canaux
-
nondediode
Amateur- Messages : 148
- Enregistré en : novembre 2018
- Localisation : Lyon
Bonjour Temps-x et bonjour tout le monde,
Merci pour ton intervention.
Effectivement, j'avais déjà un peu réfléchit au schéma.
A y être, autant que cette télécommande soit adaptée à ttes mes applications futur et que je puisse affecter autant de bouton que nécessaire mais dans le cas présent c'est effectivement 8 boutons dont j'ai besoin.
J'avais donc pensé utiliser le croisement de 4 lignes 4 colonnes du port B pour obtenir 16 boutons dont chaque bouton serait mémorisée dans la mémoire de l'eeprom.
Ensuite le port A pour la LED infrarouge.
Un quartz de 4Mhz
Est-ce possible?
Merci pour ton intervention.
Effectivement, j'avais déjà un peu réfléchit au schéma.
A y être, autant que cette télécommande soit adaptée à ttes mes applications futur et que je puisse affecter autant de bouton que nécessaire mais dans le cas présent c'est effectivement 8 boutons dont j'ai besoin.
J'avais donc pensé utiliser le croisement de 4 lignes 4 colonnes du port B pour obtenir 16 boutons dont chaque bouton serait mémorisée dans la mémoire de l'eeprom.
Ensuite le port A pour la LED infrarouge.
Un quartz de 4Mhz
Est-ce possible?
Retourner vers « Langage ASM »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 67 invités