IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Petit Mesureur d'Energie


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut Petit Mesureur d'Energie
    Bonjour à Tous ,

    ATTiny+SSD1306+INA219

    Juste un petit problème d'affichage , je n'arrive pas dans ce croquis
    à afficher 3 chiffres après la virgule pourtant il y a bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void oled_values(){
      oled.set_pos(CHART_RIGHT + 5, 1);
      oled.print_float(voltage, 8);
      oled.set_pos(CHART_RIGHT + 5, 3);
      oled.print_float(current, 7);
      oled.set_pos(CHART_RIGHT + 5, 5);
      oled.print_float(mWh, 5);
      oled.set_pos(CHART_RIGHT + 9, 7);
      oled.print(last_millis / 250);
    }
    je suis preneur de tout conseil

    mille mercis par avance
    pascal
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert

    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2013
    Messages
    1 643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2013
    Messages : 1 643
    Par défaut
    Bonjour,

    Le convertisseur AN est en 10 bits soit environ 103. Donc avoir plus de 3 chiffres significatifs est assez illusoire. Cependant cela ne répond pas vraiment au problème d'affichage même si cela explique pourquoi cet affichage devrait être modeste dans ses prétentions de précision.

    Par exemple si la mesure de tension est sur 5 Volts la précision sera au mieux de 5 mV environ. Mais s'il y a un pont diviseur, par exemple par 2, elle ne sera que de 0.01 Volt environ. Donc le câblage n'est pas innocent dans la qualité du résultat.

    De même les calculs de conversion sont à regarder de près.

    En résumé, voir code et câblage serait utile.

    Félicitation d'utiliser un ATtiny (85 ?). On est sûr que la tentation d'utiliser un micropython est exclue .

    Un petit point de physique, l'affichage ne donne pas la puissance (en Watts) mais l'énergie (en mWh, les Joules seraient plus corrects et plus faciles à calculer).

    Salutations

  3. #3
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut
    Merci Guesset d'avoir pris le temps de regarder mon petit problème

    Un petit point de physique, l'affichage ne donne pas la puissance (en Watts) mais l'énergie (en mWh, les Joules seraient plus corrects et plus faciles à calculer).
    oupss! c'est exact mais c'était plus parlant pour le titre

    En résumé, voir code et câblage serait utile
    .
    j'ai déjà joins le code sous le fichier ATtinyPowerMeter_II_V230427a.txt en #1
    quant au schéma , 2 composants majeurs le INA219 (voir datasheet) et le SSD1306 en I2C

    Félicitation d'utiliser un ATtiny (85 ?). On est sûr que la tentation d'utiliser un micropython est exclue .
    J'apprends tout doucement l'ATTiny, mais je ne connais pas du tout le micronpython

    pascal
    Images attachées Images attachées

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 200
    Billets dans le blog
    47
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    oled.print_float(voltage, 8);
    De la documentation sur cette méthode print_float() ?

  5. #5
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut
    issu, je pense, de ssd1306.h et de ssd1306.cpp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    void SSD1306::print_float(float f, uint8_t space) {
      uint8_t digit_left = space - 2; // '0.' used 2 space
      float tmp = f;
      if (tmp < 0.0F) {
        digit_left--;
        tmp *= -1.0F;
      }
      while ((tmp > 10.0F) || (digit_left == 0)) {
        digit_left--;
        tmp /= 10.0F;
      }
      print(f, digit_left);
    }

  6. #6
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 200
    Billets dans le blog
    47
    Par défaut
    Citation Envoyé par cobra38 Voir le message
    Juste un petit problème d'affichage , je n'arrive pas dans ce croquis
    à afficher 3 chiffres après la virgule pourtant il y a bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
      oled.set_pos(CHART_RIGHT + 5, 1);
      oled.print_float(voltage, 8);
    ...
    Pourquoi 8 si tu veux 3 chiffres après la virgule ? Avec 3 chiffres après la virgule, il faut 3 + le point décimal + 1 ou 2 chiffres avant la virgule (+1 s'il y a un signe '-'), non ?

  7. #7
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut
    Justement c'est çà, la logique voudrait qu'avec 8 çà réponde à minima à la question
    or actuellement j'ai seulement 5 chiffres d'afficher et non 8
    et j'avais mis préalablement 9 pour tester et je me suis retrouvé avec au moins 5 ou 6 chiffres avant la virgule d'où ma problématique
    je ne pige pas comment fonctionne :
    print_float()

  8. #8
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 200
    Billets dans le blog
    47
    Par défaut
    Quelle bibliothèque ssd1306 utilises-tu ?

  9. #9
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    982
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 982
    Par défaut
    celle-ci
    Fichiers attachés Fichiers attachés

  10. #10
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 200
    Billets dans le blog
    47
    Par défaut
    Hé bien la version du fichier .rar est bien différente du code que tu as posté au message #5 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    void SSD1306::print_float(float f, uint8_t space) {
      uint8_t space_used = 4; // '0.00' used 4 space
      float tmp = f;
      if (tmp < 0.0F) {
        space_used++;
        tmp *= -1.0F;
      }
      while (tmp > 10.0F) {
        space_used++;
        tmp /= 10.0F;
      }
      while (space > space_used) {
        space_used++;
        print(' ');
      }
      print(f);
    }
    Dans cette version, les flottants sont toujours affichés avec deux décimales. Avec oled.print_float(voltage, 8), tu auras donc 2 décimales, "3.12" occupant 4 caractères, la fonction rajoute 4 espaces devant pour faire 8 caractères : soit "____3.12".

    Mélange des pinceaux ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Très petite puissance
    Par lock42 dans le forum Fortran
    Réponses: 6
    Dernier message: 24/01/2011, 19h26
  2. Réponses: 2
    Dernier message: 26/10/2007, 11h55
  3. [TP]TP s'affiche en tout petit sous w2000
    Par spiroucarolo dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 21/10/2002, 16h36
  4. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  5. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo