Table des matières:

Tutoriel Assembleur AVR 9 : 7 étapes
Tutoriel Assembleur AVR 9 : 7 étapes

Vidéo: Tutoriel Assembleur AVR 9 : 7 étapes

Vidéo: Tutoriel Assembleur AVR 9 : 7 étapes
Vidéo: EB_#359 Introduction - Le Langage Informatique Assembleur 2024, Juillet
Anonim
Tutoriel Assembleur AVR 9
Tutoriel Assembleur AVR 9

Bienvenue dans le didacticiel 9.

Aujourd'hui, nous allons montrer comment contrôler à la fois un affichage à 7 segments et un affichage à 4 chiffres à l'aide de notre code de langage assembleur ATmega328P et AVR. Au cours de cette opération, nous devrons réfléchir à la manière d'utiliser la pile pour réduire le nombre de registres que nous devons lier. Nous allons ajouter quelques condensateurs (filtres passe-bas) pour essayer de réduire le bruit sur notre clavier. Nous allons créer un amplificateur de tension à partir de quelques transistors afin que notre commutateur d'interruption INT0 fonctionne mieux pour les boutons de tension inférieure sur la rangée inférieure du clavier. Et nous allons nous cogner un peu la tête contre le mur en essayant d'obtenir les bonnes résistances pour que le truc fonctionne correctement.

Nous utiliserons notre clavier du didacticiel 7

Pour faire ce tutoriel, en plus du matériel standard, vous aurez besoin de:

  1. Un affichage 7 segments

    www.sparkfun.com/products/8546

  2. Un affichage à 4 chiffres

    www.sparkfun.com/products/11407

  3. Un bouton poussoir

    www.sparkfun.com/products/97

  4. Les fiches techniques de l'écran téléchargeables à partir de leurs pages respectives liées ci-dessus.
  5. Un condensateur céramique 68 pf, un couple de 104 condensateurs, un tas de résistances, deux transistors 2N3904 NPN.

Voici un lien vers la collection complète de mes tutoriels d'assembleur AVR:

Étape 1: Câblage de l'écran 7 segments

Câblage de l'affichage 7 segments
Câblage de l'affichage 7 segments
Câblage de l'affichage 7 segments
Câblage de l'affichage 7 segments
Câblage de l'affichage 7 segments
Câblage de l'affichage 7 segments

Nous allons utiliser le même code que nous avons utilisé dans le didacticiel 7 pour le clavier pour contrôler l'affichage à 7 segments. Vous devrez donc en faire une copie et nous la modifierons.

Nous allons mapper les segments sur les broches de notre microcontrôleur comme suit:

(dp, g, f, e, d, c, b, a) = (PD7, PD6, PB5, PB4, PB3, PB2, PB1, PB0)

où les lettres des segments sont affichées sur l'image avec le brochage correspondant au 5V commun et chacun des segments LED, y compris le point décimal (dp) en bas à droite de l'écran. La raison en est que nous pouvons entrer le nombre entier dans un seul registre et sortir ce registre vers les ports B et D pour éclairer les segments. Comme vous pouvez le voir, les bits sont numérotés séquentiellement de 0 à 7 et ils seront donc mappés sur les bonnes broches sans avoir à définir et à effacer des bits individuels.

Comme vous pouvez le voir par le code que nous avons joint à l'étape suivante, nous avons déplacé notre routine d'affichage vers une macro et nous avons libéré les broches SDA et SCL pour une utilisation future dans le prochain didacticiel.

Je dois ajouter qu'il faut mettre une résistance entre l'anode commune de l'écran et le rail 5V. J'ai choisi une résistance de 330 ohms comme d'habitude, mais si vous le souhaitez, vous pouvez calculer la résistance minimale nécessaire pour obtenir la luminosité maximale de l'écran sans le faire frire. Voici comment procéder:

Regardez d'abord la fiche technique et remarquez que sur la première page, elle donne diverses propriétés de l'affichage. Les grandeurs importantes sont le "Forward Current" (I_f = 20mA) et la "Forward Voltage" (V_f = 2,2V). Ceux-ci indiquent que vous voulez que la chute de tension à travers l'affichage soit si le courant est égal au courant direct. C'est le courant maximum que l'écran prendra sans friture. C'est par conséquent aussi la luminosité maximale que vous pouvez obtenir des segments.

Utilisons donc la loi d'Ohm et la règle de boucle de Kirchoff pour déterminer quelle résistance minimale nous aurions besoin de mettre en série avec l'écran pour obtenir la luminosité maximale. La règle de Kirchoff dit que la somme des changements de tension autour d'une boucle fermée dans un circuit est égale à zéro et la loi d'Ohm dit que la chute de tension à travers une résistance de résistance R est: V = I R où I est le courant traversant la résistance.

Donc, étant donné une tension de source de V et faisant le tour de notre circuit, nous avons:

V - V_f - I R = 0

ce qui signifie (V - V_f)/I = R. Donc, la résistance nécessaire pour obtenir la luminosité maximale (et probablement faire frire les segments) serait:

R = (V - V_f)/I_f = (5.0V - 2.2V)/0.02A = 140 ohms

Donc, si vous le vouliez, vous pourriez utiliser avec plaisir 150 ohms sans soucis. Cependant, je pense que 140 ohms le rend trop lumineux à mon goût et j'utilise donc 330 ohms (qui est en quelque sorte ma résistance personnelle Goldilocks pour les LED)

Étape 2: Code d'assemblage et vidéo

J'ai joint le code de montage et une vidéo montrant le fonctionnement du clavier avec l'écran. Comme vous pouvez le voir, nous avons simplement mappé la touche Redial sur "r", la touche flash sur "F", l'astérisque sur "A" et le signe dièse sur "H". Ceux-ci peuvent être mappés à diverses opérations telles que retour arrière, entrée et autres si vous souhaitez continuer à utiliser le clavier pour taper des chiffres sur des écrans LCD ou des écrans à 4 chiffres. Je ne vais pas passer en revue le code ligne par ligne cette fois car il est très similaire à ce que nous avons déjà fait dans les tutoriels précédents. Les différences sont principalement les mêmes choses que nous savons déjà faire comme les interruptions et les tables de recherche. Vous devriez simplement parcourir le code et regarder les nouvelles choses que nous avons ajoutées et les choses que nous avons changées et comprendre à partir de là. Nous reviendrons sur l'analyse ligne par ligne dans le prochain tutoriel lorsque nous présenterons de nouveaux aspects du codage en langage assembleur sur les microcontrôleurs AVR.

Regardons maintenant un affichage à 4 chiffres.

Étape 3: Câblage de l'affichage à 4 chiffres

Câblage de l'affichage à 4 chiffres
Câblage de l'affichage à 4 chiffres
Câblage de l'affichage à 4 chiffres
Câblage de l'affichage à 4 chiffres

Selon la fiche technique, l'affichage à 4 chiffres a un courant direct de 60 mA et une tension directe de 2,2 volts. Donc, par le même calcul que précédemment, je pourrais utiliser une résistance de 47 ohms si je le voulais. Au lieu de cela, je vais utiliser un… hrm… laissez-moi voir… que diriez-vous de 330 ohms.

La façon dont l'affichage à 4 chiffres est câblé est qu'il y a 4 anodes, une pour chacun des chiffres, et les autres broches contrôlent quel segment s'allume dans chacune. Vous pouvez afficher 4 chiffres simultanément car ils sont multiplexés. En d'autres termes, tout comme nous l'avons fait pour la paire de dés, nous faisons simplement passer l'alimentation à travers chacune des anodes à tour de rôle et elle les fera clignoter l'une après l'autre. Il le fera si vite que nos yeux ne verront pas le clignotement et il semblera que les quatre chiffres sont allumés. Cependant, juste pour être sûr, la façon dont nous allons le coder est de définir les quatre chiffres, puis de faire défiler les anodes, plutôt que de définir, déplacer, définir, déplacer, etc. De cette façon, nous pouvons obtenir un timing précis entre l'allumage de chaque chiffre.

Pour l'instant, testons que les segments fonctionnent tous.

Placez votre résistance de 330 ohms entre le rail positif de votre maquette et la première anode sur l'écran. La fiche technique nous indique que les broches sont numérotées de 1 à 16 dans le sens inverse des aiguilles d'une montre en commençant en bas à gauche (lorsque vous regardez l'écran normalement.. avec les points décimaux en bas) et indique que les anodes sont des broches numéro 6, 8, 9 et 12.

Nous connectons donc la broche 6 à 5V, puis prenons un fil négatif de votre rail GND et l'enfonçons dans toutes les autres broches et voyons que tous les segments s'allument sur le chiffre auquel il correspond (qui est en fait le deuxième chiffre de la droite). Assurez-vous que les 7 segments et le point décimal s'allument.

Maintenant, collez votre fil GND dans l'une des broches pour éclairer l'un des segments et cette fois déplacez la résistance autour des 3 autres anodes et voyez que le même segment s'allume dans chacun des autres chiffres.

Quelque chose d'inhabituel ?

Il s'avère que le brochage sur la fiche technique est erroné. C'est parce qu'il s'agit de la fiche technique et du brochage d'un affichage à 12 broches et 4 chiffres. C'est à dire. un sans deux-points ni point décimal supérieur. L'écran que j'ai reçu lorsque je l'ai commandé est un écran à 16 broches à 4 chiffres. En fait, sur le mien, les anodes de segment sont aux broches 1, 2, 6 et 8. L'anode du côlon est la broche 4 (cathode broche 12) et l'anode dp supérieure est la broche 10 (la cathode est la broche 9)

Exercice 1: Utilisez votre résistance et votre fil de terre pour déterminer quelle broche correspond à quel segment et à quel point décimal sur l'écran afin que les segments corrects s'allument lorsque nous le codons.

La façon dont nous voulons coder la carte des segments est exactement comme nous l'avons fait avec l'affichage à un chiffre à 7 segments ci-dessus - nous n'avons rien à changer dans le code, la seule chose que nous changeons est la façon dont les fils sont connectés sur le tableau. Branchez simplement la broche de port correcte sur le microcontrôleur à la broche correspondante sur l'affichage à 4 chiffres de sorte que, par exemple, PB0 aille toujours à la broche correspondant au segment a, PB1 aille au segment B, etc.

La seule différence est que maintenant nous avons besoin de 4 broches supplémentaires pour les anodes car nous ne pouvons plus simplement aller sur le rail 5V. Nous avons besoin du microcontrôleur pour décider quel chiffre obtient le jus.

Nous utiliserons donc PC1, PC2, PC3 et PD4 pour contrôler les anodes des 4 chiffres.

Autant aller de l'avant et brancher les fils. (n'oubliez pas les résistances de 330 ohms sur les fils d'anode !)

Étape 4: Codage de l'affichage à 4 chiffres

Codage de l'affichage à 4 chiffres
Codage de l'affichage à 4 chiffres

Réfléchissons à la façon dont nous voulons coder cet affichage.

Nous aimerions que l'utilisateur appuie sur les boutons du clavier et que les chiffres apparaissent séquentiellement sur l'écran lorsqu'il appuie sur chaque bouton. Donc, si j'appuie sur un 1 suivi d'un 2, il apparaîtra sur l'écran comme 12. J'aimerais également stocker cette valeur, 12, pour un usage interne, mais nous y reviendrons un peu plus tard. Pour l'instant, je veux juste écrire une nouvelle macro qui prend vos touches et les affiche. Cependant, comme nous n'avons que 4 chiffres, je veux m'assurer qu'il ne vous permet de taper que quatre chiffres.

Un autre problème est que le fonctionnement de l'affichage multiplexé à 4 chiffres consiste à faire défiler les anodes de sorte que chaque chiffre ne soit allumé que pendant une fraction de seconde avant d'afficher le suivant, puis le suivant et enfin de revenir au premier, etc. besoin d'un moyen de coder cela.

Nous voulons également qu'il déplace le "curseur" vers la droite d'un espace lorsque nous tapons le chiffre suivant. Ainsi, si je veux taper 1234 par exemple, après avoir tapé le 1, le curseur se déplacera pour que le prochain chiffre que je tape apparaisse sur le prochain affichage à 7 segments et ainsi de suite. Pendant tout ce temps, je veux toujours pouvoir voir ce que j'ai tapé, il doit donc toujours parcourir les chiffres et les afficher.

Cela ressemble à un défi de taille ?

Les choses sont en fait encore pires. Nous avons besoin de 4 registres plus généraux que nous pouvons utiliser pour stocker les valeurs actuelles des 4 chiffres que nous voulons afficher (si nous allons les parcourir, nous devons les conserver quelque part) et le problème avec ceci est que nous avons utilisé les registres à usage général comme un fou et si nous ne faisons pas attention, nous n'en aurons plus. C'est donc probablement une bonne idée de s'attaquer à ce problème le plus tôt possible et de vous montrer comment libérer des registres en utilisant la pile.

Commençons donc par simplifier un peu les choses, utilisons la pile et libérons quelques registres, puis nous essaierons d'accomplir la tâche de lire et d'afficher nos nombres sur l'affichage à 4 chiffres.

Étape 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

Il n'y a que quelques "registres à usage général" dont nous disposons et une fois qu'ils sont utilisés, il n'y en a plus. C'est donc une bonne pratique de programmation de ne les utiliser que pour quelques variables qui sont utilisées comme stockage temporaire dont vous avez besoin pour lire et écrire sur les ports et la SRAM avec, ou bien celles dont vous aurez besoin dans les sous-routines partout et donc vous nomme les. Donc, ce que j'ai fait, maintenant que nous avons initialisé et que nous apprenons à utiliser la pile, c'est de parcourir le code et de trouver les registres à usage général nommés qui ne sont utilisés que dans un seul sous-programme ou interruption et nulle part ailleurs dans le code et remplacer avec l'un de nos registres de température et un push and pop vers la pile. En fait, si vous regardez le code écrit pour des microcontrôleurs plus petits, ou si vous remontez dans le temps à l'époque où toutes les puces étaient plus petites, vous ne verrez que quelques registres à usage général qui devaient être utilisés pour tout, donc vous ne pouviez pas stockez simplement une valeur là-dedans et laissez-la tranquille car vous étiez sûr d'avoir besoin de ce registre pour d'autres choses. Ainsi, vous verrez pushin' et poppin' partout dans le code. J'aurais peut-être dû nommer nos registres temporaires à usage général AX et BX en hommage à ces jours passés.

Un exemple aidera à rendre cela plus clair.

Notez que dans notre interruption complète de conversion analogique-numérique ADC_int, nous utilisons un registre à usage général que nous avons nommé buttonH que nous avons utilisé pour charger la valeur de ADCH et la comparer avec notre table de recherche des conversions analogiques en pression de bouton. Nous n'utilisons ce registre buttonH que dans le sous-programme ADC_int et nulle part ailleurs. Donc, à la place, nous utiliserons notre variable temp2 que nous utilisons comme variable temporaire que nous pouvons utiliser dans n'importe quel sous-programme donné et sa valeur n'affectera rien en dehors de ce sous-programme (c'est-à-dire que la valeur que nous lui donnons dans ADC_int ne sera utilisée nulle part autre).

Un autre exemple est dans notre macro de délai. Nous avons un registre que nous avons nommé "millisecondes" qui contient notre temps de retard en millisecondes. Dans ce cas, il s'agit d'une macro et nous rappelons que la façon dont fonctionne la macro est que l'assembleur place l'intégralité du code de la macro à l'endroit du programme où elle est appelée. Dans ce cas, nous aimerions nous débarrasser de la variable "millisecondes" et la remplacer par l'une de nos variables temporaires. Dans ce cas, je vais le faire un peu différemment pour vous montrer comment, même si la valeur de la variable va être nécessaire ailleurs, nous pouvons toujours l'utiliser en utilisant la pile. Donc, au lieu de millisecondes, nous utilisons "temp" et afin de ne pas gâcher d'autres choses qui utilisent également la valeur de temp, nous commençons simplement la macro "delay" en "poussant" temp sur la pile, puis nous l'utilisons au lieu de millisecondes, puis à la fin de la macro, nous "retirons" sa valeur précédente de la pile.

Le résultat net est que nous avons "emprunté" temp et temp2 pour une utilisation temporaire, puis les avons restaurés à leurs valeurs précédentes lorsque nous avons terminé.

Voici la routine d'interruption ADC_int après avoir effectué cette modification:

ADC_int:

pousser la température; save temp puisque nous le modifions ici push temp2; enregistrer temp2 lds temp2, ADCH; chargement de la touche ldi ZH, high(2*numbers) ldi ZL, low(2*numbers) cpi temp2, 0 breq return; si les déclencheurs de bruit ne changent pas 7segnumber setkey: lpm temp, Z+; charger à partir de la table et poster l'incrément clc cp temp2, temp; comparer keypress avec la table brlo PC+4; si ADCH est inférieur, réessayez lpm 7segnumber, Z; sinon charge la table de valeurs-clés inc digit; incrémenter le chiffre rjmp return; et renvoie adiw ZH:ZL, 1; incrémenter Z rjmp setkey; et retour en haut retour: pop temp2; restaurer temp2 pop temp; restaurer temp reti

Notez que la façon dont la pile fonctionne est que le premier activé est le dernier désactivé. Comme une pile de papiers. Vous voyez que dans nos deux premières lignes, nous poussons la valeur de temp sur la pile, puis nous poussons temp2 sur la pile, puis nous les utilisons dans le sous-programme pour d'autres choses, et enfin nous les restaurons à leurs valeurs précédentes en premier saut de temp2 (puisque c'était le dernier poussé dessus, il est en haut de la pile et sera le premier que nous retirerons), puis saut de temp.

Donc, à partir de maintenant, nous utiliserons toujours cette méthode. La seule fois où nous désignerons un registre pour autre chose qu'une variable temporaire, c'est lorsque nous en aurons besoin partout. Par exemple, le registre appelé "débordements" est un registre que nous utilisons à plusieurs endroits différents dans le programme et nous aimerions donc lui donner un nom. Bien sûr, nous pourrions toujours l'utiliser comme nous l'avons fait avec temp et temp2 car nous restaurerions sa valeur une fois que nous aurons terminé. Mais cela spaghettiserait trop les choses. Ils sont nommés pour une raison et nous avons déjà désigné temp et temp2 pour ce travail.

Étape 6: Filtres passe-bas et amplificateur de tension

Filtres passe-bas et amplificateur de tension
Filtres passe-bas et amplificateur de tension
Filtres passe-bas et amplificateur de tension
Filtres passe-bas et amplificateur de tension

Afin de nettoyer un peu le bruit et d'améliorer le fonctionnement de notre clavier, nous souhaitons ajouter quelques filtres passe-bas. Ceux-ci filtrent le bruit haute fréquence et laissent passer le signal basse fréquence. Essentiellement, la façon de le faire est simplement d'ajouter un condensateur de 68 pf entre notre entrée analogique et la masse et également un condensateur de 0,1 microfarad (c'est-à-dire 104) entre notre interruption PD4 (INT0) et la masse. Si vous jouez avec ces derniers tout en appuyant sur les boutons du clavier, vous pourrez voir ce qu'ils font.

Ensuite, nous voulons faire un amplificateur de tension. Il s'avère que la rangée inférieure de touches du clavier (ainsi que la touche de recomposition) émet une tension trop faible pour déclencher l'interruption INT0. Le port analogique est suffisamment sensible pour lire les basses tensions de ces touches, mais notre broche d'interruption n'obtient pas un front montant suffisamment bon pour interrompre lorsque nous appuyons sur ces touches. Par conséquent, nous aimerions un moyen de nous assurer qu'un bon front montant de tension atteint PD4 mais que la même basse tension atteint ADC0. C'est une commande assez importante puisque les deux signaux proviennent du même fil de sortie de notre clavier. Il existe un certain nombre de façons sophistiquées de le faire, mais nous n'utiliserons plus notre clavier après ce didacticiel, alors imaginons simplement une méthode qui fonctionne (à peine).

Vous devez d'abord brancher un bouton externe pour remplacer l'interruption INT0 et contrôler l'affichage en maintenant une touche du clavier enfoncée et en cliquant sur le bouton. Cela a moins de problèmes de clavier et vous permettra d'être sûr que vos tensions sont correctement réglées sur la table de consultation du clavier. Une fois que vous savez que le clavier est correctement câblé, supprimez le bouton et remettez l'interruption INT0. Il existe de sérieux problèmes de bruit et de tension en contrôlant le clavier de cette manière, il est donc bon de savoir que tout fonctionne afin que les problèmes futurs puissent être isolés de la touche INT0.

Lorsque vous câblez votre clavier et votre amplificateur de tension, il est très probable que les mêmes valeurs de résistance que j'ai utilisées ne fonctionneront pas. Vous devrez donc faire quelques expérimentations pour obtenir des valeurs qui vous conviennent.

Si vous regardez le schéma que j'ai joint à cette étape, vous verrez comment l'amplificateur de tension va fonctionner. Nous utilisons des résistances et deux transistors. La façon dont les transistors fonctionnent (voir les fiches techniques!) Est-ce qu'il y a une tension minimale que vous devez entrer dans la broche de base du transistor (la broche du milieu) qui la saturera et permettra au courant de circuler entre la broche du collecteur et l'émetteur épingler. Dans le cas du transistor 2N3904 que nous utilisons ici, la tension est de 0,65V. Maintenant, nous prenons cette tension de notre sortie du clavier et nous ne voulons pas changer cette sortie, nous allons donc mettre une grosse résistance entre la sortie du clavier et la base du premier transistor (j'ai utilisé 1Mohm). J'ai étiqueté cela comme R_1 dans le diagramme. Ensuite, nous voulons configurer un diviseur de tension de sorte que la base du transistor soit déjà "presque" à 0,65 volt et que seul un tout petit peu plus le pousse par-dessus et le sature. Ce tout petit peu viendra de la sortie du clavier lorsque nous appuierons sur un bouton. Étant donné que les touches inférieures du clavier n'émettent qu'une infime tension, nous devons déjà être très proches de la saturation pour qu'elles soient suffisantes. Les résistances diviseurs de tension sont étiquetées R_a et R_b sur le schéma. J'ai utilisé R_a = 1Mohm et R_b = 560Kohm mais il est presque certain que vous devrez jouer avec ces chiffres pour bien faire les choses pour votre configuration. Vous voudrez peut-être avoir un mur à proximité contre lequel vous cogner la tête et deux ou trois verres de scotch à portée de main (je recommanderais Laphroaig - cher, mais ça vaut le coup si vous aimez la fumée. Si les choses deviennent vraiment folles, alors procurez-vous simplement une cruche de BV et s'installer pour la nuit)

Voyons maintenant comment les transistors vont nous amener un joli front montant vers la touche INT0 et générer notre interruption de pression de touche. Voyons d'abord ce qui se passe lorsque je n'appuie pas sur une touche. Dans ce cas, le premier transistor (marqué T1 sur le schéma) est bloqué. Ainsi, aucun courant ne circule entre les broches du collecteur et de l'émetteur. Ainsi, la base de l'autre transistor (étiqueté T2) sera tirée vers le haut et ainsi elle saturera permettant au courant de circuler entre ses broches. Cela signifie que l'émetteur de T2 sera tiré vers le bas puisqu'il est connecté au collecteur qui lui-même est connecté à la masse. Ainsi, la sortie qui va à notre broche d'interruption de touche INT0 (PD4) sera faible et il n'y aura pas d'interruption.

Maintenant, que se passe-t-il lorsque j'appuie sur une touche ? Eh bien, la base de T1 passe au-dessus de 0,65 V (dans le cas des touches inférieures, elle dépasse à peine!) Mais nous voyons que lorsque T2 est désactivé, la sortie est élevée et nous obtiendrons donc un signal 5V allant à notre broche INT0 et cela provoquera une interruption.

Remarquez quel est le résultat net ici. Si nous appuyons sur la touche 1, nous obtenons 5V allant à PD4 sans changer de manière significative la sortie allant à ADC0, et plus important encore, même si nous poussons Asterisk, 0, Hash ou Redial, nous obtenons également un signal 5V allant à INT0 et aussi provoquant une interruption ! Ceci est important car si nous passons directement de la sortie du clavier à la broche INT0, ces touches ne génèrent presque aucune tension et elles ne seront pas suffisantes pour déclencher cette broche d'interruption. Notre amplificateur de tension a résolu ce problème.

Étape 7: Code d'affichage à 4 chiffres et vidéo

C'est tout pour le tutoriel 9 ! J'ai joint le code et une vidéo montrant l'opération.

Ce sera la dernière fois que nous utiliserons le clavier analogique (Dieu merci). Il était difficile à utiliser, mais il était également très utile pour nous aider à en apprendre davantage sur la conversion analogique-numérique, les ports analogiques, les interruptions, le multiplexage, les filtres de bruit, les amplificateurs de tension et de nombreux aspects du codage d'assemblage, des tables de recherche aux minuteries/compteurs, etc. C'est pourquoi nous avons décidé de l'utiliser. (en plus c'est amusant de récupérer des trucs).

Maintenant, nous allons examiner à nouveau la communication et obtenir nos affichages à 7 segments et à 4 chiffres pour lire nos lancers de dés à partir de notre rouleau à dés de la même manière que nous l'avons fait avec notre analyseur de registre. Cette fois, nous utiliserons l'interface à deux fils plutôt que notre méthode de code morse piraté.

Une fois que les communications fonctionnent et que les rouleaux apparaissent sur les écrans, nous pouvons enfin fabriquer la première pièce de notre produit final. Vous remarquerez que sans tous les éléments du port analogique, notre code sera beaucoup plus court et probablement plus facile à lire.

Pour ceux d'entre vous qui sont ambitieux. Voici un « projet » que vous pourriez essayer et que vous avez certainement les connaissances nécessaires à ce stade si vous avez suivi tous ces didacticiels à ce stade:

Projet: Fabriquez une calculatrice ! Utilisez notre affichage à 4 chiffres et notre clavier et ajoutez un bouton-poussoir externe qui agira comme une touche « entrée ». Mappez l'astérisque sur "times", le dièse pour "diviser" la recomposition en "plus" et le flash en "moins" et écrivez une routine de calculatrice qui agit comme l'une de ces vieilles calculatrices HP "reverse polish" que tous les ingénieurs avaient a l'époque. C'est à dire. la façon dont ils fonctionnent est que vous entrez un numéro et appuyez sur "enter". Cela pousse ce nombre sur la pile, puis vous entrez un deuxième nombre et appuyez sur "enter", ce qui pousse le deuxième nombre sur la pile. Enfin, vous appuyez sur l'une des opérations telles que X, /, + ou - et cette opération s'appliquera aux deux premiers nombres de la pile, affichera le résultat et poussera le résultat sur la pile afin que vous puissiez l'utiliser à nouveau si vous Comme. Par exemple pour ajouter 2+3 vous feriez: 2, "enter", 3, "enter", "+" et l'affichage indiquerait alors 5. Vous savez utiliser la pile, l'affichage, le clavier, et vous avoir la plupart du code d'arrière-plan déjà écrit. Ajoutez simplement la touche Entrée et les sous-routines nécessaires à la calculatrice. C'est un peu plus compliqué que vous ne le pensez au premier abord, mais c'est amusant et faisable.

À la prochaine!

Conseillé: