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 ---
Besoin de conseils
-
tdegremont
Débutant- Messages : 30
- Enregistré en : novembre 2015
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
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
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 ( --n > 0 && (LdrMode && ~_Abord));
if(compareN<n) _memoireNuit=0;
}else{
do {
TMR0 = 0;
while ( i != TMR0 && (~LdrMode && ~_Abord));
} while ( --n > 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- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
franchement trés joli travail ! ca fait trés propres de l'interieur .
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
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
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
Besoin de conseils
-
tdegremont
Débutant- Messages : 30
- Enregistré en : novembre 2015
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
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- Messages : 2723
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
Bonjour ,
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 !
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 !
Besoin de conseils
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
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
( entre pics ils se comprennent !
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
( entre pics ils se comprennent !
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Besoin de conseils
Besoin de conseils
- paulfjujo
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
oui, 100 ohms + 47nF
j'ai mis ce que j'avais sous la main , des 47nF 400V, mais effectivement un modele X2 autocicatrisant 250V pourrait faire l'affaire.
Veinard! un modele 1985 ? " Bullit" car ...
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 ...
Besoin de conseils
-
tdegremont
Débutant- Messages : 30
- Enregistré en : novembre 2015
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
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
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
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é ?
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é ?
Retourner vers « Coin Fourre-tout »
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 99 invités