Modérateurs: Modération Forum Installations, Le Bureau de l’Association HCFR • Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 7 invités

Tout l'univers de la domotique, du pilotage et des télécommandes, du multiroom, du stockage et réseau

J'ai fait mon propre récepteur IR pour Pronto...

Message » 10 Jan 2006 17:15

Au début de mon 'aventure'…..

J'avais commandé un emetteur-récepteur Beamit pour commander la lumière de ma salle HC.
Malheureusement, ma Philips Pronto n'arrivait pas à apprendre le code de la télécommande IR… En effet celle-ci a un fréquence 'porteuse' de 433kHz, alors que selon les datasheets de la Pronto, elle ne peut monter qu'à 56kHz…. Dommage! :cry:
Alors, le Beamit, retour à l'expéditeur… Exclu d'avoir 2 télécommandes!!!

Y'a plus qu'à me fabriquer moi-même mon récepteur IR !!! :P

D'abord, commencer par comprendre le code envoyé par la pronto. Il s'agit du code RC5, commun à beaucoup de télécommandes IR.
Le code de base RC5 est composé
- De 2 bits de départ
- 1 bit de basculement
- 5 bits d'adressage du système
- 6 bits d'instruction

La pronto permet de générer directement le code RC5 en IR. De ce fait, pas besoin d'avoir un émetteur pour lu faire apprendre un code! Ça me simplifie la tâche, je n'aurai besoin de fabriquer que le récepteur!!

Alors départ!! :D

Commender le récepteur IR chez Conrad (1,5Euro ). Comme la pronto envoie le signal avec une fréquence de 36kHz, j'ai commandé le récepteur 36kHz (normal…)
Faire le programme en Assembleur pour un PIC 12F629. Il est très modeste mais suffit amplement pour l'application.
Monter le tout sur un bout de veroboard avec une alim capacitive, un relais, un regulateur 5V….
Et là, ça MARCHE !! Bon c'est vite dit tout ça mais ça m'a pris pas mal de temps quand-même, surtout pour sychroniser la reception IR sur le PIC… :-?

:-? Autant continuer sur la lancée! Pourquoi pas un variateur de lumière, hummmm?
J'utilise un triac low current commandé directement par le PIC, je me fais un détecteur de passage par 0 pour sychroniser la commande du triac avec le 50Hz du réseau… et ça marche aussi!!!!!!!
Le 'seul' (HEM HEM...) problème que j'ai rencontré, c'est que le récepteur IR est sensible aux commutations du triac, alors il a fallu que j'implémente un filtre 'digital' dans le PIC pour ne trigger QUE sur des vrais codes IR envoyés par la PRONTO….

Ce qui est génial 8) avec mon système c'est :

1. Le prix : par recepteur IR, je compte environ 15Euros..(boîtier/Pic/relais/triac/print…)

2. La modularité : je peux sur un même récepteur avoir 4-5-6 codes différents, chacun ayant un autre effet. Par exemple, un code ON – OFF – 50% - Plus – Moins , etc…..

3. Comme le nombre des adresses/commandes en RC5 et que certaines adresses ne sont jamais utilisées par les appareils du commerce, je peux avoir autant d'appareil que je souhaite…!


Je ne prétends pas avoir inventé la poudre, mais je suis très content du résultat!! Ça ne me coûte presque rien, et pour TOUTES mes prochaines application (stores, lumières, etc etc….) je vais pouvoir utiliser le même principe!!!

En passant, la pronto est la meilleure télécommande que j'ai jamais vue!!!

Merci à ceux qui m'auront lu, et si il y a des questions/remarques, dites toujours!!!! :D

Voilà quelque photos:

Voilà le montage (un peu foulli..) du récepteur avec simplement un relais ON/OFF

Image

Voilà l'autre montage, déjà dans sa boîte, avec le variateur de lumière à triac. Le petit switch sert à faire un ON/OFF de la lumière (si on retrouve plus la télécommande par exemple!)
Le trou sur le devant est pour le récepteur IR...

Image

Et enfin, voilà la pronto avec les 5 différentes fonctions possibles (que je peux augmenter à l'infini-1 :D ). Ici j'ai mis un ON-OFF-MAX-PLUS-MOINS....

Image[/b]
tcholleybus
 
Messages: 363
Inscription Forum: 16 Fév 2005 16:27
Localisation: Vers l'infini et au-delà..!
  • offline

Message » 10 Jan 2006 19:23

Je suis tres tres TRES TRES interressé par tes montages :D

As tu prévu de nous en faire profiter en partageant les schemas et les sources du PIC ?
OlivierG
 
Messages: 411
Inscription Forum: 07 Mai 2002 13:23
Localisation: Toulouse-Blagnac, 31
  • offline

Message » 10 Jan 2006 21:44

Bravo :D
zebra3
 
Messages: 252
Inscription Forum: 25 Juin 2005 19:24
Localisation: Chez ouam
  • offline

Message » 10 Jan 2006 22:43

C'est pile ce que je voudrais faire mais en 16 voies (pour 16 sources lumineuses).
En changeant le pic pour un plus gros (en memoire, en rapidité et en sortie).

Pourrais-tu partager le prog du pic et le shema pour me servir de base ?

J'ai un shema de "elctronique pratique" mais je prefere avoir plusieurs sources.
Merci d'avance
jbb31
 
Messages: 10
Inscription Forum: 12 Oct 2005 22:09
  • offline

Message » 11 Jan 2006 0:36

Passionnant tous ça ...
chane
 
Messages: 2339
Inscription Forum: 06 Sep 2001 2:00
Localisation: 91
  • offline

Message » 11 Jan 2006 10:58

:D Je suis content de voir que ça intéresse d'autres personnes!! :D

Merci pour les encouragements!!

Je suis désolé mais je ne trouve pas le moyen de joindre des fichiers....!!! Y'a pas de bouton "joindre fichiers" ...?!

Quelqu'un pour m'aider :oops: ??
tcholleybus
 
Messages: 363
Inscription Forum: 16 Fév 2005 16:27
Localisation: Vers l'infini et au-delà..!
  • offline

Message » 11 Jan 2006 11:04

jbb31 a écrit:C'est pile ce que je voudrais faire mais en 16 voies (pour 16 sources lumineuses).
En changeant le pic pour un plus gros (en memoire, en rapidité et en sortie).

Pourrais-tu partager le prog du pic et le shema pour me servir de base ?

J'ai un shema de "elctronique pratique" mais je prefere avoir plusieurs sources.
Merci d'avance


Pour moi, il n'y a aucun problème d'avoir 16 sources lumineuses, même avec un seul PIC, si elle sont en ON/OFF.
Si tu veux avoir 16 variateur, il va falloir 16 timer pour commander les 16 triacs... et pour un seul PIC à 4MHz, c'est un peut beaucoup...

La solution que tu propose est la meilleur, augmenter la fréquence du PIC par 3-4, et là je pense que c'est faisable avec un seul récepteur...

Je mets volontier mon code en ligne, mais j'arrive pas à joindre un fichier..... :oops:
tcholleybus
 
Messages: 363
Inscription Forum: 16 Fév 2005 16:27
Localisation: Vers l'infini et au-delà..!
  • offline

Message » 11 Jan 2006 12:16

Bon, puisque j'arrive pas à poster des fichiers, voilà un print moche du schéma....

Image

Et voilà le programme en assembleur :

SI jamais, je suis ouvert à toute remarque/amélioration etc!!! :D


    ; dans les très TRES grandes lignes, voilà le principe:

    ; La commande du triac.
    ; Le triac est commandé avec une impulsion, et reste ouvert jusqu'au prochain passage par 0, ou il
    ; se bloque..
    ; Le programme va donc faire varier le moment dans l'alternance ou le triac va s'enclencher. Plus ce temps
    ; est long, plus la luminosité sera faible.
    ; Pour cela il va falloir synchroniser le temps à atttendre avant de donner cette impulsion avec le passage
    ; par 0 de la tension sur la Phase
    ; Puis, une fois le pasage par 0 détecté, on start un timer dans le PIC, puis une fois terminé, on enclenche le triac.
    ; Une fois un nouveau passage par 0, on RESET le timer, puis on le restart, et ainsi de suite...!
    ; La commande IR n'a donc besoin QUE de changer la valeur de de TIMER pour changer le temps d'enclenchement du triac, et
    ; donc de la luminosité de la Lampe!...

    ; La reception IR
    ; Voir plus bas pour les explications...


    list p=12F629
    #include <p12f629.inc>
    __CONFIG _CP_OFF & _CPD_OFF & _BODEN_ON & _MCLRE_OFF & _WDT_ON & _PWRTE_OFF & _INTRC_OSC_NOCLKOUT

    ;******************************************************************************
    ; Constants *
    ;*****************************************************************************/

    ;definition des ports

    #define port_ir GPIO,0 ; IN
    #define port_triac GPIO,1 ; OUT
    #define port_nc1 GPIO,2 ; OUT
    #define port_switch GPIO,3 ; IN
    #define port_relais_1 GPIO,4 ; out
    #define port_phase GPIO,5 ; IN

    ;configuration des ports pour l'état standard et pour le mode commande-relâche du triac

    #define io_config_normal B'00101001' ; 0 = output, 1 = input
    #define io_config_triac_on B'00101001' ; 0 = output, 1 = input
    #define io_config_triac_off B'00101011' ; 0 = output, 1 = input


    #define masque_byte_prefix B'11000111' ;c'est le code commun à tous les code envoyés, c'est l'adresse RC5
    ; RC5 : 7 - 0 : OFF
    #define masque_1 B'00000000' ;c'est les données RC5 (6bits, les 2 derniers sont jamais utilisés
    ; RC5 : 7 - 1 : ON
    #define masque_2 B'00000100'
    ; RC5 : 7 - 1 : MINUS
    #define masque_3 B'00001000'
    ; RC5 : 7 - 1 : PLUS
    #define masque_4 B'00001100'
    ; RC5 : 7 - 1 : MAX
    #define masque_5 B'00010000'


    #define ref_minimum_lampe .150
    #define ref_maximum_lampe .3

    ;definition des flags nécesaires au programme principal

    #define flag_analyse_reception flag, 0
    #define flag_byte_1 flag, 1
    #define flag_reception_en_cours flag, 2
    #define flag_ancien_etat flag, 3
    #define flag_config_ok flag, 4
    #define flag_raz_impulse_triac flag, 5
    #define flag_switch_bas flag, 6
    #define flag_impulse_recue flag, 7


    #define ref_nombre_bits .7

    #define ref_compteur_switch_haut .200
    #define ref_compteur_switch_bas .200

    #define ref_compteur_boucle .7 ; = 7*2*72us = us
    #define ref_compteur_boucle_1 .2 ; = 2*72us = 144us

    #define bank_1 bsf STATUS,RP0
    #define bank_0 bcf STATUS,RP0

    ;*******************************************************************************
    ; Variables *
    ;******************************************************************************/

    cblock 0x20 ; debut du block de RAM

    flag
    nombre_bits
    byte_1
    byte_2
    compteur_boucle
    compteur_boucle_1

    tempo_phase
    ref_tempo_phase
    old_ref_tempo_phase

    compteur_switch_haut
    compteur_switch_bas

    endc

    ;*********************************************************************************************
    ;*********************************************************************************************
    ;*********************************************************************************************

    ORG 0x00 ;Reset Vector Location

    goto Initialize

    ;******************************************************************************
    ; Main Program *
    ;*****************************************************************************/

    Initialize

    bank_1
    call 0x3FF ;Get the Calibration Value
    movwf OSCCAL ;Calibrate

    banksel CMCON
    movlw B'00000111' ;Binary Version
    ; ||||||||
    ; |||||+++--- Comparator OFF
    ; ||||+------ not used
    ; |||+------- Output not inverted
    ; ||+-------- unimplemented
    ; |+--------- not used
    ; +---------- unimplemented

    movwf CMCON ;Comparator Off, Pins Set for Digital // DOIT ETRE INITIALISE !!!!!


    banksel TRISIO
    movlw io_config_normal
    movwf TRISIO
    banksel GPIO
    clrf GPIO ;// DOIT ETRE INITIALISE !!!!!


    ; Initialize TMR1

    movlw B'00000000'
    ; ||||||||
    ; |||||+++---
    ; ||||+------
    ; |||+-------
    ; ||+--------
    ; |+---------
    ; +----------

    banksel T1CON
    movwf T1CON

    ; Initialize TMR0

    movlw B'10000001'
    ; ||||||||
    ; |||||+++--- Prescaler 1:2 -->
    ; ||||+------ Prescaler assigned to TMR0
    ; |||+------- Increment at High->Low Trasition of GP2
    ; ||+-------- Use interal instruction clock cycle
    ; |+--------- interrupt on falling edge of GP2
    ; +---------- GPIO pull-up disabled

    banksel OPTION_REG
    movwf OPTION_REG

    ; Initialize Interrupts

    movlw b'00000000' ; TMR= enable
    ; ||||||||
    ; |||||||+--- Port Change Interrupt Flag
    ; ||||||+---- External Interrupt Flag
    ; |||||+----- TMR0 Interrupt Flag
    ; ||||+------ Port Change Interrupt = OFF
    ; |||+------- External Interrupt
    ; ||+-------- TMR0 Interrupt
    ; |+--------- Peripheral Interrupt
    ; +---------- Global Interrupt
    bank_1
    movwf INTCON

    movlw b'00000000'
    ; ||||||||
    ; |||||||+--- IOC0
    ; ||||||+---- IOC1
    ; |||||+----- IOC2
    ; ||||+------ IOC3
    ; |||+------- IOC4
    ; ||+-------- IOC5
    ; |+--------- -
    ; +---------- -
    banksel IOC
    movwf IOC

    ;******************************************************************************
    ; Initialisation des variables *
    ;******************************************************************************

    bank_0

    ;initialisation des flags
    movlw .0
    movwf flag

    movlw ref_nombre_bits
    movwf nombre_bits

    movlw ref_compteur_boucle
    movwf compteur_boucle
    movlw ref_compteur_boucle_1
    movwf compteur_boucle_1

    clrf byte_1
    clrf byte_2

    bcf port_relais_1

    movlw .70
    movwf tempo_phase
    movwf ref_tempo_phase
    movwf old_ref_tempo_phase

    movlw ref_compteur_switch_haut
    movwf compteur_switch_haut
    movlw ref_compteur_switch_bas
    movwf compteur_switch_bas


    ;******************************************************************************
    ; Début du programme principal, de la boucle continue *
    ;******************************************************************************

    Main

    ; ******************************************
    ; detection du passage par 0
    ; la boulce principale fait 72us - 74us
    ; sur du 50hz, un passage par 0 intervient tous les 10ms, ce qui fait 139 boucles de 72us
    ; ce qui veut dire que une fois un passage par 0 identifié on a 139 boucle avant le suivant
    ; on va utiliser le passage par 0 pour sychroniser l'impulsion sur le Triac...

    ; P0 --- temps --- enclenchement triac ----- P0 - RAZ temps ------temps ----- etc...

    btfss flag_raz_impulse_triac
    goto fin_impulse_triac
    banksel TRISIO
    movlw io_config_triac_off
    movwf TRISIO
    banksel GPIO
    bcf flag_raz_impulse_triac
    fin_impulse_triac


    ; ******************************************
    ; test du switch. Ce switch sert à commander directement le triac en FULL ON ou FULL OFF
    ; il y a un anti-rebond de quelques MS pour éviter les ON/OFF intempestifs

    btfsc port_switch
    goto raz_test_switch_bas
    attente_switch_bas
    movfw compteur_switch_bas
    btfss STATUS,Z
    goto dec_compteur_switch_bas
    movlw ref_compteur_switch_bas
    movwf compteur_switch_bas
    bsf flag_switch_bas
    dec_compteur_switch_bas
    decf compteur_switch_bas
    goto fin_test_switch_bas
    raz_test_switch_bas
    movlw ref_compteur_switch_bas
    movwf compteur_switch_bas
    goto fin_test_switch_bas
    fin_test_switch_bas


    btfss flag_switch_bas
    goto fin_test_switch_haut
    btfss port_switch
    goto raz_test_switch_haut
    attente_switch_haut
    movfw compteur_switch_haut
    btfss STATUS,Z
    goto dec_compteur_switch_haut
    movlw ref_compteur_switch_haut
    movwf compteur_switch_haut
    bcf flag_switch_bas

    movfw ref_tempo_phase
    xorlw ref_minimum_lampe
    btfsc STATUS,Z
    goto allumer_switch
    eteindre_switch
    movlw ref_minimum_lampe
    movwf ref_tempo_phase
    goto fin_test_switch
    allumer_switch
    movlw ref_maximum_lampe
    movwf ref_tempo_phase
    goto fin_test_switch
    fin_test_switch
    goto fin_test_switch_haut

    dec_compteur_switch_haut
    decf compteur_switch_haut
    goto fin_test_switch_haut

    raz_test_switch_haut
    movlw ref_compteur_switch_haut
    movwf compteur_switch_haut
    goto fin_test_switch_haut

    fin_test_switch_haut


    ; ******************************************
    ; cette partie sert à mesurer le passage par 0.
    ; il y a un tout petit anti-rebond de 5-10us pour éviter de mesurer une perturbation

    test_passage_0
    btfss flag_ancien_etat
    goto test_etat_haut
    goto test_etat_bas

    test_etat_haut btfss port_phase
    goto fin_test_etat_haut
    nop
    nop
    nop
    nop
    btfss port_phase
    goto fin_test_etat_haut
    bsf flag_ancien_etat
    movfw ref_tempo_phase
    movwf tempo_phase
    bcf flag_config_ok
    goto fin_test_etat_haut
    fin_test_etat_haut
    goto fin_test_passage_0

    test_etat_bas btfsc port_phase
    goto fin_test_etat_bas
    nop
    nop
    nop
    nop
    btfsc port_phase
    goto fin_test_etat_bas
    bcf flag_ancien_etat
    movfw ref_tempo_phase
    movwf tempo_phase
    bcf flag_config_ok
    goto fin_test_etat_bas
    fin_test_etat_bas
    goto fin_test_passage_0
    fin_test_passage_0


    test_compteur_phase
    movfw tempo_phase
    btfss STATUS,Z
    goto dec_tempo_phase
    btfsc flag_config_ok
    goto saut_init_config
    banksel TRISIO
    movlw io_config_triac_on
    movwf TRISIO
    banksel GPIO
    bsf flag_config_ok
    bsf port_triac
    bsf flag_raz_impulse_triac
    saut_init_config
    goto fin_test_compteur_phase
    dec_tempo_phase
    decf tempo_phase
    fin_test_compteur_phase


    ; ***********************************************
    ; la partie suivante est pour la réception du code RC5 de la pronto
    ; la base de temps est augmentée de 72us à 220us

    boucle_3_tempo
    movfw compteur_boucle_1
    btfss STATUS,Z
    goto dec_compteur_boucle_1
    movlw ref_compteur_boucle_1
    movwf compteur_boucle_1

    ; le test du port IR ne se fait qu'une fois toutes les 220us
    ; si il y a un état bas sur le port IR, il y a une réception de code
    ; MAIS si cette impulsion n'est plus là après 220us, il s'agissait d'une impulsion parasite...
    ; en effet, un VRAI code RC5 commence TOUJOURS par un bit d'au moins 1,7ms....

    test_port_ir btfsc flag_reception_en_cours
    goto boucle_10_tempo
    btfsc port_ir
    goto raz_flag_impulse_recue
    btfss flag_impulse_recue
    goto set_flag_impulse_recue
    bsf flag_reception_en_cours
    movlw .0
    movwf compteur_boucle
    goto boucle_tempo
    set_flag_impulse_recue
    bsf flag_impulse_recue
    goto boucle_tempo


    ; **************** boucle tempo de lecture **************
    ; chaque bit sur le port IR est lu toutes les 1,787 ms.
    ; c'est là que la sychronisation joue un grand rôle!!
    ; chaque 1,78ms, le programme va venir lire l'état sur le port IR, et 'compléter' un byte
    ; dans sa mémoire.
    ; Si ce temps de 1,78ms est plus long ou plus court, il risque d'y avoir un décalage entre le code
    ; émis et reçu...
    ; Pour visualiser le moment ou le PIC vient lire la valeur sur le port IR, j'ai utilisé le
    ; port_relais_1. Ce port change d'état à chaque fois que la mesure est faite sur le port IR.
    ; Ainsi avec un oscillo, on voit tout de suite si il y a un décalage temporel entre l'état du port IR
    ; et la mesure du PIC!

    ; toute la durée de transmission doit durer 24,889 ms selon les données RC5

    boucle_10_tempo
    movfw compteur_boucle
    btfss STATUS,Z
    goto dec_compteur_boucle
    movlw ref_compteur_boucle
    movwf compteur_boucle

    ; *******************************

    btfss flag_reception_en_cours
    goto fin_test_port_ir

    reception_en_cours
    btfsc flag_byte_1
    goto fin_reception_byte_1

    reception_byte_1
    bcf byte_1,0
    btfss port_ir
    bsf byte_1,0
    call pointe_1
    movfw nombre_bits
    btfsc STATUS,Z
    goto raz_reception_byte_1
    rlf byte_1
    decf nombre_bits
    goto fin_test_port_ir


    raz_reception_byte_1
    movlw ref_nombre_bits
    movwf nombre_bits
    bsf flag_byte_1
    movlw b'11011111'
    andwf byte_1,1
    goto fin_test_port_ir

    fin_reception_byte_1


    reception_byte_2
    btfss flag_byte_1
    goto fin_reception_byte_2
    bcf byte_2,0
    btfss port_ir
    bsf byte_2,0
    call pointe_1
    movfw nombre_bits
    btfsc STATUS,Z
    goto raz_reception_byte_2
    rlf byte_2
    decf nombre_bits
    goto fin_test_port_ir

    raz_reception_byte_2
    movlw ref_nombre_bits
    movwf nombre_bits
    bcf flag_byte_1
    bsf flag_analyse_reception

    goto fin_test_port_ir

    fin_reception_byte_2

    raz_flag_impulse_recue
    bcf flag_impulse_recue
    fin_test_port_ir


    ; **************** analyse des 2 bytes recus ************
    ; on a maintenant les 14bits RC5 transmis par la pronto
    ; il va falloir maintenent voir si ces code sont destinés au PIC (adresse)
    ; et si oui, quelle ordre il doit exécuter (commande)

    ; RC5 : 7 - 0 : OFF
    ;#define masque_1 B'00000000'
    ; RC5 : 7 - 1 : ON
    ;#define masque_2 B'00000100'
    ; RC5 : 7 - 1 : MINUS
    ;#define masque_3 B'00001000'
    ; RC5 : 7 - 1 : PLUS
    ;#define masque_4 B'00001100'


    analyse_reception
    btfss flag_analyse_reception
    goto fin_analyse_port_ir

    ; le prefix est le byte_1
    ; il correspond au début de la transmission + l'adresse

    analyse_byte_prefix
    movfw byte_1
    xorlw masque_byte_prefix
    btfss STATUS,Z
    goto fin_analyse_reception


    ; si l'adresse est bonne, le programme continue l'analyse du byte_2
    ; puis change la valeur du timer qui enclenche le triac, donc change la luminosité...!!

    ; éteindre

    analyse_byte_1
    movfw byte_2
    xorlw masque_1
    btfss STATUS,Z
    goto analyse_byte_2
    movlw ref_minimum_lampe ; minimum sur lampe
    movwf ref_tempo_phase
    bcf flag_analyse_reception
    goto fin_analyse_reception

    ; allumer

    analyse_byte_2
    movfw byte_2
    xorlw masque_2
    btfss STATUS,Z
    goto analyse_byte_3
    movfw old_ref_tempo_phase ; chargement de l'ancienne valeur ON
    movwf ref_tempo_phase
    bcf flag_analyse_reception
    goto fin_analyse_reception

    ; augmenter la luminosité

    analyse_byte_3
    movfw byte_2
    xorlw masque_3
    btfss STATUS,Z
    goto analyse_byte_4

    movfw ref_tempo_phase
    xorlw ref_maximum_lampe
    btfsc STATUS,Z
    goto fin_dec_ref_phase
    decf ref_tempo_phase
    movfw ref_tempo_phase
    movwf old_ref_tempo_phase
    movfw ref_tempo_phase
    xorlw ref_maximum_lampe
    btfsc STATUS,Z
    goto fin_dec_ref_phase
    decf ref_tempo_phase
    movfw ref_tempo_phase
    movwf old_ref_tempo_phase
    fin_dec_ref_phase
    bcf flag_analyse_reception
    goto fin_analyse_reception

    ; diminuer la luminosité

    analyse_byte_4
    movfw byte_2
    xorlw masque_4
    btfss STATUS,Z
    goto analyse_byte_5
    movfw ref_tempo_phase
    xorlw ref_minimum_lampe
    btfsc STATUS,Z
    goto fin_inc_ref_phase
    incf ref_tempo_phase
    movfw ref_tempo_phase
    movwf old_ref_tempo_phase
    movfw ref_tempo_phase
    xorlw ref_minimum_lampe
    btfsc STATUS,Z
    goto fin_inc_ref_phase
    incf ref_tempo_phase
    movfw ref_tempo_phase
    movwf old_ref_tempo_phase
    fin_inc_ref_phase

    bcf flag_analyse_reception
    goto fin_analyse_reception

    ; allumer au max

    analyse_byte_5
    movfw byte_2
    xorlw masque_5
    btfss STATUS,Z
    goto analyse_byte_6
    movlw ref_maximum_lampe ; chargement de la valeur max
    movwf ref_tempo_phase
    movwf old_ref_tempo_phase
    bcf flag_analyse_reception
    goto fin_analyse_reception

    analyse_byte_6


    fin_analyse_reception
    clrf byte_1
    clrf byte_2
    bcf flag_reception_en_cours
    bcf flag_analyse_reception
    bcf flag_impulse_recue
    goto fin_analyse_port_ir

    dec_compteur_boucle
    decf compteur_boucle
    goto fin_dec_compteur_boucle
    dec_compteur_boucle_1
    decf compteur_boucle_1
    goto fin_dec_compteur_boucle
    ;************************************************************************************
    ;************************************************************************************
    ;************************************************************************************
    fin_dec_compteur_boucle
    fin_analyse_port_ir
    saut_test_ir


    ; cette boucle est la base de temps globale de tout le programme!
    ; cette façon de faire permet d'avoir un seul et unique TIMER pour TOUT le programme
    ; le PIC peut ainsi tout faire en même temps (passage par 0, test du port IR, test du switch, etc etc...)

    boucle_tempo

    movfw TMR0
    addlw .240 ;
    btfss STATUS,C
    goto boucle_tempo
    clrwdt ; cette boucle dure 72us.
    clrf TMR0
    nop
    goto Main


    ; la subroutine ou on peut contrôler le moment ou le PIC fait une mesure su le port IR

    pointe_1 btfsc port_relais_1
    goto raz_relais_1
    bsf port_relais_1
    goto fin_pointe_1
    raz_relais_1
    bcf port_relais_1
    fin_pointe_1
    return



    ;*******************************************************************************
    ; Calibration Value for Simulation *
    ;******************************************************************************/

    ORG 0x3FF ;Oscillator Calibration Value for Simulation
    messg "Dummy Oscillator Calibration value for simulation."
    messg "Please remove the following source code line when programming a device."
    ; retlw 0x00 ;Remove if using a real chip


    ;*******************************************************************************
    END ;directive 'end of program'
[/b]
tcholleybus
 
Messages: 363
Inscription Forum: 16 Fév 2005 16:27
Localisation: Vers l'infini et au-delà..!
  • offline

Message » 11 Jan 2006 14:11

je ne comprends rien mais qu'est ce que c'est chouette !! :mdr:

Bravo.
chane
 
Messages: 2339
Inscription Forum: 06 Sep 2001 2:00
Localisation: 91
  • offline

Message » 11 Jan 2006 15:44

Bô boulot.... :D

Mais..... si je puis modestement faire une remarque constructive... :

"Tu aurais pu optocoupler le signal de phase.... s'pece de fou...."

Comme dirais mon vieux prof d'éléctro... :wink:

A+
SebCestBien
dede_ii
 
Messages: 94
Inscription Forum: 05 Mar 2002 2:00
Localisation: Vive lâ sûisse....
  • offline

Message » 11 Jan 2006 15:56

dede_ii a écrit:Bô boulot.... :D

Mais..... si je puis modestement faire une remarque constructive... :

"Tu aurais pu optocoupler le signal de phase.... s'pece de fou...."

Comme dirais mon vieux prof d'éléctro... :wink:

A+
SebCestBien


Lequel?... c'lui du gate du triac?... comment tu ferais toâ?
tcholleybus
 
Messages: 363
Inscription Forum: 16 Fév 2005 16:27
Localisation: Vers l'infini et au-delà..!
  • offline

Message » 11 Jan 2006 16:31

mmm... j'sais pas trop ... mais p'têtre quelque chose come ça: http://jem.dhs.org/~ed/ece499/prof/schematic.pdf
Zero Cross Detection
dede_ii
 
Messages: 94
Inscription Forum: 05 Mar 2002 2:00
Localisation: Vive lâ sûisse....
  • offline

Message » 11 Jan 2006 17:48

dede_ii a écrit:mmm... j'sais pas trop ... mais p'têtre quelque chose come ça: http://jem.dhs.org/~ed/ece499/prof/schematic.pdf
Zero Cross Detection


Le problème à mon avis ne vient pas de ce côté... Beaucoup d'appareils que je développe pour l'industrie utilisent un diviseur capacitif, et de ce fait, il n'y a pas de séparation galvanique du côté de l'alimentation....

Par contre, c'est vrai que la commande du triac pourrait être séparée galvaniquement... Mais si je le fais, il faut utiliser un opto-diac, qui commande le triac... ça devient compliqué...

Le 'seul' problème avec mon système c'est que je coupe le retour sur le neutre, et pas la phase.. il faut donc obligatoirement 2 fils pour aller jusque à la lampe.
Si j'avais séparé galvaniquement la commande du triac, j'aurais pu tirer qu'un fil vers la lampe, vu que le neutre est commun dans toute la baraque...

Mais bon, ça marche comme ça! Que demande le peuple!

Et de toute façon, chez moi, la plupart des récepteurs seront en ON/OFF avec un relais.... et là plus de problème!
tcholleybus
 
Messages: 363
Inscription Forum: 16 Fév 2005 16:27
Localisation: Vers l'infini et au-delà..!
  • offline

Message » 11 Jan 2006 22:35

Un grand merci à tous,

J'ai quand meme du travail (surtout que je suis completement débutant en electronique) car c'est vraiment 16 gradateurs que je voudrais faire , avec un interface pc pour faire des sequences d'inctinction/allumage.
jbb31
 
Messages: 10
Inscription Forum: 12 Oct 2005 22:09
  • offline


Retourner vers Intégration, Domotique, Stockage et Réseau

 
  • Articles en relation
    Dernier message