MicroPython-4x7

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche

Introduction

Que pourrait-il y avoir de mieux qu'une seul LED? Plein de LEDs! Elle permettent de réaliser des petits affichages en utilisant des afficheurs 4 chiffres à 7 segments. De telles matrices utilisent le 'multiplexage'. Pour contrôler 7 segments de leds, il faut donc 14 broches. Cela représente donc beaucoup de broches, il existe bien des circuits de contrôle comme le MAX7219 pour gérer des matrices mais cela nécessite beaucoup de raccordements qui utilisent une tonne de place.

AdaFruit à bien entendu trouvé une solution à cette pesante situation et a mis au point un breakout permettant de contrôler des tonnes de LEDs en segment sans devoir passer la moitié de la journée à faire des raccordements :-) Ce breakout permet de contrôler des sections de 4 chiffres à 7 segments (en bleu, vert, jaune). Ajouter des afficheurs LED a vos projets devient totalement trivial.

ADF-LED-BACKPACK-Intro-02.jpg
Crédit: AdaFruit Industries www.adafruit.com

Souder l'afficheur

Toutes les images ci-dessous: crédit AdaFruit Industries

ADF-LED-BACKPACK-7SEG-01.jpg Lorsque vous achetez ce Backpack AdaFruit, il est livré complètement assemblé et testé avec un afficheur 7 segments dans l'une des couleurs disponible (selon votre choix entre rouge, jaune, bleu, vert). Vous aurez besoin de souder la matrice (afficheur) sur le backpack mais rassurez-vous, c'est une tâche assez simple.
ADF-LED-BACKPACK-7SEG-02.jpg Retirez les éléments de leur emballage et placez la matrice LED (afficheur) AU DESSUS de la sérigraphie (partie avec les écritures). NE PLACEZ PAS L'AFFICHEUR A L'ENVERS SINON IL NE FONCTIONNERA PAS!! Vérifier sur l'image et assurez vous que les 'points de décimal' sont vers le bas et correspondent à ceux indiqués sur a sérigraphie.
ADF-LED-BACKPACK-7SEG-03.jpg Retourner le tour de façon à ce que le Backpack soit bien à plas sur la matrice/afficheur.
ADF-LED-BACKPACK-7SEG-04.jpg Soudez les 14 broches.
ADF-LED-BACKPACK-7SEG-06.jpg


ADF-LED-BACKPACK-7SEG-05.jpg

Raccourcissez les longues broches/pins.
ADF-LED-BACKPACK-7SEG-08.jpg Partons du principe que vous voulez utiliser un pinHeader de 4 broches (vous pouvez, bien entendu, souder les fils directement sur l'afficheur). Placez une section de 4 broches avec la partie longue insérée dans le Breadboard.

Ne vous préoccupez pas des fils de raccordement et de l'Arduino visibles sur l'image... ils ne sont d'aucune utilités dans le cas présent.

ADF-LED-BACKPACK-7SEG-09.jpg Placez le Backpack sur le connecteur (les broches courtes doivent passer par les trous) et soudez les!

Voila, nous sommes maintenant prêt à brancher l'afficheur sur notre PyBoard.

Brancher sur la PyBoard

PyBoard-4x7-Segment-raccordement.jpg

Voici les raccordements opérés:

PyBoard Breakout Description
X9 C SCL - I2C Clock, le signal d'horloge I2C
X10 D SDA - I2C Data, la ligne de donnée
GND - Masse
VIN + Le breakout s'alimente en 5V. Nous allons donc utiliser VIn (il ne faudra pas dépasser 5V sur l'alimentation de la PyBoard si vous utilisez un bloc pile!!)

La bibliothèque

Frederic Boulanger (voir section ressources) à réaliser une excellent classe bibliothèque pour prendre le contrôle de cet afficheur.

Il n'est vraiment pas nécessaire de réinventer la roue si quelqu'un à déjà fait un travail remarquable. Je vous propose donc de repartir de ce travail.

Télécharger

Vous pourrez trouver le code de son module led4x7.py dans le lien suivant:

Note: L'archive contient également un code de test.

Mettre sur la PyBoard

Branchez votre Pyboard sur votre ordinateur, ce doit apparaître comme un lecteur Flash.

Nous allons copier le module led4x7.py et le fichier de test sur notre PyBoard.

PyBoard-4x7-bibliotheque.jpg

Tester l'afficheur

Ouvrez une ligne de commande sur votre Pyboard (voyez notre tutoriel "L'invite REPL").

Nous allons commencer par vérifier que les fichiers soient bien là en les listant:

import os
os.listdir()

Nous devons clairement voir apparaître le fichier "led4x7.py" et le fichier de test dans la liste (comme sur l'image ci-dessous).

PyBoard-4x7-Segment-check.jpg

Maintenant que nous avons localiser le fichier, nous allons pouvoir l'importer

from led4x7 import *

Selon le montage réalisé, nous nous trouvons sur le bus I2C(1) et l'adresse du breakout est 0x70 (adresse par défaut).

Nous allons néanmoins scanner le bus I2C et identifier l'adresse de notre breakout. Dans ce cas de figure, notre breakout est un esclave et notre PyBoard le maitre (master) du bus.

from pyb import I2C
i2c = I2C( 1, I2C.MASTER )
i2c.scan()

cela retourne la liste suivante.

PyBoard-4x7-Segment-i2c-scan.jpg

Nous pouvons constater que l'adresse 112 (décimale) est bien utilisée (112 décimal correspond à 70 en hexadécimal dont la notation est 0x70). Pour connaître la représentation d'une valeur décimale, vous pouvez utiliser l'instruction print( '%x' % 112 )

Créons maintenant notre objet led4x7 puisque nous connaissons tous les paramètres nécessaires.

led4x7 = LED4x7( addr=0x70, i2c=i2c )
led4x7.on()
led4x7.displayNumber( 4567 )
led4x7.displayString( 'MCH' ) # le "M" ne peut pas être affiché -> rien a cette position 
led4x7.clear()
led4x7.displayDigit( 2, 4 ) # Affiche un 4 en 3ieme position (position de 0 à 3)
led4x7.setDots(True) # affiche les doubles points.

Il y a d'autres exemples de méthodes utilisables comme blink pour le clignotement et set_brightness pour la luminosité.

Brancher plusieurs périphériques I2C

Pour raccorder un autre périphérique I2C (ou un autre afficheur 4x7 Segment) sur votre projet, il suffit de les brancher en parallèle (comme sur le diagramme ci-dessous).

MicroPython-4x7-plusieurs.jpg

Configurer les adresses

Pour chacun des backpack ajoutés, vous devez configurer une adresses I2C différente.

Si deux périphériques I2C ont la même adresse, votre bus ne répondra plus correctement.

Vous pouvez donc continuer à ajouter autant de backpack que vous voulez pour autant qu'il reste des adresses disponibles. La prochaine page montre comment configurer les adresses sur vos backpack de votre afficheur 4x7.

Modifier l'adresse

Le circuit intégré HT16K33 (contrôleur) sur ce backpack à l'adresse I2C par défaut 0x70. Puisque chaque composant d'un bus I2C doit disposer d'une adresse unique, il est important d'éviter les collisions d'adressage sinon vous risquez d'obtenir d'étrange réponses en retour (de vos composants)!

Par chance, le HT16K33 dispose de 2 ou 3 broches permettant d'ajuster l'adresse, ce qui permet de modifier l'adresse du backpack sur le bus I2C! Le backpack de l'afficheur 4 x 7-segments disposent de 3 broches/pins permettant d'ajuster l'adresse I2C.

Cela signifie que vous pouvez utiliser les adresses suivantes pour le backpack:

  • Afficheur 4 x 7-segments: 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77

Vous pouvez mélanger autant de matrices et afficheurs, aussi longtemps que chacun d'entre eux dispose de sa propre adresse unique!

Modifier les addresses

Vous pouvez modifier l'adresse d'un backpack vraiment très facilement.

Si vous regardez derrière la carte, vous trouverez deux ou trois "cavaliers" sous forme de pastilles à ponter avec un point de soudure (Solder Jumper en anglais). Ces deux ou trois cavaliers portent les mentions A0, A1 ou A2.

Chacun de ces cavaliers utilisé pour définir matériellement (hardcoder) l'adresse du module. Si le cavalier active l'adresse s'il est court-circuité/ponté avec un point de soudure. A0 active le bit de poids le plus faible qui à la valeur 1, A1 le bit d'adresse du milieu qui correspond à la valeur 2 et A2 le bit de poids fort qui correspond à la valeur 4.

Au final, l'adresse est: 0x70 + A2 + A1 + A0.

Donc, par exemple:

  • Si A2 est ponté et A0 est ponté, l'adresse est 0x70 + 4 + 1 = 0x75.
  • Si seulement A1 est le ponté, l'adresse est 0x70 + 2 = 0x72

ADF-LED-BACKPACK-ARD-01.jpg
Crédit: AdaFruit Industries www.adafruit.com

Changer l'adresse dans votre code

Il faut bien entendu adapter l'adresse du périphérique I2C dans le code de votre programme.

Si vous modifier l'adresse de votre afficheur I2C de 0x70 à 0x074 (A2 et A0 pontés) alors votre code:

from pub import I2C
i2c = I2C( 1, I2C.MASTER )
led4x7 = LED4x7( addr=0x70, i2c=i2c )
led4x7.on()

deviendra...

from pub import I2C
i2c = I2C( 1, I2C.MASTER )
led4x7 = LED4x7( addr=0x75, i2c=i2c )
led4x7.on()

Ressources

Où acheter



Source diverses:

Traduit/composé par Meurisse D. pour MCHobby.be - Translated/assembled by Meurisse D. for MCHobby.be

Traduit avec l'autorisation de micropython.org - Translated with the authorisation of micropython.org

Traduit avec l'autorisation d'AdaFruit Industries - Translated with the permission from Adafruit Industries - www.adafruit.com

Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : «  Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.

L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.