Jetblack31 / EcoPV

Arduino based energy routing to maximize the use of PV production at home.
GNU Lesser General Public License v2.1
30 stars 16 forks source link

Ajout traceur serie arduino ide #7

Closed StephF13 closed 4 years ago

StephF13 commented 4 years ago

Bonjour Bernard,

Je t’envoie ce Pull Request pour te proposer ma contribution a ce superbe projet EcoPV.

En comparaison aux versions précédentes de Tignous et autres contributeurs ou il était simple de visualiser les courbes des grandes valeurs physiques grâce au traceur de courbes de l'Arduino IDE, ta version étant dépourvu de cette fonctionnalité, j'ai décidé de développer cette dernière.

A toi de décider si tu l'intégreras ou pas dans ta version.

Je vais également t'envoyer un MP sur le forum "forum-photovoltaique.fr" afin de te demander l'autorisation de proposer ce "mod" dans ton fil de discutions.

Cordialement

Stéphane

Jetblack31 commented 4 years ago

Hello,

J'ai commencé à regarder, c'est propre, bravo ! J'ai déjà fait qq modifs mineures dans ton code, quasiment que de la forme. (désolé je maitrise mal la gestion des PR, ca a du corriger ton code tout de suite).

Remarque 1: Les variables que tu utilises entre les interruptions et la loop sont en volatile. Toutefois, pour les variables qui font plus de 8 bits (long, integer), il faut en plus, quand tu t'en sers dans la loop, les copier dans des variables locales en entourant le code d'un noInterrupts() puis interrupts(), par exemple:

noInterrupts ( ); myVariable_tmp = myVariable; interrupts ( );

Remarque 2 : le calcul du Delay SSR pour ton graphe est mal fait.

Il faut remplacer Serial.print(int(8000 - (FdCtrlCmd inv_255 8000)) / 100) ; par Serial.print( energyToDelay (byte(FdCtrlCmd) * 0.064 )) ;

et en fait FdCtrlCmd peut être défini dès le départ comme un byte pour gagner en mémoire et écrire alors dans l'interruption : FdCtrlCmd = byte (controlCommand);

Note : en régime de régulation linéaire, energyToDelay (byte(FdCtrlCmd)) est déjà disponible dans la loop dans la variable OCR1A_tmp

A+ Bernard

StephF13 commented 4 years ago

Bonsoir Bernard,

 

Merci pour ton retour,

 

Concernant la remarque 1, je ne connaissais pas le code d'un noInterrupts() puis interrupts(), merci.

Idem d’ailleurs avec la fonction F() qui permet d'écrire en mémoire flash plutôt qu'en ram.

 

Je vais regarder en détail tes infos sur le nouveau calcul du FdCtrlCmd avec energyToDelay.

Sinon, j'avais pas choisis de le définir en "byte" car me permet d'afficher avec plus ou moins de granularité sur le graphe en fonction du /1 /10 /100 en fin d’équation.

 

@+  

 

Sent: Saturday, April 25, 2020 at 4:58 PM From: "Jetblack" notifications@github.com To: "Jetblack31/EcoPV" EcoPV@noreply.github.com Cc: "StephF13" c.monmailamoi@gmx.fr, "Author" author@noreply.github.com Subject: Re: [Jetblack31/EcoPV] Ajout traceur serie arduino ide (#7)

 

Hello,

J'ai commencé à regarder, c'est propre, bravo ! J'ai déjà fait qq modifs mineures dans ton code, quasiment que de la forme. (désolé je maitrise mal la gestion des PR, ca a du corriger ton code tout de suite).

Remarque 1: Les variables que tu utilises entre les interruptions et la loop sont en volatile. Toutefois, pour les variables qui font plus de 8 bits (long, integer), il faut en plus, quand tu t'en sers dans la loop, les copier dans des variables locales en entourant le code d'un noInterrupts() puis interrupts(), par exemple:

noInterrupts ( ); myVariable_tmp = myVariable; interrupts ( );

Remarque 2 : le calcul du Delay SSR pour ton graphe est mal fait.

Il faut remplacer Serial.print(int(8000 - (FdCtrlCmd inv_255 8000)) / 100) ; par Serial.print( energyToDelay (byte(FdCtrlCmd) * 0.064 )) ;

et en fait FdCtrlCmd peut être défini dès le départ comme un byte pour gagner en mémoire et écrire alors dans l'interruption : FdCtrlCmd = byte (controlCommand);

Note : en régime de régulation linéaire, energyToDelay (byte(FdCtrlCmd)) est déjà disponible dans la loop dans la variable OCR1A_tmp

A+ Bernard

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

Jetblack31 commented 4 years ago

Bonsoir Bernard,   Merci pour ton retour,   Concernant la remarque 1, je ne connaissais pas le code d'un noInterrupts() puis interrupts(), merci.

Ca permet d'arrêter les appels aux interruptions, et donc pas de risque qu'une interruption arrête le programme juste au moment où il est en train de lire une variable de plus de 1 octet, ce qui nécessite + de 1 coup d'horloge et donc qui pourrait souffrir d'une erreur de lecture. Il faut bien sûr rester en mode noInterrupts le moins de temps possible pour éviter de retarder le traitement des interruptions.

Idem d’ailleurs avec la fonction F() qui permet d'écrire en mémoire flash plutôt qu'en ram.

C'est pour préserver la ram data. Le nano n'a que 2000 octets d'espace variable pour les variables mais aussi pour la pile.

  Je vais regarder en détail tes infos sur le nouveau calcul du FdCtrlCmd avec energyToDelay. Sinon, j'avais pas choisis de le définir en "byte" car me permet d'afficher avec plus ou moins de granularité sur le graphe en fonction du /1 /10 /100 en fin d’équation.

La puissance de routage est codée sur 255 niveaux. energyToDelay est un tableau qui convertit la demande de puissance routée en un délai de déclenchement du SSR. La conversion se fait par pas de 64 us. Le delai de déclenchement sera donc toujours un multiple de 64 us, il n'y a pas moyen d'améliorer la précision.

Jetblack31 commented 4 years ago

Salut,

Si tes dernières motifs sont stables, avertis moi et je fais le merge en Master ! De mon côté, après cela, j'attaque la révision du calcul des index, et aussi qq modifs pour gagner un peu en mémoire. Après réflexion, le traceur que tu développes ne sera pas compatible avec MySensors. Il faudra l'indiquer quelque part. La raison est que MySensors écris sur la liaison série au démarrage, ca va perturber l'affichage de tes graphes.

Encore merci, et à bientôt.

StephF13 commented 4 years ago

Salut Bernard,

Les dernières modifications ont été faites.

bon "merge" :).

Cordialement

Jetblack31 commented 4 years ago

Ok super, je vais faire le merge. Je te laisse le soin de communiquer sur cette version avec traceur sur les forums !

De mon côté, je ferai sans doute quelques petites évolutions dans la branche Master par la suite.

Merci encore pour ta contribution !

Bernard

Le 26 avr. 2020 à 13:02, StephF13 notifications@github.com a écrit :

Salut Bernard,

Les dernières modifications ont été faites.

bon "merge" :).

Cordialement — You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/Jetblack31/EcoPV/pull/7#issuecomment-619529927, or unsubscribe https://github.com/notifications/unsubscribe-auth/AG24IAIU3X2E4WAMP6VT43LROQIDPANCNFSM4MQXJHPA.

Jetblack31 commented 4 years ago

Merge effectué !