Table des matières:
- Étape 1: Obtenez les marchandises…
- Étape 2: Connectez-vous directement à l'écran LED
- Étape 3: Spécification d'un caractère à afficher
- Étape 4: Conservez les ports d'E/S avec un registre à décalage
- Étape 5: Résumé
Vidéo: Utilisation d'une LED matricielle avec un Arduino et un registre à décalage : 5 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:11
La LED à matrice de points Siemens DLO7135 est une pièce étonnante de l'optoélectronique. Il est présenté comme un affichage intelligent matriciel 5x7 (r) avec mémoire/décodeur/pilote. En plus de cette mémoire, il dispose d'un affichage ASCII à 96 caractères avec des caractères majuscules et minuscules, un générateur de caractères et un multiplexeur intégrés, quatre niveaux d'intensité lumineuse, et tout fonctionne sur 5V. C'est beaucoup à vivre jusqu'à, et à 16 $ la pop, ça devrait vraiment le faire. En passant la moitié de la journée dans mon magasin d'électronique local préféré, j'en ai trouvé un plein pour 1,50 $ pièce. J'ai quitté le magasin avec plusieurs. Cette instructable vous montrera comment vous connecter à ces LED matricielles et afficher les caractères à l'aide d'un Arduino basé sur AVR. Si vous avez lu l'un de mes guides précédents, vous pouvez avoir l'idée que je suis souvent en faveur de la solution la plus parcimonieuse, et vous ne vous tromperiez pas, même si je n'atteint pas l'objectif de temps en temps. Par conséquent, je vais également passer une autre étape dans cette instructable et vous montrer comment vous pouvez réduire le nombre de ports d'E/S nécessaires pour piloter ces grandes LED matricielles.
Étape 1: Obtenez les marchandises…
Pour ce petit projet court, vous aurez besoin de:
- un microcontrôleur basé sur AVR comme un Arduino ou l'un de ses semblables. Ces instructions pourraient probablement être adaptées à votre MCU de choix.
- une LED matricielle DLO7135 ou autre de la même famille
- un registre à décalage 8 bits comme le 74LS164, 74C299 ou 74HC594
- une planche à pain
- fil de raccordement, coupe-fil, etc.
Un fer à souder n'est pas nécessaire, bien que j'en utilise un plus tard; vous pouvez vous en passer.
Étape 2: Connectez-vous directement à l'écran LED
Disposez votre petite liste de pièces et saisissez la LED. Placez-le légèrement centré sur la planche à pain, à cheval sur la rainure médiane. La première partie de la connexion a lieu tout sur le côté gauche de la LED. La broche n°1 est située en haut à gauche comme indiqué par le triangle/la flèche. J'ai mis les fonctions des broches sur une image pour votre référence pendant que vous lisez ou connectez votre LED.
Le côté gauche
Positif et Négatif En commençant en haut à gauche, connectez Vcc à 5V. C'est peut-être une bonne idée de ne pas alimenter votre carte tant que tout le côté gauche n'est pas terminé; la LED peut être brillante si vous essayez de voir de petits trous pour piquer dans les fils. Connectez le GND en bas à gauche à la terre. Lamp Test, Chip Enable et Write Les 2e et 3e en partant du haut à gauche sont Lamp Test et Chip Enable. Ce sont tous deux une logique négative, ce qui signifie qu'ils sont activés lorsqu'ils sont à un 0 logique au lieu de 1. Mon image ci-dessous devrait avoir des barres au-dessus d'eux, mais je ne l'ai annoté pour aucun d'entre eux. La broche LT, lorsqu'elle est activée, allume chaque point de la matrice de points à une luminosité de 1/7e. C'est plus un test de pixel, mais la chose intéressante à propos de la broche LT est qu'elle n'écrase aucun caractère qui est dans la mémoire, donc si vous en avez plusieurs enchaînés (ils ont une distance de vision de 20 pieds), stroboscopique LT peut le faire ressembler à un curseur. Pour vous assurer qu'il est désactivé, connectez-le à 5V. Les broches CE et WR sont également à logique négative et doivent être activées pour que cet appareil intelligent puisse être écrit. Vous pouvez microgérer ces broches avec des ports d'E/S de rechange sur votre microcontrôleur, mais nous ne nous embêterons pas ici. Il suffit de les connecter à la terre pour les garder activés. Niveaux de luminosité Il existe quatre niveaux de luminosité programmables sur la famille de LED DLO:
- Vierge
- 1/7 Luminosité
- 1/2 Luminosité
- Pleine luminosité
BL1 HIGH et BL0 LOW est de 1/2 luminosité. Les deux HIGH est la pleine luminosité. Réglez-le sur ce que vous voulez. Encore une fois, si vous avez des ports d'E/S disponibles et que c'est assez important pour vous, cela peut également être contrôlé par votre Arduino. Cela termine le côté gauche. Si vous mettez votre carte sous tension, vous devriez voir la LED s'allumer. Jouez avec les commandes de luminosité et le test de la lampe pour vous familiariser avec, si vous êtes curieux.
Le côté droit
Le côté droit se compose entièrement de ports de données. Le coin inférieur droit, la broche 8 ou D0 pour être précis, représente le bit le moins significatif dans le caractère 7 bits. En haut à droite, la broche 14 ou D6 représente le bit le plus significatif. Cela vous permet de savoir dans quel ordre mélanger vos bits lors de l'écriture sur la LED. Lorsque vous avez câblé les ports d'entrée de données, trouvez sept ports d'E/S numériques vides sur votre Arduino ou AVR et connectez-les. Vous voudrez probablement vous rappeler quel port de sortie de données de votre AVR va à quel port d'entrée de données sur la LED. Vous êtes maintenant prêt à envoyer des données sur cette LED intelligente. Vous tremblez encore d'excitation ? Je sais que je le suis…
Étape 3: Spécification d'un caractère à afficher
Le jeu de caractères utilisé sur cette LED CMOS est votre ASCII ordinaire commençant à 0x20 (décimal 32; un espace) et se terminant à 0x7F (décimal 127; une suppression, bien que représenté sur la LED comme un graphique de curseur). Donc, avoir la LED afficher un caractère n'implique rien de plus que d'appuyer sur le 1 ou 0 logique sur vos broches de sortie de données, généralement suivi d'une impulsion WR, mais je renonce à cela pour cet exercice. Donc, vous avez écrit ou vous vous souvenez quelles broches vont à quels ports, n'est-ce pas ? J'ai choisi PD[2..7] et PB0 (broches numériques 2 à 8 en langage Arduino). Je ne suggère normalement pas d'utiliser PD[0..1] parce que je le dédie à ma communication série vers un boîtier FreeBSD, et Arduino et al. mappez ces broches sur leur canal de communication USB FTDI, et bien qu'"ils" disent que les broches 0 et 1 fonctionneront si vous n'initialisez pas la communication série, je n'ai jamais pu utiliser ces broches comme E/S numériques normales. En fait, j'ai passé deux jours à essayer de déboguer un problème lorsque j'ai essayé d'utiliser PD0 et PD1 et j'ai constaté qu'ils étaient toujours ÉLEVÉS. *haussement d'épaules* Ce serait probablement bien d'avoir une sorte d'entrée externe, comme peut-être un clavier, une molette ou une molette, ou peut-être même une entrée depuis un terminal (mon ArduinoTerm n'est pas encore prêt pour le prime time…). Le choix t'appartient. Pour l'instant, je vais juste illustrer comment obtenir le code pour obtenir le caractère que vous voulez sur la LED. Il y a un fichier zip à télécharger comprenant le code source et le Makefile et il y a aussi un court film montrant la LED imprimant son jeu de caractères. Désolé pour la qualité merdique de la vidéo. Le code ci-dessous imprime la chaîne « Bienvenue dans mon Instructable ! puis parcourt l'ensemble du jeu de caractères pris en charge par la LED.
DDRD = 0xFF; // SortieDDRB = (1<<DDB0); char msg = "Bienvenue dans mon Instructable!";uint8_t i;for (;;){ for(i=0;i<27; i++) { Print2LED(msg); _delay_ms(150); } pour(i=0x20; i<0x80; i++) { Print2LED(i); _delay_ms(150); } Imprimer2LED(&apos*&apos);}La sortie du port est prise en charge dans la fonction Print2Led()
voidPrint2LED(uint8_t i){ PORTD = (i << 2); si (i & 0b01000000) PORTB = (1<
Le code et le Makefile sont inclus dans un fichier zip ci-dessous.
Étape 4: Conservez les ports d'E/S avec un registre à décalage
Alors maintenant, notre microcontrôleur peut envoyer des données à la LED matricielle, mais il utilise huit ports d'E/S. Cela exclut l'utilisation d'un ATtiny dans un boîtier DIP à 8 broches, et même avec un Arduino plus récent doté d'un ATmega328p, cela représente beaucoup de ports d'E/S pour une LED. Cependant, nous pouvons contourner ce problème en utilisant un circuit intégré appelé registre à décalage. Un moment pour "passer" les vitesses… Un registre à décalage se comprend mieux en pensant aux deux mots qui composent son nom: "shift" et "register". Le mot shift fait référence à la façon dont les données se déplacent dans le registre. Ici (comme dans nos Arduino et nos microcontrôleurs, en général) un registre est un emplacement qui contient des données. Il le fait en implémentant une chaîne linéaire de circuits logiques numériques appelés "flip flops" qui a deux états stables qui peuvent être représentés par un 1 ou un 0. Ainsi, en assemblant huit bascules, vous disposez d'un appareil capable de contenir et représentant un octet de 8 bits. Tout comme il existe plusieurs types de bascules et plusieurs variantes sur le thème des registres à décalage (pensez aux compteurs/décompteurs et aux compteurs Johnson), il existe également plusieurs types de registres à décalage basés sur la façon dont les données est verrouillé dans le registre et comment ces données sont sorties. Sur cette base, considérez les types de registres à décalage suivants:
- Entrée série/sortie parallèle (SIPO)
- Entrée série / Sortie série (SISO)
- Entrée parallèle/sortie série (PISO)
- Entrée parallèle / Sortie parallèle (PIPO)
Deux à noter sont SIPO et PISO. Les registres SIPO prennent les données en série, c'est-à-dire un bit après l'autre, décalant le bit précédemment entré sur la bascule suivante et envoyant les données sur toutes les entrées à la fois. Cela fait un bon convertisseur série-parallèle. Les registres à décalage PISO, à l'inverse, ont des entrées parallèles, de sorte que tous les bits sont entrés en même temps, mais sont sortis un par un. Et vous l'avez deviné, cela fait un bon convertisseur parallèle-série. Le registre à décalage que nous voulons utiliser pour réduire le nombre de broches d'E/S nous permettrait de prendre ces 8 broches d'E/S que nous avons utilisées plus tôt et de les réduire à une, ou peut-être juste à quelques-unes, étant donné que nous devrons peut-être contrôler la façon dont nous entrons. les bits. Par conséquent, le registre à décalage que nous utiliserons est un Serial In / Parallel Out. Câblez le registre à décalage entre la LED et l'Arduino L'utilisation d'un registre à décalage est facile. La partie la plus difficile consiste simplement à visualiser les broches de sortie de données et comment les chiffres binaires se retrouveront dans le circuit intégré, et comment ils apparaîtront éventuellement sur la LED. Prenez un moment pour planifier cela. 1. Fixez 5V à la broche 14 (en haut à droite) et amenez la broche 7 (en bas à gauche) à la terre.2. Le registre à décalage a deux entrées série mais nous n'en utiliserons qu'une, alors connectez la broche deux à 5V3. Nous n'utiliserons pas la broche claire (utilisée pour mettre à zéro toutes les sorties), alors laissez-la flottante ou attaquez-la à 5V4. Connectez un port IO numérique pour épingler l'un des registres à décalage. Il s'agit de la broche d'entrée série.5. Connectez un port IO numérique à la broche 8 (en bas à droite). C'est l'horloge pin.6. Connectez vos lignes de données de Q0 à Q6. Nous n'utilisons que 7 bits car le jeu de caractères ASCII n'en utilise que sept. J'ai utilisé PD2 pour sortir mes données série et PD3 pour le signal d'horloge. Pour les broches de données, j'ai connecté Q0 à D6 sur la LED et en continuant ainsi (Q1 à D5, Q2 à D4, etc.). Puisque nous envoyons des données en série, nous devrons examiner la représentation binaire de chaque caractère que nous voulons envoyer, en regardant les 1 et les 0, et en sortant chaque bit sur la ligne série. J'ai inclus une deuxième version de la source dotmatrixled.c avec un Makefile ci-dessous. Il parcourt le jeu de caractères et affiche tous les caractères pairs (s'il est étrange de penser qu'une lettre peut être impaire ou paire, pensez à la représentation binaire un instant). Essayez de comprendre comment faire en sorte qu'il affiche tous les caractères impairs. Vous pouvez expérimenter davantage les connexions entre le registre à décalage, la LED matricielle et votre Arduino. Il existe plusieurs fonctions de contrôle entre la LED et le registre qui peuvent vous permettre d'affiner votre contrôle sur le moment où les données sont affichées.
Étape 5: Résumé
Dans ce instructable, j'ai présenté la LED matricielle DLO7135 et comment la faire fonctionner. J'ai en outre expliqué comment réduire le nombre de ports d'E/S requis de huit à seulement deux à l'aide d'un registre à décalage. La LED matricielle DLO7135 peut être enfilée pour créer des chapiteaux très accrocheurs et intéressants. J'espère que vous vous êtes amusé à lire cette instructable ! S'il y a des améliorations que vous pensez que je pourrais apporter ou des suggestions que vous aimeriez faire sur ceci ou sur l'un de mes « ibles », je suis heureux de les entendre ! Bon AVR !
Conseillé:
Contrôle de l'affichage à sept segments à l'aide d'Arduino et du registre à décalage 74HC595 : 6 étapes
Contrôle de l'affichage à sept segments à l'aide d'Arduino et du registre à décalage 74HC595 : Hé, quoi de neuf, les gars ! Akarsh ici de CETech. Les écrans à sept segments sont agréables à regarder et sont toujours un outil pratique pour afficher des données sous forme de chiffres, mais ils présentent un inconvénient, à savoir que lorsque nous contrôlons un écran à sept segments en réalité
Compteur d'affichage à 7 segments avec registre à décalage : 3 étapes
Compteur d'affichage à 7 segments avec registre à décalage : il s'agit du projet parfait pour les débutants si vous apprenez simplement à utiliser un registre à décalage et à son fonctionnement avec du code. De plus, ce projet est un bon début si vous êtes nouveau sur l'affichage à 7 segments. Avant de commencer ce projet, assurez-vous de p
Arduino avec registre à décalage CD4015B : 3 étapes
Arduino avec registre à décalage CD4015B : le CD4015B est un registre à décalage statique à 4 étages avec entrée série et sortie parallèle. Il s'agit d'un circuit intégré à 16 broches et contient deux registres identiques à 4 étages avec des entrées de données, d'horloge et de réinitialisation indépendantes. Le niveau logique présent à l'entrée de chaque st
Interfaçage d'un affichage à 7 segments avec un registre à décalage à l'aide du microcontrôleur CloudX : 5 étapes
Interfaçage d'un affichage à 7 segments avec un registre à décalage à l'aide du microcontrôleur CloudX : Dans ce projet, nous publions un didacticiel sur la façon d'interfacer un affichage LED à sept segments avec le microcontrôleur CloudX. Les écrans à sept segments sont utilisés dans de nombreux systèmes embarqués et applications industrielles où la plage de sorties à afficher est connue
Le registre à décalage 74HC164 et votre Arduino : 9 étapes
Le registre à décalage 74HC164 et votre Arduino : Les registres à décalage sont une partie très importante de la logique numérique, ils agissent comme une colle entre les mondes parallèle et série. Ils réduisent le nombre de fils, l'utilisation des broches et aident même à alléger la charge de votre processeur en pouvant stocker leurs données. Ils sont disponibles dans différents