Pièces: 4 × 4 RGB Bouton Bouton Pad Contrôleur SPI

Pièces: 4 × 4 RGB Bouton Bouton Pad Contrôleur SPI

June 5, 2023 Digital Electronics 0

Nous avons couvert le nouveau contrôleur de coussinets de bouton RVB SparkFun il y a quelques semaines. Ceci est un clone de couleur de l’interface monome; une grille de 4 × 4 de boutons avec des LED Tri-couleur en dessous. Chaque voyant présente 24 plans de contrôle de couleur, pour plus de 16 millions de combinaisons de couleurs. Jusqu’à 10 panneaux peuvent être enchaînés pour créer des grilles de boutons substantielles, comme la table Tetris de Sparkfun. Nous avons précédemment utilisé une version plus petite dans notre serrure de combinaison RVB.

Nous avons demandé à SparkFun de nous envoyer la version SPI du contrôleur de bouton à tester. Il s’agit d’un nouveau produit développé en interne à Sparkfun, avec du matériel et des logiciels open source. Lisez à propos de notre expérience interface de ce tableau ci-dessous.

4 × 4 RGB Bouton Tapis Tampon SPI (SparkFun # WIG-09022, 39,95 $)

Le contrôleur de la touche PAD est un PCB nu, nous avons également reçu un couvercle de tampon de boutons (SparkFun # COM-07835, 9,95 $) et deux de chaque lunette (SparkFun # COM-08747, # COM-08746, 3,95 $). La version SPI que nous travaillons peut être conduite directement par un microcontrôleur ou par un «maître» USB. La version du contrôleur USB dispose d’un microcontrôleur supplémentaire et de convertisseur série USB-> pour la connectivité PC.

Lorsque la palette de boutons est arrivée, nous nous sommes immédiatement assis avec la fiche technique et essayé d’interfacer la carte avec notre interface série universelle de pirate de bus. Le protocole décrit dans la version 1 de la fiche technique n’a pas du tout fonctionné.

Sparkfun Open a acheté ce projet, nous avons donc déterminé le protocole d’interface correct à partir du code source de la touche SPI (ZIP) et du contrôleur USB de la touche PAD (ZIP). Nous avons compris la majeure partie du protocole de la source, mais elle a toujours apporté de l’aide des ingénieurs de Sparkfun à découvrir certains des points non documentés et plus fins d’interfaçage de la Commission. La version 2 de la feuille de données (PDF) décrit avec précision le protocole d’interface.

Connexions

Pirate de bus
Coussinet

MISO
MISO

Mosi
Mosi

L’horloge
Scrinter

Cs
Cs

+ 5Volts
VCC

Gnd
Gnd

Les signaux SPI de la touche PAD sont décrits comme ils se rapportent au microcontrôleur embarqué, ce qui est en face de la notation habituelle. Le signal MOSI (Master Out, esclave) est en réalité la sortie de données de la carte et MISO (Master in, esclave) est l’entrée de données.

Nous avons testé le pavé de boutons avec le pirate de bus, mais les mêmes principaux de base s’appliquent à tout code de microcontrôleur personnalisé. La carte fonctionne à 5 Volts. Nous l’avons donc alimenté à partir de l’alimentation à 5 Volts de Bus Pirate. L’interface SPI fonctionne à des niveaux de logique 5 Volet, nous avons donc connecté les résistances de pull-up du pirate de bus à l’alimentation 5 Volet et leur permettait de toutes les lignes de signal.

Nous avons interfacé la carte des boutons à l’aide de la bibliothèque Raw3Wire de Bus Pirate. Raw3Wire est une bibliothèque de logiciels SPI avec des opérations bit-sage. La bibliothèque SPI matérielle permet uniquement aux opérations d’octets complets qui ne sont pas suffisamment granulaires pour interfacer la carte. Nous mettons le pirate de bus en mode Raw3Wire (option de menu M) et avez choisi l’option PIN HIZ car les résistances de pull-up contiennent le bus à 5 Volts.

Raw3Wire> l <-configure bit ordre 1. MSB d'abord 2. LSB d'abord Mode> 2 <-Le bit significatif en premier LSB SET: MOINT SIG BIT en premier RAW3WIRE> W <-ENABLE ALIMENTATION D'ALIMENTATION Fournitures de tension sur Raw3wire>

Le pavé de boutons communique le moins significatif Bit d’abord, nous avons également configuré la bibliothèque pour communiquer d’abord LSB. Enfin, nous avons frappé la capitale ‘W’ pour permettre aux alimentations du bus Pirate. La carte des boutons clignotera de chaque couleur momentanément dans le cadre de son auto-test de courant.

Simple / Multiple Bouton SETUP

Chaque carte doit être configurée pour une utilisation unique ou multisée. Les conseils d’administration sont pré-programmés pour un fonctionnement à conseil unique, mais il est peut-être une bonne idée de définir la configuration de toute façon. La configuration de la carte est stockée en permanence dans EEPROM. Il suffit donc de se faire une fois.

RAW3WIRE> [\ _ <-AKE tous les signaux bas CS activé <-Cs activé est 0volts Horloge, 0 Sortie de données, 0 Raw3wire>

Une séquence spéciale place la carte en mode de configuration. Commencez par toutes les lignes de signal faible (] \ _).

RAW3WIRE> – ^ 1 1 <-MET Opération de la carte unique Sortie de données, 1 <-Data High Coque 0x01 Horloge <-OuRoque Tick Horloge Écrire: 0x01 <-Config Option 1, Nombre de planches Écrire: 0x01 <-Re le nombre de planches Raw3Wire> w <-small 'w', éteint Fournitures de tension RAW3WIRE> W <-CAPITAL 'W', POWER ON Fournitures de tension sur Raw3wire>

Pour entrer en mode de configuration, prenez la ligne de données haute (-) et envoyez une impulsion d’horloge (^), mais laissez la puce Sélectionnez faible. Le tableau est maintenant prêt à accepter les paramètres de configuration.

Le premier octet envoyé après avoir entré le mode de configuration indique à la carte qui réglent la modification. Actuellement, seul le nombre de panneaux peut être configuré (0x01). Ensuite, envoyez le nombre de planches connectées entre 1 et 10. Nous avons envoyé 1 parce que nous interfacions une seule carte. Réinitialisez le tableau et il allumera une DEL correspondant au nombre programmé de planches.

Définir les couleurs et le statut de bouton de lecture

Nous sommes maintenant prêts à envoyer des données de couleur au tableau et à lire le statut du bouton. Premièrement, notez que le signal CS (Chip Select) est opposé aux conventions normales. généralement CS active une puce lorsque le signal est low (0Volts) et le ralenti lorsque le signal est élevé (5 volts); Ceci est généralement désigné par / cs, #cs ou! cs. Au lieu de cela, le contrôleur de bouton est actif lorsque CS est élevé.

Une transaction de 64Byte définit les couleurs LED et récupère l’état du bouton. Le premier programme de 16 octets le niveau rouge pour chaque LED, suivi de 16 BYBE de vert et de 16.tes de bleu. Terminer en lisant 16bytes de la carte pour obtenir le statut de chaque bouton. Les données de boutons sont envoyées sous forme de 0x00 si elles sont appuyées et 0xFF si non enfoncées. La feuille de données recommande un délai 400us entre écrire les cadres de couleur et lire les données du bouton, mais le pirate de bus est suffisamment lent pour que nous ne nous inquiétions pas.

Le protocole est assez simple, mais il y a une prise majeure. La ligne d’horloge doit être élevée avant de lever CS, ou la bytestream sera désactivée d’un bit. Pour cette raison, de nombreux modules de matériel SPI de matériel ne fonctionneront pas avec le tableau. Ce n’est pas un problème si votre microcontrôleur vous permet de tordre de broches contrôlées par un module matériel, mais les micros que nous avons travaillés ne le permettent pas.

RAW3WIRE> /] 255: 16 255: 16 255: 16 R: 16 [
Horloge, 1 <-Clock doit être élevé avant de lever CS CS désactivé <-Cs à 5volts, en face d'une utilisation normale Bulk écrit 0xFF, 0x10 fois <-Red LEDS Bulk écrit 0xFF, 0x10 fois <-Green LEDS Bulk écriture 0xFF, 0x10 fois <-Blue LED Lecture en vrac 0x10 octets: <-Bouton deréad State 0xFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF CS activé <-Cs à 0volts, en face d'une utilisation normale Raw3wire>

Cette commande définit toutes les couleurs de chaque voyant à la pleine et lit les octets de statut de 16 boutons.

Nous avons d’abord réglé l’horloge haut (/), et seulement alors pouvons-nous augmenter CS à 5volts (]) et commencer la transaction de données. 255: 16 est une commande répétée qui envoie la valeur de 255 de seize fois. Comme chaque canal de couleur ait 8 places de contrôle de l’intensité, 255 est de 100% sur. Nous envoyons 255 un total de 48 fois, une fois pour chaque couleur de chaque LED. Enfin, nous récupérons une trame de 14Byte de données de bouton (R: 16) et inférieure CS pour mettre fin à la transaction ([). Les valeurs de bouton sont toutes 0xFF, indiquant qu’aucun boutons n’est enfoncé.

RAW3WIRE> /] 0:16 0:16 128: 16 R: 16 [
Horloge, 1
CS désactivé
Bulk Ecrivez 0x00, 0x10 fois
Bulk Ecrivez 0x00, 0x10 fois
Écrivez en vrac 0x80, 0x10 fois <-Tout Blue à 50% Lecture en vrac 0x10 octets: 0x00 0xFF 0XFF 0XFF 0xFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF 0XFF CS activé Raw3wire>

Ici, nous avons défini le niveau bleu de chaque LED à 50% (128) et éteignez toutes les autres couleurs. La sortie du bouton indique maintenant que le bouton 0 est enfoncé.

RAW3WIRE> /] 0 0 0 0 255 255 255 255 0 0 0 0 0 0 0 0 0 0:16 0:16 R: 16 [
Horloge, 1
CS désactivé
Écrire: 0x00 <- rouge LED 0, OFF ... <-More de la même Écrire: 0x00 <- rouge LED 3, OFF Écrire: 0xFF <- LED rouge 4, 100% sur Écrire: 0xFF <- rouge LED 5, 100% sur Écrire: 0xFF <- rouge LED 6, 100% sur Écrire: 0xFF <- LED rouge 7, 100% sur Écrire: 0x00 <- rouge LED 8, OFF ... <-More de la même Écrire: 0x00 <- rouge LED 15, OFF Écrivez en vrac 0x00, 0x10 fois <- Toutes les LED vertes éteintes Bulk écriture 0x00, 0x10 fois <-Toutez les LED bleues Lecture en vrac 0x10 octets: Cet exemple montre comment aborder des voyants simples. Cette fois, nous écrivons réellement tous les 16 octets du cadre de couleur rouge. Les boutons 0-3 et 8-15 ont une valeur rouge de 0 (rouge éteint), les boutons 4-7 sont réglés sur 100% rouge (255). Toutes les LED vertes et bleues sont éteintes (0, 0%). Conclusion C'était vraiment frustrant de faire fonctionner ce tableau car la première version de la feuille de données avait tellement d'erreurs. Les ingénieurs et le soutien de Sparkfun étaient vraiment utiles et ont posté une fiche technique corrigée en quelques jours. Tant que vous avez la fiche technique mise à jour, il s'agit d'une carte facile à utiliser. Nous aimerions voir une mise à jour du firmware qui élimine la nécessité de garder le signal de l'horloge élevé avant de lever CS. Cette quirk rend la planche incompatible avec de nombreux modules SPI de matériel, laissant des routines bit-bang lentes comme seule option d'interface. Heureusement, le code source est ouvert et disponible pour tous ceux qui souhaitent faire ce changement. Le contrôleur PAD Button est une carte vraiment soignée et nous sommes impatients de l'utiliser dans un futur projet. Divulgation de révision du piratage par jour: Nous avons demandé un conseil gratuit et Sparkfun nous l'a envoyé. Nous avons eu un temps terrible pour que cela fonctionne avec les instructions de la première version de la fiche technique, nous avons documenté cette expérience ici.

Leave a Reply

Your email address will not be published. Required fields are marked *