Étape 8: Firmware - microcontrôleur secondaire
Lieu de la MSP430G2553 dans le Launchpad et branchez-le sur votre ordinateur. Télécharger le code fourni, puis ouvrez-le dans Energia. Ci-dessous j’ai fournir un aperçu général de la façon dont les fonctions de code. Je ne couvrira pas le fonctionnement de la bibliothèque de clavier parce qu’il est assez bien documenté ici
Le microcontrôleur secondaire est responsable de communiquer avec le MCP3008 sur SPI et interpréter les entrées clavier. J’ai inclus les deux le code secondaire microcontrôleur pour ce projet et une démo que j’ai fait pour communiquer avec le MCP3008 en général (tutoriel seulement j’ai trouvé était de Raspberry Pi). Cela devrait fonctionner sur Launchpad et Arduino je pense.
Comprendre le Code
Chaque fois qu’une touche est pressée, relâchée ou tenue, la fonction appelée keypadEvent est appelée. Cette fonction est responsable de l’envoi de messages au microcontrôleur principale lorsque l’état du clavier.
En tout cas, lorsqu’une touche est enfoncée par exemple, SendKeypadEvent est appelée avec les arguments de la touche (la touche qui a été utilisée), un vrai (1 ce qui signifie que la touche a été enfoncée), un digitalRead de P1.7 (qui est le commutateur 2 voies qui identifie le pont qui est affecté par la pression de touche) et le Mode actuel (ce qui est déterminé dans la boucle principale du programme).
SendKeypadEvent met en forme le message afin qu’elle puisse être comprise par la suite sur toute la ligne. Voir l’étape précédente pour plus d’informations sur la façon dont le protocole est formaté pour chaque contrôle. Il envoie deux octets qui indique au programme quelle touche a été enfoncée (ou si il est sorti), le pont actuel et le mode actuel.
Maintenant, si nous regardons la boucle principale du programme, nous voyons quelques morceaux de code. Le premier bit du code se lit que le clavier et la toute nouvelle activation de touche est envoyées à partir de là. La deuxième section lit tous les contrôles analogiques. La troisième section envoie un message de changement de pont. Cela se fait dans la boucle principale à l’aide d’un indicateur défini par la routine d’interruption du service, car l’envoi des données série dans les rapports de recherche internationale sont inefficaces.
Les boutons sont bien toutes les classes de SPI_Control. Cela localise toutes les variables et les méthodes et vous permet d’enregistrer n’importe quel nombre de boutons dont vous avez besoin. La boucle principale vérifie seulement si la classe a décidé il y a une valeur nouvelle (assez), et s’il y a, il envoie un message détaillant quel bouton et est ce que la nouvelle valeur. Mon commentaire dans le code résume assez bien la communication avec le MCP3008 sur SPI :
À la lecture de données auprès de l’EI d’ADC MCP3008 :
Veuillez noter que le SPI est en mode 0,0, ce qui signifie SCLK tourne au ralenti dans un État « faible »
Mesures
- Tirez CS/SS (sélection de Chip select/Slave) broches faible (0)
- Envoyer des données bit start, qui est 00000001 ou 0 x 01 (lire la fiche technique)
- Envoyer les données de sélection d’entrée configuration/canal
- Remarque : Format de données de configuration entrée: SGL/DIFF, D1, D2, D0, X, X, X, sélectionne X. SGL/DIFF quel mode, D0, D1 et D2 (3 bits) sélectionner le canal à lire (0-7) et le XXXX n’importent pas. 1 = asymétriques, 0 = différentiel
- Le premier octet reçu sera comme suit:? /? /? /? /? / B8/B9/0, où ? est inconnu, 0 est un peu null et B9 et B8 sont les premiers bits de l’échantillon de 10 bits. L’octet suivant reçu sera le reste de l’échantillon de 10 bits
- Pour obtenir une lecture utile, nous devons combiner les 2 bits du premier message avec le deuxième message. Nous pouvons effectuer cela en taillant les 6 premiers bits du premier octet (à l’aide de bits & avec le masque 0b00000011) décalage de 8 bits vers la gauche et l’OR au niveau du bit-ment le premier octet avec le deuxième octet
- Fin de communication en définissant CS/SS retour haut
C’est un peu déroutant, mais tout ce que vous devez savoir est que la fonction readADC obtient seulement une valeur de 10 bits de la MCP3008 pour n’importe quel canal.
Si nous examinons la fonction SendDeckChange, vous remarquerez qu’il est envoyé comme une presse de clavier. Puisque nous avons seulement 12 touches, mais nous représentons la touche qui a été utilisée avec 4 bits, nous pouvons utiliser des 12-15 pour que ce soit parce qu’elles se matérialiseront jamais comme entrée du matériel. Si nous utilisons la clé ID 15 pour représenter les changements de pont.
C’est à peu près tout. Chaque cycle d’horloge le microcontrôleur scanne pour voir si un bouton de clavier a été enfoncé, le MCP3008 les requêtes pour toutes les valeurs de bouton et vérifie si elles ont changé au sein d’une certaine sensibilité et vérifie également si le commutateur de pont a été renversé. Voir le code pour plus d’explications, c’est assez bien commenté.
Télécharger le Code
Maintenant vous devriez avoir une compréhension du fonctionne du firmware secondaire microcontrôleur, alors allons-y et téléchargez-le ! Entrer le code que j’ai posté dans votre fenêtre de code de Energia et cliquez sur la coche dans le coin pour vérifier/compiler. Il devrait tout vérifier. Quand cela est fait, Télécharger le code pour le microcontrôleur en cliquant sur la flèche à côté de la coche. Lorsque c’est terminé, débranchez le Launchpad, supprimer le microcontrôleur et mettre de coté pour l’instant.