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

#21 Message par tdegremont » mar. 26 avr. 2016 10:46

Jérémy a écrit :Bonjour,

Super travail Thierry !

Je n'ai pas encore regarder le code ( de toute façon je suis pas assez calé pour porter un jugement valide), mais j'ai déjà du mal a comprednre le fonctionnement.

Je ne vois que des interrupteurs dans ton boitier ? pas de poussoir ?
Je ne vois qu'une carte à relais ? la seconde est dessous ?

Quand tu fait monter un volet est ce qu'un signal te dit qu'il est arrivé en butée ? ou est ce que tu est obligé de laisser le relais alimenter en permanence ?
Car effectivement si pour l’ouverture des volets les 6 relais sont actionnées ca va couter cher en électricité .

la solution fut été de faire avec des TRIAC comme ma prise bluetooth .
Je ne vois pas la LDR sur ton schéma ?

En tout cas en core bravo car c'est propre comme montage


Bonjour Jeremy, et merci pour tes remarques je vais essayer d'y répondre point par point:
1 - Je ne vois que des interrupteurs dans ton boitier ? pas de poussoir ?
Tu ne vois que des interrupteurs car l'armoire que j'ai prise en photo ce n'est juste que la partie "haute tension" (220v).
il y aura donc 6 boutons en mode "manuel" pour gérer unitairement la montée ou la descente des volets (ce fonctionnement est identique au fonctionnement traditionnel avec un interrupteur à côté de chaque volet sauf que dans mon cas tous les interrupteurs sont centralisés dans une boite). Dans ce cas se sont les fins de courses des volets qui coupe le jus, ou alors la remise en position neutre de mon interrupteur.
Si la partie "Auto" est activée (via un interrupteur) alors la mise sous tension de la partie Electronique est activé.
Il y aura en entrée de mon MCU: un poussoir "Monter tout", un poussoir "Descendre tout", un interrupteur pour passer en mode "LDR" puis une entrée TOR pour mon capteur LDR.

2- Je ne vois qu'une carte à relais ? la seconde est dessous ?
Dans l'armoire il y a effectivement mes 2 cartes (l'une au dessus de l'autre) avec chacune d'entre elles les 8 relais.
L'armoire devient petite il faut gagner de la place ;-)

2- Quand tu fait monter un volet est ce qu'un signal te dit qu'il est arrivé en butée ? ou est ce que tu est obligé de laisser le relais alimenter en permanence ?
Alors en mode "Manuel" c'est l'interrupteur 3 positions qui commande montée, descente, ou rien. et c'est le volet qui coupe le jus grâce au réglage fin de course. (dans mon cas il n'y a aucun relais sous tension dans ce mode).

3-Je ne vois pas la LDR sur ton schéma ?
Dans mon schéma ISIS l'entrée de la LDR est simplement représentée par interrupteur ON/OFF. Pour ma part j'ai déjà un montage qui me donne un signal propre est carré selon la luminosité. J'ai juste déporte la photorésistance dans une lentille étanche.
Voici le lien du module LDR
https://www.amazon.fr/gp/product/B00JTRJWAE/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1
Et voici mon montage maison de ma LDR
Ma LDR.jpg


Merci encore à tous
Thierry
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.

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

#22 Message par tdegremont » mar. 26 avr. 2016 14:56

paulfjujo a écrit :bonsoir,

projet interessant..
+1 code assez bien ficelé..

Code : Tout sélectionner

sbit LdrCapture at GP3_bit; // Entrée du capteur 0=jour 1=nuit.    


il me semble que tu veux gererl la LDDR , info Jour/nuit en (TOR) Tout Ou Rien ?
cela rique d'etre aleatoire ou meme ne pas fonctionner du tout .
J'ai fais une detection de marche chaudiere gaz via LDDR face au voyant Marche
avec une entree analogique , un pont diviseur R + LDDR alimenté en 5V,
mesure analogique sur laquelle on definit 2 seuils avec hysteresis pour le basculement ON/OFF ( jour.nuit)..
GP3 en analogique ?
j'ai pas vérifier la possibilité.


il me semble que tu veuilles faire un mode apprentissage pour la duree d'ouverture ou fermeture ,
mais je ne vois pas dans ton programme (main) une entree/sortie affectée pour ENTRER ou SORTIR de ce mode d'apprentissage ?
d'ou le stockage en eeprom .. de flottant ?
ou je n'ai rien compris.

Dans la mesure ou il n'y a pas de butéee (contact FDC) sur un rideau electrique, c'est effectivement la duree qui doit
servir d'arret ( d'urgence ?) , pour ne pas avoir une surchauffe moteur et securite temperature actionnee.
Il a aussi des moteur + FDC incorporés dans certains rideaux motorises ( déja utilisé en milieu industriel)
Le sumun serait evidemment d'avoir des contacts FDC accessibles pour verifier les états reels Haut et BAS

Si chaque relais consomme 100mA en 5V, cela va etre chaud pour le MCU .. et risque de reset intempestif
un regulateur 12V/5V separé , dédié au MCU,sera deja un mieux..
.. circuit de masse 0V commun !
+VCC avec self antiparasite..et condos de decouplage

le 12F avec un expander I2C MC 2317 peut gerer 16S et eventuellement un LCD I2C 2x16
ce qui permettrait une commande individuelle possible .. 12 relais RT pour 6 volets.

je suis interessé par ce projet ayant 4 volets independants à gerer + 1 deja telecommandé en RF..


Bonjour Paul, et merci du compliment pour le code ;-).
Pareil que pour jérémy je vais essayer de répondre à chacun des points que tu soulève.
1- Oui je vais gérer le signal "jour/nuit" en entrée de mon MCU de manière tout ou rien.
ps: https://www.amazon.fr/gp/product/B00JTRJWAE/ref=oh_aui_detailpage_o03_s00?ie=UTF8&psc=1
Le réglage du seuil de déclenchement est directement sur le module. Pour ma part, j'ai déporté la photorésistance du module afin d'embarquer le module dans ma boite et pouvoir avoir accès au potentiomètre de réglage du seuil.
Afin de ne pas réagir au premier changement de signal, tu remarqueras dans mon code qu'il y a un délai de capture ;)
Le principe est simple, pendant ce temps de capture, le signal ne doit pas changer d'état sinon "Abord"..abandon
Le temps de capture est variable selon le paramétrage du temps d'ouverture et fermeture du volet (cf ligne 184 du code).
mon GP3 est donc en digital.
2- Oui, il y a un mode d'initialisation des paramètres. Il est accessible au démarrage du MCU en maintenant appuyer le bouton "monter tout".
La procédure est simple: remonter entièrement les volets. Passer en mode "Manuel". Restez appuyé sur le bouton "montée tout" et passez en mode "Auto", attendre env 2 sec, les volets descendent 1 fois = (temps de manœuvre 5 secondes), si je veux paramétrer ce temps, je relâche maintenant le bouton "monter tout" sinon je garde appuyer...les volets descendent encore 1 fois=(tmps 30sec)....encore 1 fois =(tmps 45 sec).....encore et dernière fois (tmps 60 sec). voila le tour est joué le système est paramétré est sauvegardé dans l'eeprom en int ;)
donc Paul, tu as tout compris :D
Mes volets sont munis de la sécurité fin de course, mais je veux en mode "Auto" assurer le coup en leur donnant le jus un certain temps.
3. Oui chaque commande volet consomme environ 100mA donc quand j'active les 6 en même temps je vois la conso s'élever à plus de 600mA et mon BC547 qui chauffe comme un malade.
J'ai donc ajouter deux petits relais 5v de puissance. C'est à dire mes BC547 (montée descente) activent chacun un relais qui lui commande au travail mes cartes relais (tous en même temps). C'est entre ces deux petits relais et mes cartes de commandes que sont reliés un interrupteur bipolaire pour condamner ou non l'ouverture ou la fermeture automatique d'un volet.
mais je suis intéressé par ta solution Paul avec la self et les condo de filtrage.

voila pour le moment , en esperant avoir été plus clair dans mes explications

a bientot
Thierry

Besoin de conseils
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#23 Message par Guest » mer. 27 avr. 2016 08:27

bonjour

Code : Tout sélectionner

voila pour le moment , en esperant avoir été plus clair dans mes explications


vous pouvez m'expliquer l’utilité du flottant car la je ne comprends pas tres bien ,je comprendrais a la limite un int ou un char pour la mesure du temps mais un flottant pourquoi aussi un long et enfin pourquoi l'utilisation de l'interruption elle mesure le temps ? c'est quoi th ?
vous demandez de l'optimisation :

Code : Tout sélectionner

void resetCommande(){
     INTCON.GIE = 0;
     Npn_Montee = 0;
     Npn_Descen = 0;
     _CommandStatut = 0;
     _Abord=0;
     INTCON.GPIF = 0;
     INTCON.GIE = 1;    // Global interrupt enabled


a quoi sert l’arrêt et la remise en service des INT sur 4 instructions? un reset commande dans un SPG vous prend 10 instructions pour AMHA 5 instructions sans SPG
(gain de temps )c'est bien les SP mais parfois il y a des limites

A+

PS: je me suis permis que le cote reset commande après bien sur a vous de voir, faire du flottant sur un 8bits qui n'a qu'une pauvre addition et soustraction c'est aussi ca le cote optimisation ;)

Besoin de conseils
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#24 Message par Guest » mer. 27 avr. 2016 09:05

re
Petite précision dans le 12f675 il y a un comparateur qui éventuellement peut remplacer Votre circuit LDR, bien sur en gardant uniquement la LDR ;) c'est au cas ou......

J'ai quand même un doute sur la rigueur du programme, comme un copie coller ou alors des restes de tests ,au plus je lis votre code, au plus cela ne va pas .Pourquoi:

th qui est la variable contenue dans l’EPROM ,elle est bien dans, lecture à toutes les sauces ,flottant, long et int dans L’EPROM pourquoi grand mystère ,puis on on la retrouve dans votre programme,uniquement sous la forme int .

Pourquoi donc ,le flottant et le long en lecture et écriture, et que vient faire un spg delay10 alors que vous avez les macro delay_us et delay_ms
alors un peu brouillon, en cas pas bien ficelé :lol: tout cela

Quand a l’idée de faire une tempo malgré les fin de course c'est pas mal mais perso je la traiterai autrement

mais comme toujours je revendique le droit a l'erreur ;) bien sur le plaisir de vous lire

A+

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

#25 Message par tdegremont » mer. 27 avr. 2016 15:21

maï a écrit :th qui est la variable contenue dans l’EPROM ,elle est bien dans, lecture à toutes les sauces ,flottant, long et int dans L’EPROM pourquoi grand mystère ,puis on on la retrouve dans votre programme,uniquement sous la forme int .


Et bien voilà tu as trouvé tout seul, je ne me sert pas ni de Long ni de Float mais d'un Int, les fonctions (store_long, store_float,read_long et read_float) ne sont pas utilisées, et le compilateur MikroC est même très intelligent il le supprime à la compilation ;-).
Je les ai laissés pour mémoire et pour m'aider à les retrouver dans de futurs projets.

maï a écrit :Pourquoi donc ,le flottant et le long en lecture et écriture, et que vient faire un spg delay10 alors que vous avez les macro delay_us et delay_ms

Afin de gérer moi même les interruptions dans un delai, mais je ne doute pas que l'on pouvait faire autrement.

merci

Besoin de conseils
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#26 Message par Guest » mer. 27 avr. 2016 17:25

tdegremont a écrit :Et bien voilà tu as trouvé tout seul

Je vous trouve un peu gonfle, c'est vous le demandeur et c'est a moi de trouver , et trouver quoi ? Ce qui fait partie, ou ne fait pas de votre programme.
je ne me sert pas ni de Long ni de Float mais d'un Int, les fonctions (store_long, store_float,read_long et read_float) ne sont pas utilisées,

La moindre de politesse, fut au moins de les enlever, vous ne croyez pas, afin de rendre votre code lisible .A priori la politesse,c'est pas pour vous ,car j'ai pris la peine de vous lire et pas facile à lire votre code.
Pourquoi dans ce cas, le titre de votre post Besoins conseils,optimisation. Vous voulez quoi? des congratulations :lol: . Perso , je ne vous félicite pas, pour votre code il est rempli de redondances , pour une simple gestion de volets. Je vous laisse,chercher redondances dans un programme ....
le compilateur MikroC est même très intelligent il le supprime à la compilation


vous êtes sur, j'ai un doute, dans votre ZIP il y a la decompli, est le flottant et le long , est bien dans Votre fichier.hex. En fin ce que j'en dis,ou alors il faut l'enlever, aussi cette decompli ,qui sait ? Allez bonne continuation

PS:il ne vous reste que ,10% de flash :bravo:

Besoin de conseils
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#27 Message par Guest » ven. 29 avr. 2016 19:26

Pour finir ma lecture :
J'ai trouvé un petit problème sur Votre code, qui risque de vous poser quelques soucis ici

Code : Tout sélectionner

/*-------------------------------- fnCommandVolets ---------------------------*/
void fnCommandVolets(void){
  switch (_CommandStatut) {
    case 0: break;
    case 1: fnCommandMontee(); break;
    case 2: fnCommandDescen();  break;
  }
}


Un switch doit TOUJOURS ce terminer par un default: si pour X raisons CommandStatut) n'est pas compris entre 0 et 2, vous allez au crach.je vous laisse chercher l'explication.

Si vous voulez optimiser un peu votre code, vous supprimez les :

Code : Tout sélectionner

void store_int(int adres, int vvalue){
  eeprom_write(adres,lo(vvalue));
  delay_ms(20);
  eeprom_write(adres+1,hi(vvalue));
  delay_ms(20);
}


Les delay_ms(20) qui sont des macros rapides mais elles occupent beaucoup de place et qui ne servent a RIEN, car si elles étaient utiles, elles seraient dans la fonction.Une petite recherche sur la DS sur la procédure d’écriture en EEPROM ,en principe c'est de ASM mais c'est lisible
Et bien sur on vire tout ce qui ne sert a rien ;)
Si vous utilisez de la RAM uniquement dans un but utilisation des bits, utilisez les structures de bits.

Il est bon aussi, après avoir effectué un test sur une valeur, de ne plus reprendre ce test sur cette valeur, quelques lignes plus loin.un organigramme aide dans ce genre de situation, tout comme la raz de variables on les regroupes a la fin de la procédure, et non pas de partout dans le code.

Voila perso ce que je vois de votre code, dis c'est fait, bien sur ce n'est que mon avis et vous en faites ce que vous voulez ;)

A+

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

#28 Message par Jérémy » ven. 29 avr. 2016 19:33

Les conseils argumentés et constructifs sont toujours bons à prendre. Libre à l'utilisateur de les mettre en application ou non.

En tout cas c'est vraiment pas mal tout ça. Ça donne envie, mais mes volets roulants n'ont pas de commande prévue à cet effet . :cry: ( tiens j'ai oublié de demander un smileys qui pleure j'en aurai eu besoin aussi :D )

As tu penser à faire application bluetooth ? ca serait la grande classe !
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Besoin de conseils
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#29 Message par Guest » dim. 1 mai 2016 15:59

bonjour

Il ne fait pas beau, je ne suis permis de faire votre le programme de votre application. Pas bien compris pour le changement de tempo. j'ai donc rajouté un BP pour la programmation qui incrémente un pointeur en EEPROM, qui pointe sur 4 variables en EEPROM et donc change le temps de temporisation(5s,30s,45s,60s), avant arrêt total de l'alimentation .Cela se fait en 338 octets soit 33,8% occupation Flash,pour votre PIC, rien à voir avec vos +89% d'occupation.Donc il bien de optimisation a faire du coté organigramme de votre projet,pour qu'il soit enfin bien ficelé ;) Mais bien sur en état ,cela doit fonctionner.

A+

Besoin de conseils
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#30 Message par Guest » lun. 2 mai 2016 12:53

maï a écrit :bonjour

Il ne fait pas beau, je ne suis permis de faire votre le programme de votre application. Pas bien compris pour le changement de tempo. j'ai donc rajouté un BP pour la programmation qui incrémente un pointeur en EEPROM, qui pointe sur 4 variables en EEPROM et donc change le temps de temporisation(5s,30s,45s,60s), avant arrêt total de l'alimentation .Cela se fait en 338 octets soit 33,8% occupation Flash,pour votre PIC, rien à voir avec vos +89% d'occupation.Donc il a bien de optimisation a faire du coté organigramme de votre projet,pour qu'il soit enfin bien ficelé ;) Mais bien sur en état ,cela doit fonctionner.

A+


Retourner vers « Coin Fourre-tout »

Qui est en ligne

Utilisateurs parcourant ce forum : paulfjujo et 40 invités