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 ---
Tout ce qui n'a pas de catégorie !
Besoin de conseils
tdegremont
Débutant
Débutant
Messages : 30
Enregistré en : novembre 2015

#41 Message par tdegremont » ven. 22 juil. 2016 10:44

Bonjour à tous,
Petite mise à jour sur mon projet.
Donc mes volets sont installés et finalisés, mon armoire est installée.
La partie électronique est installée, elle aussi.
Depuis mon dernier post, j'ai revu et donc simplifié un peu le code.
voir ci-après

Code : Tout sélectionner

#include "built_in.h"
#define  C_DEBOUNCE 100
/******************************************************************************/
/* Auteur                : DEGREMONT Thierry                                  */
/* Version               : 1.0.0.7                                            */
/* Date de création      : 01/04/2016                                         */
/* Date de revision      : 12/07/2016                                         */
/*                       : 18/07/2016                                         */
/*                       : 20/07/2016                                         */
/* Notice                                                                     */
/* Gestion de l'ouverture et fermeture de 6 volets roulants                   */
/* PIC12F675 Osc.interne                                                      */
/* Last Update           : Gestion du reset par GOTO sur le menu INIT         */
/*                         Modification du switch default                     */
/* 12/07/2016 : Suppression des directives de compilation                     */
/*              Suppression des paramètres de temps de fonctionnement         */
/*              Le temps de fonctionnement est forcé à 40 secondes            */
/* 20/07/2016 : Gestion du rebond des boutons dans la void interrupt          */
/******************************************************************************/
/* Notice:                                                                    */
/*   1)Mode LDR = OFF : les poussoirs Monter/descendre tous actifs            */
/*                      1 appui = action et deuxieme appui pendant la         */
/*                      motirisation arrête le systeme courant.               */
/*   2)Mode LDR = ON  : selon le capteur, le système active la montée ou      */
/*                      la descente des volets.                               */
/*------------Déclaration des fonctions---------------------------------------*/
void main (void);
void fnCaptureLDR(void);
void fnCommandVolets(void);
void fnCommandMontee(void);
void fnCommandDescen(void);
void initDevice(void);
void interrupt (void);
void Delay10( unsigned long int n);
void resetCommande(void);
/*------------Déclaration des variables---------------------------------------*/
const unsigned int C_TempsManoeuvre40 = 4500; //45 secondes (4500);
//const unsigned int C_TempsManoeuvre40 = 400; //4 secondes (400);
unsigned int _memoireNuit,_cptTemp;
volatile unsigned int _CommandStatut;
volatile bit  _Abord ;
/*------------Déclaration des E/S --------------------------------------------*/
sbit Npn_Montee at GP0_bit; //Sortie Transistor 1 pour activer montée
sbit Npn_Descen at GP1_bit; //Sortie Transistor 1 pour activer Descen
sbit LdrMode    at GP2_bit; // Entrée du commutateur "Ldr Mode"."1" en LDR.
sbit LdrCapture at GP3_bit; // Entrée du capteur 0=jour 1=nuit.
sbit Btn_Descen at GP4_bit; // Entrée Bouton poussoir Descendre tous
sbit Btn_Montee at GP5_bit; // Entrée Bouton poussoir Montée tous
/************* Programme principal ********************************************/
void main(void)
{
     initDevice();
     resetCommande();
     Delay_ms(C_DEBOUNCE);
     do {
           if(LdrMode){
             _memoireNuit   =0;
             resetCommande();
             while(LdrMode){
              fnCaptureLDR();
              fnCommandVolets();
             }
           }else{
                 fnCommandVolets();
           }
      }while (1)  ;
 }

/* *******************Sous-Programme Ouverture*********************************/
/*-------------------------------- fnCaptureLDR ------------------------------*/
void fnCaptureLDR(void){
  int mTempLdrCapture;
  _CommandStatut = 0;
  mTempLdrCapture =  ((int)LdrCapture+1); //Capture de la lumiere
  if((mTempLdrCapture!=_memoireNuit)&&(LdrMode)){
       _cptTemp =1;
       while((_cptTemp<=C_TempsManoeuvre40)&&(LdrMode)
            &&(mTempLdrCapture==((int)LdrCapture+1))){
         delay10(1);
         _cptTemp++;
       }
       if(((_cptTemp)>C_TempsManoeuvre40)){
         _memoireNuit=mTempLdrCapture;
         _CommandStatut = _memoireNuit;
       }else{ _memoireNuit=0;}
  }
}
/*-------------------------------- fnCommandVolets ---------------------------*/
void fnCommandVolets(void){
  switch (_CommandStatut) {
    case 0: break;
    case 1: fnCommandMontee(); break;
    case 2: fnCommandDescen();  break;
    default: break;
  }
}
/*-------------------------------- fnCaptureLDR ------------------------------*/
void fnCommandMontee(void){
  Npn_Descen = 0;
  Delay_ms(C_DEBOUNCE);
  Npn_Montee = 1;
  delay10(C_TempsManoeuvre40);
  resetCommande();
}
/*-------------------------------- fnCommandDescen ---------------------------*/
void fnCommandDescen(void){
  Npn_Montee = 0;
  Delay_ms(C_DEBOUNCE);
  Npn_Descen = 1;
  delay10(C_TempsManoeuvre40);
  resetCommande();
}
/*-------------------------------- initDevice --------------------------------*/
 void initDevice(void){
  ANSEL = 0;          // all digital pin
  ADCON0= 0x00;       // Aucun convertisseur A/D
  CMCON = 0x07;       // Comparator module Disabled
  VRCON = 0x00;
  INTCON =0;          // Interupt control register
  INTCON.GIE  = 1;    // Global interrupt enabled
  INTCON.PEIE = 0;    // Peripheric interrupt enabled
  INTCON.T0IE = 0;    // TMR0 overflow interrupt enabled
  INTCON.INTE = 1;    // GP2/INT external interrupt enabled
  INTCON.GPIE = 1;    // Port change interrupt enable =>voir IOC register
  INTCON.T0IF = 0;    // Overflow TMR0 FLAG (reset to software)
  INTCON.INTF = 0;    // External interrupt FLAG (reset to software)
  INTCON.GPIF = 0;    // Port change interrupt FLAG
  T1CON=0x00;
  OPTION_REG
         
=0b11000110; //prescale 1:128
  GPIO   =0b00111100; // Initialisation du status
  TRISIO =0b00111100; // GP0-GP1 en sortie, GP2-GP5 en entrée
  WPU    =0b00000000; // Aucune entree en R pullup authorized

  IOC.IOC2 = 1;       // Autorisation Interrup. LDR Mode
  IOC.IOC3 = 1;       // Autorisation Interrup. LDR Capture
  IOC.IOC4 = 1;       // Autorisation Interupt. Button Down all
  IOC.IOC5 = 1;       // Autorisation Interupt. Button Up all
}
/*--------------------------Interruption -------------------------------------*/
void interrupt() {
  bit logicStateUp ;
  bit logicStateDw ;
  INTCON.GIE = 0;
  logicStateDw = 0;
  logicStateUp =0;
  if (((INTE)&&(INTF)) && INTCON.GPIF){
      while ((Button(&GPIO, 5, 1, 1))){logicStateUp=1;}
      while ((Button(&GPIO, 4, 1, 1))){logicStateDw = 1; }
      Delay_ms(C_DEBOUNCE);  // evite des rebonds de BP
      if((LdrMode==0)&&(_CommandStatut!=0)&&((logicStateUp==1)||(logicStateDw==1))){
        _Abord=1;
      } else {
        if(LdrMode==0){
          if ((logicStateUp==1)&&(_CommandStatut==0)){_CommandStatut = 1;}
          if ((logicStateDw==1)&&(_CommandStatut==0)){_CommandStatut = 2;}
        }else{
          resetCommande();
        }
        INTCON.GPIF=0  ;
        INTCON.INTF=0;
        INTCON.INTE=0;
      }
  }
  INTCON.GIE = 1;
}
/*-------------------------------- Delay10 -----------------------------------*/
void delay10( unsigned long int n){
    unsigned long compareN;
    unsigned char i;
    i = 90;
    if (LdrMode){
      compareN=1;
      do  {
          TMR0 = 0;
          while ( i != TMR0 && (LdrMode && ~_Abord));
          compareN++;
      } while ( --> 0 && (LdrMode && ~_Abord));
      if(compareN<n) _memoireNuit=0;
    }else{
      do  {
          TMR0 = 0;
          while ( i != TMR0 && (~LdrMode && ~_Abord));
      } while ( --> 0 && (~LdrMode && ~_Abord));
    }
}
/*-------------------------------- resetCommande --------------*/
void resetCommande(){
     INTCON.GIE = 0;
     Npn_Montee = 0;
     Npn_Descen = 0;
     _CommandStatut = 0;
     _Abord=0;
     INTCON.INTF = 0;
     INTCON.INTE=0;
     INTCON.GPIF = 0;
     INTCON.GIE = 1;    // Global interrupt enabled
}
/* =====================  Fin du programme  ===================================*/
 


En revanche j'ai des soucis: mon circuit (PIC12F675) fonctionne très bien en simulation PROTEUS, mais AUSSI sur un montage breadboard, mais dans mon armoire sa déconne un peu.
Je pense que mes perturbations viennent des cartes 8 relais.....je cherche pour le moment...
Je vais sans doute poster un message sur un forum pour trouver de l'aide sur le câblage de ce genre de carte.

A+
Bonne journée
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

Besoin de conseils
Jérémy
Administrateur du site
Administrateur du site
Messages : 2723
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#42 Message par Jérémy » sam. 23 juil. 2016 16:39

franchement trés joli travail ! ca fait trés propres de l'interieur .

mon circuit (PIC12F675) fonctionne très bien en simulation PROTEUS, mais AUSSI sur un montage breadboard, mais dans mon armoire sa déconne un peu.

Aïe.

Il nous faudrait le schéma exact et les photos des carte des deux cotés.
Les fils qui se passent dessus les uns sur les autres ne sont pas forcement très bons et générateurs de parasites d'autant plus en commutant du 230V ;

Si ca fonctionne sur bread board, il n'y a pas de raison que tu puisse y arriver sur plaque à trous.
Il faudrait être plus précis sur le
sa déconne un peu.


Un anti-rebond de 100ms me parait beaucoup trop . Il y a un certain temps je m'était amusé a testé la temps d'appui sur un BP le plus vite possible . J'était desecndu à 50ms. Tout les poussoirs sont differents certes mais dejà 10ms c'est du "GROS" anti-rebond
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Besoin de conseils
tdegremont
Débutant
Débutant
Messages : 30
Enregistré en : novembre 2015

#43 Message par tdegremont » ven. 29 juil. 2016 09:50

Bonjour Jeremy,
Oui, je suis d'accord avec toi, que normalement si cela fonctionne sur breadboard cela doit fonctionner une fois montée dans mon armoire MAIS, je ne teste pas la même chose dans les deux cas.
Effectivement en sortie de mon montage sur ma breadboard je n'ai rien derrière mes relais Montée et descente.
Dans mon armoire, je branche mes sorties relais (montée et descente), sur deux carte spécifiques de 8 relais....et je pense que c'est là le problème.
J'y travaille en ce moment......Je posterai une mise à jour quand j'aurai trouvé mon erreur.
Je sais que sur ce forum on ne parle que de PIC et de programmation, c'est pour cette raison que dans mon message précédent je n'ai pas donné plus de détail.

Concernant le rebond, dans mon cas les 100ms ne sont pas de trop, car j'ai utilisé des boutons mécaniques dont j'ai mesuré le signal sur mon oscilloscope.

Bon Week end
a+
Thierry

Besoin de conseils
Jérémy
Administrateur du site
Administrateur du site
Messages : 2723
Âge : 45
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#44 Message par Jérémy » ven. 29 juil. 2016 10:02

Bonjour ,

Je sais que sur ce forum on ne parle que de PIC et de programmation, c'est pour cette raison que dans mon message précédent je n'ai pas donné plus de détail.

Sauf si tu ouvres un projet/réalisation !

C'est vrai que travaillé avec du 230V ~ , cela amène quelques déboires niveau parasites ! c'est pour cela que passer par des opto triac , à mon avis aurait été LA bonne solution !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Besoin de conseils
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#45 Message par paulfjujo » ven. 29 juil. 2016 11:02

bonjour,

tdegremont a écrit :...
Dans mon armoire, je branche mes sorties relais (montée et descente), sur deux carte spécifiques de 8 relais....et je pense que c'est là le problème.
...
Thierry



les relais et la commande de "recepteur" selfique tel que moteur peuvent effectivement occasionner d enombreux
problemes autour de l'usage d'un PIC
J'ai eu les memes d"boires, il y a déja quelques temps, avec une appli Regulation de temperature
1 relais commandant un ventilo, un autre un relais de puissance thermique.
La soultion a été radicale: 1 circuit RC aux bornes du contact pour etouffer l'arc electrique générant un pic faisant Reset sur le PIC
( humour!! entre pics ils se comprennent !

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

Besoin de conseils
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1644
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#46 Message par Gérard » sam. 30 juil. 2016 13:57

Bonjour,
Je vois 47n et 100ohm. C'est un condo X2?
J'ai aussi eu ce genre de problème.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Besoin de conseils
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#47 Message par paulfjujo » sam. 30 juil. 2016 15:23

bonjour,


oui, 100 ohms + 47nF
C'est un condo X2?


j'ai mis ce que j'avais sous la main , des 47nF 400V, mais effectivement un modele X2 autocicatrisant 250V pourrait faire l'affaire.

Le 25 juillet, j'ai essayé une Ford Mustang...

Veinard! un modele 1985 ? " Bullit" car ...
Aide toi, le ciel ou FantasPic t'aidera

Besoin de conseils
tdegremont
Débutant
Débutant
Messages : 30
Enregistré en : novembre 2015

#48 Message par tdegremont » dim. 31 juil. 2016 09:05

Bonjour,
merci pour ces pistes, effectivement je sens bien que c'est un truc comme ça....
mais cela veut dire, que je mets un circuit RC sur chaque sortie relais? montée et descente (8*2=16 RC) j'ai pas prevu la place pour en placer autant...
d'ailleurs pour ce genre de circuit, il faut quoi comme resistance, une quart de watt standard en 100ohm?

Je vois aussi sur le shema de Paul un pont diviseur de tension et un condo de filtrage à la sortie des transistors, à quoi servent-ils?

Note: je me demande si je ne peux pas mettre le circuit RC directement à la sortie des moteurs de mes volets, car dans mon armoire je n'ai plus de place?

Je vais me pancher sur le problème cette semaine...je reviendrais pour vous donner des news

A+ bon week end
Thierry

Besoin de conseils
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2597
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#49 Message par paulfjujo » dim. 31 juil. 2016 16:39

bonjour,

un pont diviseur de tension et un condo de filtrage à la sortie des transistors,


un pont diviseur de tension et un condo de filtrage sur l'entree (la base) des transistors
ou sur les sorties du PIC...

Rajoute (un leger delai de commande et) une montee en courant pas trop raide dans la bobine du relais ..
donc diminue la surtension possible... les fronts raides sont generateurs de parasites ( Pic de Dirac)
De plus la resistance entre base et masse , permet de mieux bloquer le transistor en l'abscence de commande par le PIC.

R= 100 Ohms 1/4W suffisant.

le circuit RC doit etre au plus pres du contact .

Les piste GND , 0V et +5V VCC doivent avoir une bonne section .
Condo de 100nF + Tantale 4,7µF + 470µ en parallele sur l'alim 5V ?
eventuellemnt une self de 100µH (self de choc) pour alimenter le +5V du PIC (filtrage HF)
Quid de la pin MCLR , tirée au +5V et condo de 100nF entre MCLR et 0V

As-tu fait un schema détaillé ?
Aide toi, le ciel ou FantasPic t'aidera

Besoin de conseils
tdegremont
Débutant
Débutant
Messages : 30
Enregistré en : novembre 2015

#50 Message par tdegremont » dim. 31 juil. 2016 19:13

Merci paul pour toutes ses pécisions.
Voici ce que j'ai en croquis et schéma
schema elec volets.jpg

Armoire.jpg

Croquis sortie relais.jpg

Schema Carte 8 relais.JPG
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.


Retourner vers « Coin Fourre-tout »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 80 invités