Partage
  • Partager sur Facebook
  • Partager sur Twitter

[NeoPixel][Raspi] LEDs off restent un peu allumées

et en plus ça diffère selon le type de LED

    18 mai 2021 à 17:53:27

    Bonjour bonjour !

    Alors voilà j'ai un petit projet de LEDs et j'en ai 2 types qui fonctionneront en même temps (cherchez pas pourquoi, c'est comme ça :lol:) :

    • Des LEDs Neopixel 5V (protocole de com ws2812). Elles sont par unité.
    • Ruban LEDs Neopixel 12V (même protocole mais pour les 12V : ws2811). Le ruban a un microcontrôleur pour chaque section de 3 LEDs.

    Je les contrôle normalement via un pin pwm (le GPIO18) d'une Raspi 3 avec un p'tit code de blink en python. Les deux sont alimentées comme il faut de façon externe (5V, pour les premières, 12V pour le ruban) et reçoivent la même trame de données en data_IN depuis le GPIO18 (en 3V3).

    le code:

    import board
    import neopixel
    import time
    
    pixels = neopixel.NeoPixel(
        board.D18, 3, brightness=0.5, auto_write=False, pixel_order=neopixel.GRB
    )
    
    while True:
        pixels.fill((255,255,255))
        pixels.show()
        time.sleep(1)
        pixels.fill((0,0,0))
        pixels.show()
        time.sleep(1)

    le branchement (qui vaut pour les 2 types de LEDs):


    A l'allumage du blink, la couleur est bonne. (donc montage ok, trame ok, code ok)

    A l'extinction du blink, le ruban 12V s'eteint bien mais les LEDs 5V restent allumées légèrement en rouge/rose (et pas exactement la même teinte selon chaque LED). Pour autant, cela correspond bien au (0,0,0), c'est pas un problème de trame...

    Du coup j'aimerais bien savoir pourquoi et comment y remédier? J'ai fais quelques recherches mais j'ai rien trouvé de concluant, du coup je viens voir si, ici, quelqu'un aurait une idée :D J'ai vu quelqu'un avec un problème similaire sur un ESP8266 mais les solutions apportées n'ont pas fonctionné avec moi...

    merci d'avance et bonne fin de journée :p

    • Partager sur Facebook
    • Partager sur Twitter
    Si je suis tête en l'air, c'est par habitude de viser le sommet
      18 mai 2021 à 20:31:46

      La doc du ws2811 et du ws2812 spécifie qu'un niveau logique '1' doit être au minimum de 0.7*VDD pour être assimilé correctement à un '1' logique.

      Sachant que ces chip sont tous les 2 basés sur du 5V en interne, cela donc donc un niveau logique de 3.5V mini pour être détecté.

      Ta RPi ayant un GPIO en 3.3V, c'est insuffisant, tu es hors spécification, ce qui t'expose à tes comportements totalement aléatoire.

      Voila pourquoi ça peut marcher dans certains cas et pas d'autres.

      C'est pareil pour le ESP8266 qui est lui aussi en 3.3V.

      Il y a une solution qui consiste à abaisser la tension d'alimentation de la première LED de la string avec une diode pour décaler les niveaux, mais ce n'est pas l'idéal.

      Le mieux serait d'utiliser une petite porte logique pour convertir ton niveau 0/3.3V en niveau 0/5.0V

      • Partager sur Facebook
      • Partager sur Twitter
        19 mai 2021 à 16:01:07

        Bonjour,

        Merci pour ta réponse :)

        j'avais effectivement lu ça dans la doc, et j'avais essayé un truc du style : sous-alimenter les LED en 4.7V (voire moins) au lieu de 5V pour que 3.3V soit considéré comme un niveau logique `1`. Mais je n'avais pas observé de meilleurs résultat (si ce n'est que les LEDs brillaient légèrement moins fort, logique).

        J'ai viens donc d'essayer de remonter le niveau du signal de données avec un AOP (TL082C) en non-inverseur avec un gain qui va bien. j'ai pu observer la trame à l'ocillo, elle est bien en 0/5.0V. Cependant, la trame n'est plus traduite correctement, j'ai l'impression que l'AOP ne peut pas suivre la cadence de la trame...

        (Avec la brightness à 100%,) voici ce que ça donne à l'oscillo (avec en haut (CH2), la trame en sortie du GPIO, en bas (CH1), en sortie de l'AOP)

        • blink à l'état haut

        • blink à l'état bas :

        au final la trame est pas bonne et le résultat sans intérêt (avec la brightness à 50%, un `0`apparaît régulièrement pour faire un cycle rose>jaune>blanc, alors qu'à 100% la LED reste rose)...

        J'ai pas énormément de matos autre que des AOP ou des MOSFET donc ça me paraît difficile de faire mieux... Mais est-ce que c'est certain que le problème vienne de là? Quand j'ai sous-alimenté Vdd, ça aurait dû marcher normalement, non?

        J'espère vraiment régler ce truc cette semaine, ça m'énerve de tourner en rond :lol:

        • Partager sur Facebook
        • Partager sur Twitter
        Si je suis tête en l'air, c'est par habitude de viser le sommet

        [NeoPixel][Raspi] LEDs off restent un peu allumées

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown