Fonction "COUNT"

BESQUEUT

Senior Member
Bonjour,

Petit recentrage de débat, afin d'essayer de dégager une ligne directrice, à défaut d'un CDC.
Il y a 4 cabines équipées d'un capteur de volume d'eau. Chaque cabine aurait son propre afficheur (?), avec un comptage journalier: conso du jour, jour max et jour min. La notion de jour reste à définir (je n'en vois pas dans les codes donnés). Je pensais à une simple LDR pour définir la tombée de la nuit, c'est simple et d'une précision suffisante, les PPV me semblent plus difficiles d'emploi.
Et donc maintenant une console centrale pour regrouper et comparer les résultats.
La liaison peut se faire à raison d'une par nuit (filaire RS232, radio...?). Gestion de l'émission et de la réception des infos à préciser.
Y a encore un peu de travail...

MM
Vu que ça n'a rien à voir avec la commande COUNT il faut ouvrir un nouveau thread.
 

Yex2

Well-known member
Bonjour,

Petit recentrage de débat, afin d'essayer de dégager une ligne directrice, à défaut d'un CDC.
Il y a 4 cabines équipées d'un capteur de volume d'eau. Chaque cabine aurait son propre afficheur (?), avec un comptage journalier: conso du jour, jour max et jour min. La notion de jour reste à définir (je n'en vois pas dans les codes donnés). Je pensais à une simple LDR pour définir la tombée de la nuit, c'est simple et d'une précision suffisante, les PPV me semblent plus difficiles d'emploi.
Et donc maintenant une console centrale pour regrouper et comparer les résultats.
La liaison peut se faire à raison d'une par nuit (filaire RS232, radio...?). Gestion de l'émission et de la réception des infos à préciser.
Y a encore un peu de travail...

MM

Salut Michel,

À cause des limitations de taille de texte, je suis obligé du supprimer les commentaires du code afin de pouvoir le publier en entier.

La notion de la nuit est défini avec cette entrée :

symbol PV =pinC.2 ; PV pour Photo Voltaïque
symbol cycle =28800 ; temps du cycle à partir du coucher du soleil (8hrs)

Comme tu sais, dans les Antilles, le soleil se couche toujours entre 18h15 et 18h30. Lorsque le PV retourne 0V, la nuit débute et le compteur aussi.
Au levé du soleil, l'horloge est désactivé et le timer remis à 0.

Au début de la boucle du programme principale il y a :

Code:
    if PV =0 then        ; déclanche le timer au couché du soleil.
        enabletime                  ; le timer débute le compte
    else disabletime    : time =0   ; au lever du soleil, l'horloge est désactivé et le temps remis à 0.
    endif

      if time = cycle then     ; Enregistre le temps vers 2:30 hrs du matin
        gosub record            ; cette routine enregistre les minimums et maximums
      inc time
      today =0            ; consommation quotidienne remise à 0.
    endif
 
Last edited:

Yex2

Well-known member
Oui ça va marcher.
Ça fait :
Car=ligne4 + variable
Super ça vient de simplifier ma vie :D

Je ne doute nullement de vos compétences et J'ai un parcours très semblable quoique légèrement plus ancien.
La difficulté pour la console centrale est de recevoir simultanément 4 ports série ; je ne vois pas bien comment synchroniser tout ça mais vous semblez détenir une solution que j'ai hâte de connaître.
C'est MGU qui détient la solution dans son code sur les sondes capacitives. Je vous ai répondu dans l'autre thread...
 

BESQUEUT

Senior Member
Sur le thread en anglais vous ne donnez qu'une toute petite partie du problème.
Quand au projet bateau merci de respecter la charte et d'ouvrir un nouveau thread si vous souhaitez de nouvelles recommandations...
 

PieM

Senior Member
Relisez mes messages d'hier. J'ai la confirmation qu'il n'est pas possible de perdre des pulses dans mon code. L'Interruption s’exécute en ±1.5 ms alors que la vitesse maximum du débitmètre est de 5.6 ms/pulse dans le cas de 600 L/H, ce qui est largement au dessus du débit de mes douches qui sera plus proche du 15 ms pas pulse...
Ce qui n'a rien à voir puisque une interruption sur un M2 n'est pas une interruption hardware, ce qui veut dire qu'une transmission en cours n'est pas interrompue. Donc l'interruption ... attend ! Relisez ce qui a déjà été dit sur le sujet, faute de lire la documentation.
Et mon post ne vous était pas destiné.
 
Last edited:

BESQUEUT

Senior Member
J'ai la confirmation qu'il n'est pas possible de perdre des pulses dans mon code. L'Interruption s’exécute en ±1.5 ms alors que la vitesse maximum du débitmètre est de 5.6 ms/pulse dans le cas de 600 L/H, ce qui est largement au dessus du débit de mes douches qui sera plus proche du 15 ms pas pulse...
C'est effectivement vrai tant que la boucle principale ne contient aucune commande "longue".
Ce ne sera plus le cas si vous y ajoutez un serout...
 

Yex2

Well-known member
Ce qui n'a rien à voir puisque une interruption sur un M2 n'est pas une interruption hardware, ce qui veut dire qu'une transmission en cours n'est pas interrompue. Donc l'interruption ... attend ! Relisez ce qui a déjà été dit sur le sujet, faute de lire la documentation.
Et mon post ne vous était pas destiné.
Vous n'avez vraiment personne d'autre à embêter ? C'est quoi votre problème ? Partez donc votre propre thread et amusez-vous. Je n'irai pas vous embêter, j'ai autre chose à faire.
 

PieM

Senior Member
Vous n'avez vraiment personne d'autre à embêter ? C'est quoi votre problème ?
Je crois que c'est vous qui avez un sérieux problème! quand au bout de 168 posts vous n'avez pas encore compris ce qu'était une interruption sur un picaxe ayant un langage interprété... Tchao.
 
Last edited:

hippy

Technical Support
Staff member
Bonjour.

N'oubliez pas de rester courtois en cas de désaccord et de respecter les points de vue des autres membres du forum, même si vous n'êtes pas d'accord avec eux.

----

Please remember to be civil when there are disagreements and please respect the views of other forum members even if you disagree with them.
 

Yex2

Well-known member
C'est effectivement vrai tant que la boucle principale ne contient aucune commande "longue".
Ce ne sera plus le cas si vous y ajoutez un serout...
D'accord je comprends.
Quel est le temps d'exécution de "serout" si j’envoie 6 bytes ?
Qu'arrive t'il si il y a une interruption pendant que serout envois des données ? Qui a priorité, serout ou interrupt?

Au pire il n'est pas essentiel de mettre à jour la console en temps réel. Pour MAXI et MINI, seul une mise à jour par 24 hrs est requise et pourrait être faite la nuit au moment de la fin du cycle.

Pour la conso total, ça serait bien mais ce n'est pas essentiel qu'elle soit faite en temps réel. On pourrait limiter à quelques fois par jour pendant les périodes où les gens sont habituellement dehors.
 

MGU

Senior Member
Quel est le temps d'exécution de "serout" si j’envoie 6 bytes ?
Qu'arrive t'il si il y a une interruption pendant que serout envois des données ? Qui a priorité, serout ou interrupt?
PieM a gentiment répondu à cette question en #166.
Pour le serout, il faut revenir à #80 et #119.
Tout dépend de la fréquence, mais le tableau donne :
5ms pour un serout vide et 15ms pour la transmission de 3 octets.
Perso, je ne vois pas très bien où cela va: Un seul affichage central, mis à jour la nuit, vers 2h du mat?

MM
 

BESQUEUT

Senior Member
D'accord je comprends.
Quel est le temps d'exécution de "serout" si j’envoie 6 bytes ?
Qu'arrive t'il si il y a une interruption pendant que serout envois des données ? Qui a priorité, serout ou interrupt?

Au pire il n'est pas essentiel de mettre à jour la console en temps réel. Pour MAXI et MINI, seul une mise à jour par 24 hrs est requise et pourrait être faite la nuit au moment de la fin du cycle.

Pour la conso total, ça serait bien mais ce n'est pas essentiel qu'elle soit faite en temps réel. On pourrait limiter à quelques fois par jour pendant les périodes où les gens sont habituellement dehors.
PieM a répondu en #80.
Notez que l'augmentation du SETFREQ ne change rien au temps de transmission des données (c'est pour ça que PieM a distingué les deux...)
Effectivement, le plus sage serait de transmettre les données en dehors des périodes de douche...
Ou a minima de ne transmettre que toutes les 10 mn (temps supérieur à une douche "normale"...)
De la sorte, seules quelques impulsions peuvent être perdues.
Pour les interruptions soft, le Picaxe ne teste le port désigné qu'entre deux commandes. En conséquence, si l'impulsion haute arrive et se termine pendant l'exécution du serout (ou de toute autre commande...) elle est tout simplement ignorée et il n'y aura pas d'interruption.

Avec les interruptions hard, c'est le PIC qui détecte la transition, mais elle ne sera pas prise en compte avant la prochaine commande.
C'est peu gênant pour une application de comptage, mais ça peut poser problème pour un chronomètre...
Quoiqu'il en soit, avec un X2, le mieux est d'utiliser le compteur hard comme indiqué par PieM.
 
Last edited:

BESQUEUT

Senior Member
Bonjour.

N'oubliez pas de rester courtois en cas de désaccord et de respecter les points de vue des autres membres du forum, même si vous n'êtes pas d'accord avec eux.

Please remember to be civil when there are disagreements and please respect the views of other forum members even if you disagree with them.
PieM est parfois un peu rude, mais c'est un excellent technicien et il serait dommage de se passer de ses conseils toujours avisés.
A sa décharge, Yex2 dispose lui aussi d'un bon niveau en programmation (j'ai bien aimé le inc time dans son dernier code : peu de débutants auraient pensé à ça...) mais il ne maitrise pas encore les subtilités du Picaxe.
Et c'est un peu rageant de voir poser une question qui a déjà été répondue 100 posts plus haut...
 

Yex2

Well-known member
Tout dépend de la fréquence, mais le tableau donne :
5ms pour un serout vide et 15ms pour la transmission de 3 octets.
Perso, je ne vois pas très bien où cela va: Un seul affichage central, mis à jour la nuit, vers 2h du mat?

MM
Je suis au chalet en ce moment et j'ai eu à aller en ville. J'ai pensé au code durant ces 160 km :mad:. Mini et Maxi ont besoin d'être transmis juste une fois par jour tout au plus. En fait seulement lorsqu'il y aura un record enregistré et ça sera toujours vers 2h du matin. Pour "total" on pourrait faire la mise à jour une fois l'heure seulement ou lorsque les gens sont dehors parti faire des activités. Le but de la console est de me permettre de voir qui consomme le plus sans devoir aller dans leur cabine. Il n'y a donc pas d'urgence à connaître l'état réel.

Ça pourrait également être un bouton qui déclenche la mise à jour. Par exemple assis à la table à carte et constatent que la pompe ne tourne pas, je pourrais activer la mise à jour de total à des moments choisis. Tiens donc, c'est une bonne idée ça...
 
Last edited:

Yex2

Well-known member
A sa décharge, Yex2 dispose lui aussi d'un bon niveau en programmation (j'ai bien aimé le inc time dans son dernier code : peu de débutants auraient pensé à ça...) mais il ne maitrise pas encore les subtilités du Picaxe.
Give me a chance, c'est la première fois que j'écris un code pour les PICAXE. :sneaky:
pour le inc time, t'as compris pourquoi ? La loop s'exécute plus vite qu'une seconde, donc je retournais toute de suite dans "record:" et enregistrait un nouveau record de 0 L ...

De toute façon je vais tout changer ça. J'imagine que "time" est également limité à 65535 comme les variable word ? Je vais faire un vrai compteur de 24h, du genre if time=3600 then : inc hours : time =0 : endif

Ensuite je ferai les routines de record lorsque hours =24. Ça va m'éviter de passer un fil des panneaux jusqu'au 4 compteurs. Et en plus ça va le rendre fonctionnel peu importe la latitude où sera le bateau. Il s'agira de mettre sous tension à l'heure qu'on veut faire la fin de cycle.

Et c'est un peu rageant de voir poser une question qui a déjà été répondue 100 posts plus haut...
Si tu fais allusion au post de PieM je ne l'avais probablement pas lu. Moi lorsque j'en ai marre je cogne ou j'ignore. Je préfère ignorer.
 

Yex2

Well-known member
PieM a répondu en #80.
Notez que l'augmentation du SETFREQ ne change rien au temps de transmission des données
D'accord pour SETFREQ mais "BAUDMODE" sert à quoi si c'est pas justement d'ajuster la vitesse de transmission ? Et dans le même ordre d'idée, pourquoi choisir "T2400_16" quand ont peu prendre "N19200_16" ?


Effectivement, le plus sage serait de transmettre les données en dehors des périodes de douche...
Ou a minima de ne transmettre que toutes les 10 mn (temps supérieur à une douche "normale"...)
De la sorte, seules quelques impulsions peuvent être perdues.
Ou pourquoi pas seulement lorsque la pompe cesse de tourner. Un sensor hall par exemple ou peut-être simplement un shunt de 20A installé sur la pompe pour envoyer un signal lorsque la pompe ne tourne plus... Je trouve ça intéressant comme idée.

L'idée d'avoir un bouton pour manuellement mettre à jour fais plus de sens et est bien plus simple. Après tout, le seul temps que j'ai besoin d'avoir la console à jour c'est lorsque je m’assoir pour regarder les données. 💡

Pour les interruptions soft, le Picaxe ne teste le port désigné qu'entre deux commandes. En conséquence, si l'impulsion haute arrive et se termine pendant l'exécution du serout (ou de toute autre commande...) elle est tout simplement ignorée et il n'y aura pas d'interruption.

Avec les interruptions hard, c'est le PIC qui détecte la transition, mais elle ne sera pas prise en compte avant la prochaine commande.
C'est peu gênant pour une application de comptage, mais ça peut poser problème pour un chronomètre...
Quoiqu'il en soit, avec un X2, le mieux est d'utiliser le compteur hard comme indiqué par PieM.
Ok je commence à comprendre.

Lorsque le pic envoie l'info au LCD, est-ce aussi une commande du genre serout ? Comme j'avais indiqué dans les commentaires du programme, pour tout le code des LCD, c'est du cpier collé du code à MGU (aucun mérite pour moi). Msis j'ai vu aucune commande serout dans cette partie de code.

Un jour je regarderai la série X2 c'est promis... (y)

Encore merci de toute votre aide à tous, même à PieM même si sa pédagogie fait sérieusement défaut 🥴
 

BESQUEUT

Senior Member
Pour toutes questions concernant la transmission sur port série, à plus forte raison concernant plusieurs Picaxes, merci d'ouvrir un nouveau thread en indiquant la totalité du besoin et pas seulement un point de détail.
 
Top