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 ---
Forum général sur l'Assembleur !

Modérateur : mazertoc

Emetteur RC5 8 canaux
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#1 Message par nondediode » jeu. 27 déc. 2018 11:23

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. :roll:

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 :oops:
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 :wink:

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=: 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=: 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
Triac01
Membre
Membre
Messages : 3
Enregistré en : août 2017

#2 Message par Triac01 » jeu. 27 déc. 2018 17:44

Bonjour nondediode.
Tu peut convertir ce fichier en pdf via le site
[url]https://prn-en-pdf.pdf-convertisseur.fr/[/url
je vient de le tester cela marche bien.

Emetteur RC5 8 canaux
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#3 Message par nondediode » jeu. 27 déc. 2018 18:28

Bonjour Triac01 et merci :wink:

Bonne soirée

Emetteur RC5 8 canaux
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#4 Message par nondediode » jeu. 27 déc. 2018 18:46

Désolé Triac, mais chez moi ça ne fonctionne pas :cry:
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

Emetteur RC5 8 canaux
venom
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 953
Âge : 38
Enregistré en : avril 2016
Localisation : Klyntar
Contact :

#5 Message par venom » jeu. 27 déc. 2018 20:07

Bonjour a tous,

Voici les 3 fichiers converti et uploader sur fantaspic. :wink:
Tele_cu.pdf

Tele_sch.pdf

Tele_ser.pdf







@++
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Mon site web
Mon discord : venom#4888

Emetteur RC5 8 canaux
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » jeu. 27 déc. 2018 20:27

nondediode a écrit :Désolé Triac, mais chez moi ça ne fonctionne pas :cry:
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 ..

:+1: je l'ai testé aussi
en WIN 10, et ça marche nickel

convertisseur PRN vers PDF

TeleCde_IR.jpg
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Aide toi, le ciel ou FantasPic t'aidera

Emetteur RC5 8 canaux
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#7 Message par nondediode » jeu. 27 déc. 2018 21:06

Merci !

A tous!

:bravo:

Emetteur RC5 8 canaux
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#8 Message par nondediode » mer. 9 janv. 2019 08:29

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.

Emetteur RC5 8 canaux
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#9 Message par Temps-x » jeu. 10 janv. 2019 02:11

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

Bts_led.jpg



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.
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Emetteur RC5 8 canaux
nondediode
Amateur
Amateur
Messages : 148
Enregistré en : novembre 2018
Localisation : Lyon

#10 Message par nondediode » jeu. 10 janv. 2019 09:01

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?


Retourner vers « Langage ASM »

Qui est en ligne

Utilisateurs parcourant ce forum : Roger et 42 invités