jeudi 23 novembre 2017

Afficheur 8 chiffres, 8 LEDs, 8 boutons TM1638 et STM32 Nucleo

J'ai déjà eu l'occasion de parler des modules d'affichage "LED and KEY", qui comportent 8 chiffres, 8 LEDs et 8 boutons poussoirs, le tout contrôlé par un circuit intégré TM1638: au cours des derniers mois, je les ai utilisés avec une carte Arduino, et ensuite avec un ATTiny85.

Cette fois-ci, j'en ai utilisé un avec une carte STM32 Nucleo (programmée sur mbed, comme d'habitude).

Le circuit

Les branchements sont un peu particuliers, puisque sur le module d'affichage, une seule broche est consacrée à l'envoi et à la réception des données, alors que sur la carte Nucleo, les données sont reçues par la broche MISO et envoyées par la broche MOSI.

Par conséquent, les broches MISO et MOSI de la carte Nucleo sont toutes les deux branchées à la broche DIO du module TM1638, en prenant soin, cependant, de placer une résistance de 1 kΩ entre MOSI et DIO.

  • Broche VCC du module afficheur:  sortie 3V3 du Nucleo
  • Broche GND du module afficheur:  broche GND du Nucleo
  • Broche STB du module afficheur:  broche CD/D10 du Nucleo
  • Broche CLK du module afficheur:  broche SCK/D13 du Nucleo
  • Broche DIO du module afficheur:  broche MISO/D12 et résistance de 1 kΩ - broche MOSI/D11 du Nucleo



Importation de la bibliothèque

Après avoir créé un nouveau projet dans mbed, on y importe la bibliothèque TM1638 par Wim Huiskamp.

Premier exemple:  affichage d'un nombre croissant

Ce premier script affiche un nombre entier qui augmente d'une unité à chaque demi seconde.


/**********************************************************
On affiche des nombres croissants sur un module LED&KEY
(TM1638) branché à une carte STM32 Nucleo.
http://electroniqueamateur.blogspot.com/2017/11/afficheur-8-chiffres-8-leds-8-boutons.html
**********************************************************/
#include "mbed.h"
#include "TM1638.h"
TM1638_LEDKEY8 LEDKEY8(D11,D12,D13, D10); // MOSI, MISO, SCLK, CS
int compteur = 0;
//char cmd, bits;
int main() {
LEDKEY8.setBrightness(TM1638_BRT4);
while (1) {
compteur++;
LEDKEY8.cls();
LEDKEY8.printf("%0d", compteur);
wait(.5);
}
}

Deuxième exemple:  utilisation des boutons

Dans ce deuxième script, on affiche un numéro et on allume une LED chaque fois qu'un des 8 boutons est enfoncé.




/**************************************************************************
Module LED&Key et STM32 Nucleo.
Le numéro du bouton appuyé est affiché, et la LED correspondante s'allume.
http://electroniqueamateur.blogspot.com/2017/11/afficheur-8-chiffres-8-leds-8-boutons.html
******************************************************************************/
#include "mbed.h"
#include "TM1638.h"
TM1638::KeyData_t keydata;
TM1638_LEDKEY8 LEDKEY8(D11,D12,D13, D10); // MOSI, MISO, SCLK, CS
int main() {
LEDKEY8.cls();
LEDKEY8.setBrightness(TM1638_BRT4);
while (1) {
if (LEDKEY8.getKeys(&keydata)) {
if (keydata[LEDKEY8_SW1_IDX] == LEDKEY8_SW1_BIT) { // premier bouton enfoncé
LEDKEY8.cls(true); // on éteint tout
LEDKEY8.printf("%0d", 1); // affichage du chiffre 1
LEDKEY8.setIcon(TM1638_LEDKEY8::LD1); //on allume la 1ere LED
}
if (keydata[LEDKEY8_SW2_IDX] == LEDKEY8_SW2_BIT) { // deuxième bouton enfoncé
LEDKEY8.cls(true); // on éteint tout
LEDKEY8.printf("%0d", 2); //on affiche le chiffre 2
LEDKEY8.setIcon(TM1638_LEDKEY8::LD2); // on allume la 2e LED
}
if (keydata[LEDKEY8_SW3_IDX] == LEDKEY8_SW3_BIT) { // troisième bouton enfoncé
LEDKEY8.cls(true); // on éteint tout
LEDKEY8.printf("%0d", 3); // on affiche le chiffre 3
LEDKEY8.setIcon(TM1638_LEDKEY8::LD3); // on allume la 3e LED
}
if (keydata[LEDKEY8_SW4_IDX] == LEDKEY8_SW4_BIT) { // quatrième bouton enfoncé
LEDKEY8.cls(true); //on éteint tout
LEDKEY8.printf("%0d", 4); // on affiche le chiffre 4
LEDKEY8.setIcon(TM1638_LEDKEY8::LD4); // on allume la 4e LED
}
if (keydata[LEDKEY8_SW5_IDX] == LEDKEY8_SW5_BIT) { // cinquième bouton enfoncé
LEDKEY8.cls(true); // on éteint tout
LEDKEY8.printf("%0d", 5); // on affiche le chiffre 5
LEDKEY8.setIcon(TM1638_LEDKEY8::LD5); // on allume la 5e LED
}
if (keydata[LEDKEY8_SW6_IDX] == LEDKEY8_SW6_BIT) { // sixième bouton enfoncé
LEDKEY8.cls(true); // on éteint tout
LEDKEY8.printf("%0d", 6); // on affiche le chiffre 6
LEDKEY8.setIcon(TM1638_LEDKEY8::LD6); // on allume la 6e LED
}
if (keydata[LEDKEY8_SW7_IDX] == LEDKEY8_SW7_BIT) { // septième bouton enfoncé
LEDKEY8.cls(true); // on éteint tout
LEDKEY8.printf("%0d", 7); // on affiche le chiffre 7
LEDKEY8.setIcon(TM1638_LEDKEY8::LD7); // on allume la 7e LED
}
if (keydata[LEDKEY8_SW8_IDX] == LEDKEY8_SW8_BIT) { // huitième bouton enfoncé
LEDKEY8.cls(true); // on éteint tout
LEDKEY8.printf("%0d", 8); // on affiche le chiffre 8
LEDKEY8.setIcon(TM1638_LEDKEY8::LD8); //on allume la 8e LED
}
} //if Key
}
}


À lire également:

Yves Pelletier
   (TwitterFacebook)

1 commentaire:

  1. Salut. Je n’y connais rien dans le monde de l’informatique et de l’électronique. Les articles disponibles sur ce blog m’aideront certainement à en apprendre un peu plus. Par exemple, avec ce billet, je comprends mieux comment fonctionnent les modules d’affichage LED.


    RépondreSupprimer