le 'Neopixel' ... c'est beau :)

Salut

Voilà, j'ai vu cette vidéo sur le net et j'ai adorer les leds utilisées ... des Neopixel

J'ouvre ce sujet pour discuter sur l'utilisation de ces leds sous arduino, c'est simple ou pas ? est ce que ca peux facilement remplacer un afficheur 7 segments classique ?

Merci

esloch:
Salut

Voilà, j'ai vu cette vidéo sur le net et j'ai adorer les leds utilisées ... des Neopixel

J'ouvre ce sujet pour discuter sur l'utilisation de ces leds sous arduino, c'est simple ou pas ? est ce que ca peux facilement remplacer un afficheur 7 segments classique ?

Merci

Bonsoir
les "neopixels" ou plutôt les " leds RGB adressables individuellement en protocole serie" :grin:

sont des dispos tres agreables à utiliser
Mais comme toutes choses , il y a des avantages et des inconvenients

pepe:
Bonsoir

De nombreuses discussions concernant les Neopixels ont déjà été ouvertes sur le forum.

...

la fonction 'recherche' du forum est décevante .. inutilisable .. :frowning:

pepe:
...
Neopixel est une marque plus qu'un produit. Il s'agit d'une gamme de modules et de composants permettant le contrôle individuel de leds connectées en cascade au travers d'une interface série à 1 fil (commande en largeur d'impulsions).

On trouve notamment les leds RGB WS2812 (dont il existe une variante WS2812B) et SK6812 et le pilote de led RGB WS2811 (circuit seul, sans led intégrée).
...

oué ... j'ai découvert qu'il y a plusieurs références ... mais j'arrive pas à les trouver a un bon prix sur les sites chinois ...

Edit : meilleure offre que j'ai trouvé ... c'est bon ce produit ?

qu'elle référence est la plus commune .. ?

pepe:
... La commande de ces circuits nécessite un timing assez contraignant, variable selon le modèle, qui monopolise le micro-contrôleur durant les transferts. Plusieurs bibliothèques logicielles pour piloter les Neopixels à partir d'un Arduino sont disponibles.
...

j’espère que c'est faisable pour les néophyte comme moi ...

pepe:
... Il est tout-à-fait envisageable de réaliser un afficheur 7 segments à base de Neopixels, avec une ou plusieurs leds par segment (selon la taille et la présence éventuelle de dispositifs pour diffuser la lumière émise sur toute la longueur des segments).

On peut simplement utiliser des barres de leds Neopixel pour réaliser des segments en couleur, ou à l'inverse mettre en œuvre des WS2811 pour piloter chacun 3 segments de leds monochromes en série (10 de ces circuits peuvent alors piloter un afficheur d'horloge numérique de type 88:88).

mmm ... oui ... même si en réalité moi je pense plutôt a des afficheurs de ce type :

Artouste:
Bonsoir
les "neopixels" ou plutôt les " leds RGB adressables individuellement en protocole serie" :grin:

sont des dispos tres agreables à utiliser
Mais comme toutes choses , il y a des avantages et des inconvenients

intéressant ...
est ce que je peux connaitre les avantages et les inconvénients ...
Merci

esloch:
j’espère que c'est faisable pour les néophyte comme moi ...

mmm ... oui ... même si en réalité moi je pense plutôt a des afficheurs de ce type :

intéressant ...
est ce que je peux connaitre les avantages et les inconvénients ...
Merci

La ce n'est pas/plus de l'afficheur 7(8 avec dot point ) segments basique ( un segment= une illumination)
mais de l'afficheur "matricé" en X/Y :grin:

Si tu veux juste te "construire" de l'afficheur basique 7(8) segments basé sur du "neopixel" , il faut faire de l'integration mecanique/optique (diffuseur/diffusant) voir le principe

ça m'etonnerait que ce ne soit pas déjà fait , mais je ne connais pas de refs "commerciales" ?

Maintenant si c'est juste de gerer en motifs de la matrice X/Y RGB , c'est pas les topics qui manquent 8)

Bonjour,

je lis avec attention ce post et j'ai une petite question :

Y a-t-il (j'imagine que oui...) une distance maximale entre la sortie de l'arduino et les leds, ou autrement dit quelle longueur de fils maximale ?

Par ailleurs concernant le "multitâche", un programme avec une interruption (comptage d'impulsion) peut-il être compatible avec le transfert de commande au leds ?

Merci de vos réponses

Artouste:
....
Maintenant si c'est juste de gerer en motifs de la matrice X/Y RGB , c'est pas les topics qui manquent 8)

merci de m'indiquer un bon topic ... je ne sais pas pourquoi j’arrive pas à faire une recherche correct avec l'option recherche

disons que je veux contrôler une matrice 4 x 6 .. je penser utiliser des HC595 (vu que j'ai travailler déjà avec et je maîtrise +/-) ... ca implique 3 HC595 par afficheur ... mais j'ai vu cette vidéo sur le contrôle de matrice 8 x 8 avec des MAX7219 ... je trouve que c'est beaucoup plus facile ... mais je ne sais pas si c'est adaptable (8 x 8 --> 4 x 6) et surtout comment effectuer le branchements des leds avec ce MAX7219 (Edit : trouvé ... pas très clair ... mais bon !) ... enfin je cherche

NOTE : j'adore les afficheurs et les leds ....

Merci pepe d'avoir pris un peu de temps pour répondre.

Par contre j'ai un peu de mal à comprendre cette histoire de multitâche...

je donne un cas concret : imaginons que je compte des impulsions par interruption et que je veux en fonction du nombre d'impulsion allumer un ruban de led adressable. (3 seuils de comptage donc 3 couleurs uniquement).

Penses tu que cela puisse fonctionner avec une programmation classique (pas en assembleur) et en utilisant la biblio neopixel ?

Merci de ta réponse

Merci pepe de ta réponse, j'ai presque tout compris...!

euh juste le 3x8 c'est bien parce que il y a 3couleurs (RGB) codés sur 8bits ??

Je pense que je serai sur une fréquence plus petite que 1,35kHz donc normalement pas de problème.

Par contre si je dépasse tu évoques un comptage matériel. Cela signifie bien qu'il faut alors utilisé un CI externe spécifique pour ce comptage ?? si oui quel circuit conseilles tu ? (compatible arduino, facilité d’utilisation (fmax = 10kHz)).

Merci encore pour tes éclairages très précieux.

Ah ok, tu parles alors d'un programme de ce type là...

uint32_t compteur;

void RAZ_compteur() {
  TCNT1 = 0;
  TIFR1 = 1;
  compteur = 0UL;
}

void avance_compteur() {
  cli();
  ((uint16_t*)&compteur)[0] = TCNT1;
  if (TIFR1 & 1) {  // TOV1 (timer overflow) ?
    TIFR1 = 1;      // remise à zéro de TOV1
    ((uint16_t*)&compteur)[1] ++;
    if (((uint16_t*)&compteur)[0] & 0x8000)
      ((uint16_t*)&compteur)[0] = TCNT1;
  }
  sei();
}

void setup() {
  // entrée 5 avec résistance de rappel
  pinMode(5, INPUT_PULLUP);

  // configuration du compteur/timer 1
  TCCR1A = 0;
  TCCR1B = 7; // compte les fronts montants
  TCCR1C = 0;
  TIMSK1 = 0;
  RAZ_compteur();

  // sortie vers moniteur série
  Serial.begin(9600);
  Serial.println("-------");

  // sortie à 490 Hz pour le test
  pinMode(3, OUTPUT);
  analogWrite(3, 128);
}

void loop() {
  // lecture compteur matériel
  avance_compteur();

  // envoi compteur vers moniteur série
  Serial.println(compteur);

  // délai 1 seconde
  delay(1000);

  // RAZ compteur si réception touche
  if (Serial.available()) {
    do
      Serial.read();
    while (Serial.available());
    RAZ_compteur();
  }
}

Ok merci bcp pour ces infos...par contre pour la fin de ton post je pense que tu as mélangé avec le post sur le compte tour.

Désolé mais j'ai encore une incompréhension sur ce compteur matériel et le code qui va avec :

En quoi ce code permet de lire une fréquence plus élevé ?

Je m'explique : avance_compteur() se trouve dans la boucle. Si derrière, le programme est long, on repassera par cette fonction qu'après une autre impulsion et elle ne sera pas compté, non ??

comment alors trouver, (calculer ?) la limite en fréquence ?

Merci encore de tes conseils pepe

Encore Merci pepe d'avoir pris du temps pour faire une réponse claire et précise...je vois qu'en plus tu as une bonne mémoire !

J'avis effectivement essayé le programme au mois de juin et il fonctionne très bien, mais j'avais encore des incompréhensions (pour tout de dire j'en ai encore, mais bon j'ai compris l’essentiel !)

Merci encore