16 touches clavier décodage avec un MCU AVR (5 / 7 étapes)

Étape 5: Écrire, télécharger et exécuter votre Code AVR

Afin de pouvoir lire vos données lorsqu’une touche est enfoncée, nous allons créer la routine du service qui gère les entrées de données de lecture lorsque les données deviennent disponibles. L’AVR nous dira automatiquement lorsque les données sont disponibles pour la lecture, si nous lui demander (ou commande à... J’essaie d’être gentil, alors je suis enfin tué par nos seigneurs de Robot dès-à-être). Cette notification est appelée une interruption et l’AVR possède plusieurs types. La que je vais écrire est appelée une « goupille changement interruption. » Il interrompt le flux de votre code et exécute votre routine de gestion quand--vous l’avez deviné--il y a changement de niveau de logique sur un NIP que vous avez demandé à être regardé.

Avez-vous se demande encore comment le 74C922 distille des 8 bits de données dans des lignes de données seulement quatre ? Si vous avez lu mes autres instructable vous aurait probablement avoir pensé à elle. Eh bien, peut-être que vous avez déjà pensé à elle. Une fois que vous avez fait une table de vérité vous avez fait tous, droit ? :) Les 8 broches à partir du tableau est codée en binaire en utilisant les broches de quatre données. J’ai fait une table de vérité pour vous.

Si vous n’êtes pas clair ce que cela signifie, jetez un oeil à mes autres instructables, ou effectuez une recherche pour « table de vérité » ou « logique binaire » sur votre moteur de recherche favori.

Logique du code

Je ne sais pas entrer dans les détails de mon code, lorsqu’il est disponible pour vous à télécharger est approprié, mais je vais vous présenter quelques petites choses ici et si vous êtes un vieux sel à ce genre de choses que vous pouvez sauter devant elle, dans le cas contraire, j’espère que je peux vous apprendre quelque chose.

  • Recherchez un indicateur global indiquant les données sont prêtes au processus
  • Quand la broche de données disponible change à haute
  • Lire les broches de données
  • Définissez les bits dans un registre d’usage général ci-dessous 0xFF
  • Définir « disponibles pour le traitement de données » indicateur
  • Traiter les données et faire tout ce que nous voulons avec elle

Sections de code

J’ai inclus un fichier zip pour cette section qui contient le fichier principal et un couple de fichiers axillaires. Vous êtes libre de retirer l’étoffe de l’USART et compiler le fichier principal ou ce que vous voulez. Donc, j’aborderai brièvement comment le code fonctionne.

Déclarations
Cet article est assez explicite, je ne vais pas aller dedans, pas plus, sauf au attirer l’attention sur les fichiers d’en-tête locale que j’ai compris que vous pouvez ou ne pouvez utiliser ou supprimer.

 #include "common.h"#include "uart.h"#include <avr/io.h>#include <util/delay.h>#include <avr/interrupt.h>#define DATA1 PIND2#define DATA2 PIND3#define DATA3 PIND4#define DATA4 PIND5#define DATA_AVAIL PIND6void Interrupt_init(void);volatile uint8_t bDataReady = 0; 

Initialisation
Il y a deux paragraphes pour initialiser dans ce programme :
1. le système USART
2. l’interruption système de manutention
Il est sécuritaire d’enlever les trucs USART si vous supprimez toutes les références à elle et ne veux pas communiquer via le câble USB ou d’une console série externe via une puce max232. Donc, je ne l’inclure ci-dessous car il est hors de portée de ce guide.

 voidInterrupt_init(void){ BSET(PCICR,PCIE2); // Enable Pin Change Interrupt 2 BSET(PCMSK2,PCINT22); // Enable PCINT22 (that's PD6) BSET(SREG,7); // Set I-bit in Status Register GPIOR0 = 0x00; // Using General Purpose I/O register} 

Interruption de Service des gestionnaires
Il s’agit du gestionnaire d’interruption change de broche. Quelques petites choses à noter :
1. il est très court
2. aucune fonction n’est appelées qu’il contient
3. cette interruption sera appelée à n’importe quel changement de niveau de logique, ce qui signifie que lorsque données disponible passe haut (ce que nous voulons) et quand il va faible (ce qui nous ne se soucient).
4. un indicateur global est défini et le gestionnaire d’interruption revient à laisser la boucle principale de gérer le reste.
5. j’utilise un usage général de Registre I/O sous espace 0xFF. Cela signifie que l’accès est très rapide.

 ISR(PCINT2_vect){ if (BCHK(PIND,DATA_AVAIL) == 0) return; if (BCHK(PIND,DATA1)) BSET(GPIOR0,GPIOR00); if (BCHK(PIND,DATA2)) BSET(GPIOR0,GPIOR01); if (BCHK(PIND,DATA3)) BSET(GPIOR0,GPIOR02); if (BCHK(PIND,DATA4)) BSET(GPIOR0,GPIOR03); bDataReady = 1;} 

Principal
Tout ce que nous avons à faire ici est boucle tout en vérifiant si les données sont disponibles pour traiter. Si c’est le cas, faire notre magie, définir nos drapeaux et registres à zéro et le retour de travail.

 int main(){ // Initialize serial subsystem USART_init(BAUD_9600); // Initialize PCI2 Interrupt_init(); uint8_t encoded = 0x00; for (;;) { if (bDataReady) { encoded = GPIOR0; USART_tx(encoded); bDataReady = 0; GPIOR0 = 0x00; } }} 

Articles Liés

Comment utiliser un clavier de matrice avec Ardunio

Comment utiliser un clavier de matrice avec Ardunio

Claviers de matrice sont cool ! C'est comme un clavier qui peut facilement être utilisé pour s'interfacer avec votre Arduino pour divers projets différents, de verrous de combo pour calculatrices, télécommandes sans fil et des boutons supplémentaires
Tactile clavier / contrôleur avec Arduino et la transformation de jeu

Tactile clavier / contrôleur avec Arduino et la transformation de jeu

cette instructable décrit une manière simple et rapide pour créer un clavier tactile ou contrôleur de jeu à l'aide-carton,-papier d'aluminium,- et un Arduino.Il fournit également les codes Arduino et traitement immédiatement commencer à jouer !Idéal
Assembler le Dragon Rider 500 pour une utilisation avec le Dragon AVR

Assembler le Dragon Rider 500 pour une utilisation avec le Dragon AVR

pas longtemps la société Atmel est sorti avec un excellent outil pour une utilisation avec la ligne AVR de microcontrôleurs appelé le Dragon de l'AVR. Ce petit appareil USB fournit les professionnels et les amateurs aussi bien la possibilité d'utilis
Comment débuter avec Eclipse et AVR

Comment débuter avec Eclipse et AVR

AVRs programmation est amusant, mais parfois les environnements de développement des fabricants font code entretien une corvée. Si vous cherchez un libre, multi-plateforme, pièce de haute qualité du logiciel de programmation AVRs Eclipse est un bon c
Comment utiliser le Dragon Rider 500 avec votre Dragon AVR

Comment utiliser le Dragon Rider 500 avec votre Dragon AVR

cette instructable est un cours intensif dans comment utiliser certaines des fonctionnalités du Dragon Rider 500 de Ecros Technologies. Veuillez prendre note qu'il y a un très détaillée Guide disponible sur le site Ecros.Le Rider Dragon est une carte
Convertir un clavier ZX82 spectre dans un clavier USB extensible avec Arduino

Convertir un clavier ZX82 spectre dans un clavier USB extensible avec Arduino

Dans ce Instructable, je vais vous montrer comment convertir un clavier USB développable fonctionnellement compatible avec n'importe quoi de votre clavier ZX82 spectre compatible USB. Cette version est assez compacte pour que lorsque vous avez termin
Clavier USB mini avec un microcontrôleur $7

Clavier USB mini avec un microcontrôleur $7

Rendre un clavier utilisant un microcontrôleur pour envoyer rapidement sur la touche usb, qui s'interface avec AutoHotKey, une application Windows pour créer des applications et des macros.AutoHotKey peut être utilisé avec votre clavier original sans
Faire un ThinkPad clavier USB adaptateur avec Arduino

Faire un ThinkPad clavier USB adaptateur avec Arduino

Parmi les portables de classe affaires, ThinkPads ont les meilleurs claviers. Même avec le changement aux claviers de style de l'île, je dirais que les claviers ThinkPad encore battre tous ses concurrents de portable haut la main dans le département
12 touches clavier Terminal commun

12 touches clavier Terminal commun

Il s'agit d'une façon rapide et sale d'aborder les broches sur le clavier terminal commun clé 12 avec une carte de dev microcontrôleur de type Arduino. Le clavier est de marque Seeedstudios et je l'ai eu de la RadioShack composant électronique Pack 2
Touchez le capteur créé avec Attiny13A

Touchez le capteur créé avec Attiny13A

Ce projet a été terminé depuis longtemps alors que travaillé il y a, par le temps que je voulais faire un touch pad alors cherché sur internet et a trouvé un fichier .c contient touche fonction, après piquer avec elle dans le matériel trouvé il n'a p
Touche couteau de poche avec un stylo

Touche couteau de poche avec un stylo

lecteurs Bonjour Wow fatigué de perdre vos clés, n'ayant ne pas un stylo quand faut il, doit avoir l'envie de couper quelque chose et vous avez laissé votre couteau à la maisonEh bien maintenant c'est juste le passéCouteau de poche clé avec un stylo(
De l’Arduino et perfboard de PCB avec autonome MCU

De l’Arduino et perfboard de PCB avec autonome MCU

Ce Instructable est le successeur direct de celui-ci. À la fin de cette accumulation, mon projet de platine est presque complet (enfin).L'objectif est développer un beau et PCB avec SMD électronique avec un travail ATtiny85 + logiciel de travail !Ain
Quadcopter DIY avec 51 MCU C8051F 2212 KV930 moteur allemand EPP1045

Quadcopter DIY avec 51 MCU C8051F 2212 KV930 moteur allemand EPP1045

vous rêvez sur bricolage un quadcopter cool par vous-même un jour ? Aujourd'hui L'équipe ICStation vous les étapes de fabrication partagera avec beaucoup d'images ultra claires. Le quadcopter que nous vous présentons utilise le cadre de 51MCU et de t
BMW Diesel injecteur codage avec DIS v44

BMW Diesel injecteur codage avec DIS v44

Comment faire pour recoder des injecteurs sur un diesel BMW place à 12/2005 à l'aide du logiciel DIS et un câble USB-OBD.