Table des matières:

Tutoriel Assembleur AVR 11 : 5 étapes
Tutoriel Assembleur AVR 11 : 5 étapes

Vidéo: Tutoriel Assembleur AVR 11 : 5 étapes

Vidéo: Tutoriel Assembleur AVR 11 : 5 étapes
Vidéo: AVR Ассемблер. Урок 11. LCD. AVR Assembler. Lesson 11. LCD. 2024, Novembre
Anonim
Tutoriel Assembleur AVR 11
Tutoriel Assembleur AVR 11
Tutoriel Assembleur AVR 11
Tutoriel Assembleur AVR 11
Tutoriel Assembleur AVR 11
Tutoriel Assembleur AVR 11

Bienvenue dans le didacticiel 11 !

Dans ce court tutoriel, nous allons enfin construire la première partie de notre projet final.

La première chose à faire est d'aller à la toute dernière étape de ce tutoriel et de regarder la vidéo. Alors reviens ici. [pause pendant que vous faites cela….] D'accord. Continuez maintenant.

Si vous ne l'avez pas déjà deviné, nous construisons un jeu de Craps ! Bien sûr, ce n'est certainement pas parce que je construis un jeu de craps que vous devez le faire. J'espère que cela va de soi. Il est utile dans tous les cas d'utiliser des microcontrôleurs pour contrôler des affichages segmentés, etc., et pour communiquer entre eux - c'est principalement ce que nous faisons ici. Vous pouvez écrire du code pour les utiliser comme bon vous semble. Pour l'instant, je vais les coder pour jouer au craps, bien que je puisse décider plus tard de réutiliser les affichages segmentés pour faire autre chose.

La raison pour laquelle je construis ceci est parce que je pense que je pourrais éventuellement vouloir une table de craps Vegas pleine grandeur dans ma "caverne pour hommes" au sous-sol de ma maison. Cependant, aucun de mes amis n'a la moindre idée de la façon de traiter, de marquer ou de payer les paris et les rouleaux de craps. Alors j'ai pensé que ce serait cool que la table fasse tout le travail du croupier pour nous ! Lorsque nous plaçons un pari sur la table, nous pouvons également appuyer sur un petit bouton-poussoir à côté du carré sur lequel se trouvent nos jetons pour montrer combien y est placé, puis le microcontrôleur peut calculer le paiement pour ce carré après le lancer de dés et l'afficher. Je ne sais toujours pas comment je vais organiser cet aspect. Une pensée que j'ai eue était que chaque personne sera invitée à placer tous ses paris à son tour afin que le contrôleur enregistre où se trouve l'argent de chaque personne avant d'enregistrer le joueur suivant et ainsi de suite. Ensuite, après le lancer, l'ordinateur peut afficher les paiements sur chaque carré et peut également conserver un « total en espèces » pour chaque joueur.

Pour l'une des photos de couverture de ce tutoriel, j'ai juste dû utiliser une photo de moi tirant 5 as à la table de poker à Vegas cet été. Héhé. Faites-moi plaisir.

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

Étape 1: merde

Merde !
Merde !
Merde !
Merde !
Merde !
Merde !

Dans ce tutoriel, nous ne construirons que la partie la plus simple du jeu de Craps final. C'est ce qu'on appelle "The Pass Line" et vous pouvez parier dessus. Vous pouvez apprendre tout ce que vous devez savoir sur la partie "pass line" du jeu en regardant la courte vidéo d'instructions de 2 minutes que j'ai jointe à cette étape.

Nous construirons un autre affichage à 4 chiffres qui gardera une trace de l'argent du croupier de la même manière que notre affichage à 4 chiffres actuel gardera une trace de l'argent du joueur. Le croupier commencera avec 20 $ et le joueur commencera avec 20 $ (le total d'argent possible dans le jeu est de 9999 $ - le maximum de nos affichages à 4 chiffres, mais nous n'aurons besoin que de 20 $ pour cette première pièce du jeu ou sinon il serait fastidieux à l'extrême et difficile à gagner ou à perdre dans un laps de temps décent). Si le joueur prend tout l'argent du croupier, le joueur gagne. Si le joueur perd tout son argent, le croupier gagne.

Comment gagner ou perdre de l'argent ? Eh bien, ceux d'entre vous qui ont joué au Craps, vu des gens "tirer aux dés" dans la rue, ou l'avoir vu jouer contre le casino de Vegas, le sauront déjà. Pour le reste d'entre vous, laissez-moi vous donner une brève description de la partie "pass line" du jeu que nous allons coder aujourd'hui.

Le craps est joué depuis des centaines d'années, remontant à l'époque des croisades. Il a été joué par les troupes dans les tranchées de la Seconde Guerre mondiale, il a été joué dans les rues, il a été joué dans les casinos et les salles de jeux. Tout a commencé avec la ligne de pass et toutes les autres choses y ont été ajoutées plus tard. Nous suivrons cette même progression.

La façon dont fonctionne la ligne de passe est la suivante. Vous placez un pari, puis vous lancez les dés. Le premier rouleau s'appelle le "come-out roll". Si vous obtenez un 2 (yeux de serpent), un 3 (as deuce) ou un 12 (box cars) sur le come-out roll, vous perdez votre pari et cela s'appelle « craps ». Si vous obtenez un 7 (un naturel) ou un 11 (un yo ou un yo-lev), vous gagnez. Si vous obtenez un autre numéro, ce numéro devient votre "point". Une fois qu'un « point » est établi, vous continuez à lancer les dés dans le but de toucher à nouveau le point avant de lancer un 7. Si vous obtenez votre point avant qu'un 7 ne soit lancé, vous gagnez de l'argent égal. Ainsi, un pari en dollars vous rapporte un dollar du croupier. Si vous obtenez un 7 avant que votre point ne soit lancé, cela s'appelle "seven out" et vous perdez votre pari au profit du croupier.

Après tu recommences. Placez un pari sur la ligne de passe et lancez les dés, 7 ou 11 victoires, 2, 3 ou 12 défaites.

Il existe de nombreux autres types de paris, "ne pas passer", "passer les cotes", "ne pas passer les cotes", "venir parier", "ne pas venir parier", "champ", "cor", " manières difficiles", etc etc etc. Vous pouvez trouver des détails ici:

en.wikipedia.org/wiki/Craps

Comme je l'ai dit ci-dessus, pour l'instant, nous ne coderons que la partie de la ligne de passe du jeu qui est tout ce qu'ils avaient à l'époque où les enfants lançaient des dés contre le mur pour l'argent du déjeuner de l'autre et c'est donc par là que nous allons commencer.

Cependant, avant de commencer à coder des choses, construisons l'affichage de l'argent du concessionnaire. Pour cela, je souhaite utiliser l'un des plus grands écrans à 4 chiffres que vous pouvez obtenir de Sparkfun ou d'ailleurs. A partir de maintenant, je ne vais pas énumérer les matériaux sur ces tutoriels. Si vous avez réellement tout construit avec moi, vous savez déjà où trouver les matériaux et ce qu'ils sont. Il est inutile pour moi de les énumérer ou combien ils coûtent.

Prenons donc l'une de nos cartes de prototypage, un grand écran à 4 chiffres, un autre ATmega328p pour contrôler cet écran, et construisons-le comme nous l'avons fait avec le rouleau de dés et l'écran du joueur avant. Nous allons également attacher des en-têtes pour l'alimentation, pour la programmation et pour les communications TWI comme les autres.

Étape 2: Affichage de l'argent du concessionnaire

Affichage de l'argent du concessionnaire
Affichage de l'argent du concessionnaire
Affichage de l'argent du concessionnaire
Affichage de l'argent du concessionnaire
Affichage de l'argent du concessionnaire
Affichage de l'argent du concessionnaire

Nous construisons l'affichage du croupier de la même manière que nous l'avons fait avec l'affichage à 4 chiffres du joueur dans le dernier didacticiel. Les seules différences sont qu'il est plus gros et qu'il a moins de broches, nous allons donc l'arranger et le câbler différemment.

Je joins une photo du câblage de cet écran. Vous pouvez voir qu'il est plus grand et a moins d'épingles que notre présentoir playercash. L'image provient de la page sparkfun où j'ai obtenu l'affichage et elle montre quelles broches sont alimentées pour chaque chiffre et quelles broches contrôlent chacun des segments d'un chiffre.

Comme d'habitude, vous devez commencer par brancher l'écran sur votre maquette de prototypage et tester chaque segment pour vous assurer que vous comprenez comment il est câblé. Ensuite, vous devez le connecter aux broches d'un microcontrôleur AVR sur votre maquette et l'exécuter à partir de là jusqu'à ce que tout notre code fonctionne dans ce didacticiel. Enfin, à la fin, vous devez construire la carte externe et la souder. Ensuite, lorsque vous testerez le produit final, vous saurez que tout problème provient de votre travail de soudure et de découpe et non du code. N'oubliez pas non plus l'axiome bien connu de la menuiserie "mesurer deux fois et couper une fois", ou dans le cas de la fabrication de circuits imprimés: "couper deux fois, souder une fois". Comme vous pouvez le voir sur la photo, j'ai finalement craqué et j'ai acheté l'accessoire Dremel parfait pour ce genre de travail. Un "Ensemble de pointes de diamant". Cela a coûté 5 dollars, mais c'est beaucoup moins que le coût de la thérapie de gestion de la colère qui accompagne mon travail de coupe trop de fois de suite.

J'utilise des résistances de 330 ohms pour cet écran. Les broches COM traversent la résistance jusqu'à GND et l'alimentation va au segment que vous souhaitez afficher. Je vais utiliser PC0 à PC3 pour les broches COM et PB0, PB1, PB2, PB3, PB4, PD5, PD6 et PD7 pour les segments.

Voici la clé pour maximiser vos chances de réussir:

  1. tracer le circuit
  2. couper le circuit
  3. vérifie ton cablage
  4. attachez les résistances, les capuchons et l'oscillateur à cristal
  5. revérifier les connexions et le câblage
  6. attacher les fils externes
  7. attacher le microcontrôleur
  8. revérifier le cablage
  9. fixez l'affichage à 4 chiffres
  10. vérifier chaque chiffre avec une paire de fils de la planche à pain
  11. mettez-le de côté et écrivez le code, sachant que vous devrez probablement modifier les choses plus tard et en espérant que vous n'avez pas masqué une connexion qui doit être coupée.

J'ai montré une série de photos de mon travail de câblage. Sachez que vous êtes libre de câbler le vôtre comme vous le souhaitez. Il est très probable que vous puissiez trouver une meilleure carte que moi et que vous devriez l'utiliser. Rien dans ces didacticiels ne dépend de la façon dont vos composants sont câblés, tant qu'ils ont les bons ports de sortie. Ce qui me rappelle. Notez qu'il y a maintenant deux en-têtes vers SDA et deux vers SCL ? Pourquoi pensez-vous que nous avons fait cela?

Maintenant, comme vous pouvez le voir par le code joint à la fin du didacticiel, j'ai simplement coupé et collé le code de l'affichage du lecteur du dernier didacticiel dans un nouveau fichier pour l'affichage du croupier. Ensuite, j'ai parcouru et modifié la table de recherche "segments" pour qu'elle corresponde à la nouvelle carte des broches en notant que pour cet affichage, les broches "com" sont mises à la terre et les broches de segment sont à 5 V plutôt que l'inverse comme c'était le cas pour l'autre affichage. J'ai également changé l'initialisation des ports pour refléter le nouveau câblage, j'ai changé l'adresse de l'affichage de la caisse du concessionnaire en 0b1000000 pour que le rouleau de dés puisse lui parler, j'ai changé le sous-programme "cycle" pour qu'il éteigne le Les broches "com" PC0 à PC3 lorsqu'il veut alimenter un segment particulier et j'ai changé le "chiffre" qui s'affiche car le nouveau câblage a les chiffres dans l'ordre inverse (si vous le laissez tel quel et essayez de l'afficher 1234 se serait affiché comme 4321 à la place).

Voici la nouvelle carte des registres:

(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (point décimal, c, g, b, f, a, e, d)

où 1 est ON et 0 est OFF.

Testez maintenant l'affichage en réglant d'abord la valeur initialisée de l'affichage sur différents nombres de sorte que lorsqu'il s'allume, il les affiche. Cela vous dira si tout fonctionne correctement.

Modifiez ensuite le code du lanceur de dés afin qu'il utilise la nouvelle adresse de l'esclave, connectez-les ensemble et exécutez-le. Cela devrait fonctionner exactement comme ce que nous avons fait dans le dernier didacticiel, sauf que les jets de dés s'affichent maintenant sur le nouvel affichage.

Super! Nous sommes maintenant prêts à écrire le nouveau code du rouleau de dés afin qu'il communique à la fois avec l'affichage du joueur et l'affichage du croupier.

Étape 3: Aperçu du programme

Aperçu du programme
Aperçu du programme
Aperçu du programme
Aperçu du programme
Aperçu du programme
Aperçu du programme

La façon dont le code va fonctionner pour notre jeu est que nous garderons le lanceur de dés en tant que maître et ajouterons l'affichage du croupier en tant qu'esclave supplémentaire. Le lanceur de dés contrôlera le jeu et il enverra les changements résultants en espèces au croupier et le joueur les affichera après chaque lancer. Pour l'instant, nous n'aurons qu'une mise de 10 $ à chaque fois, nous n'avons donc pas à nous compliquer la tâche avec le joueur qui change sa mise. Plus tard, une fois que nous aurons fait fonctionner la mécanique, nous ajouterons un autre contrôleur qui sera un maître supplémentaire qui contrôlera les paris et les paiements et notre lanceur de dés restera un maître mais utilisé uniquement pour lancer les dés. Cela nous permettra d'accéder à l'arbitrage TWI, aux collisions et à d'autres aspects importants de la communication série lorsque vous avez plusieurs maîtres et esclaves. Nous ajouterons également un certain nombre d'écrans à 7 chiffres avec des boutons poussoirs en dessous qui nous permettront de parier sur d'autres types de rouleaux, mais tout cela viendra dans les futurs tutoriels. Pour l'instant, nous voulons juste le lanceur de dés en tant que maître et les deux écrans en tant qu'esclaves. Lorsque nous appuyons sur le bouton, le code décidera s'il faut payer un naturel, retirer de l'argent d'un craps ou passer à une série de lancers "points" jusqu'à ce qu'il y ait une victoire ou un sept-out.

Écrivons d'abord les routines esclaves. Ceux-ci sont simples en ce sens qu'ils ne feront que regarder la ligne SDA pour leur adresse, s'ils sont appelés, ils liront le nouveau numéro pour l'afficher et l'afficher. C'est tout! Ils n'ont même pas besoin de répondre au maître puisque celui-ci gardera une trace de leurs totaux et effectuera tous les calculs de paiement avant de les mettre à jour. Dans les futurs didacticiels, les esclaves écriront au maître (par exemple, lorsque nous avons un seul affichage à 7 chiffres avec des boutons-poussoirs pour le montant de la mise, ils devront dire au maître combien est misé sur chaque affichage et nous allons donc adressez-les avec une adresse + appel en lecture avec le maître en "mode récepteur maître") mais nous y reviendrons en temps voulu.

Pour l'instant, tout est déclenché par la pression sur le bouton du lancer de dés, suivi d'un calcul ou d'autres pressions sur le bouton et enfin d'un message à chacun des affichages avec leurs nouveaux totaux. Il y aura un test après chaque paiement pour déterminer si le joueur a gagné ou perdu, en d'autres termes, si l'argent du croupier devient nul après un lancer, ou si l'argent du joueur devient nul après un lancer (ni le croupier ni le joueur peut devenir négatif car ils ne seront autorisés à parier que 10 $ ou tout ce qui reste s'il est inférieur à 10 $).

C'est ainsi que cela va fonctionner. Passons au codage.

Étape 4: Code de communication maître

Code de communication principal
Code de communication principal

Nous pouvons maintenant écrire la routine de communication du lanceur de dés. Il est également presque identique à celui que nous avons écrit la dernière fois, sauf que nous communiquerons avec deux esclaves différents plutôt qu'un seul. Notez que pour chacun des esclaves, nous utilisons une adresse différente. Vous devez modifier le code vous-même, puis le tester simplement avec chaque adresse et vous assurer qu'il fonctionne exactement comme le dernier didacticiel, sauf avec chaque affichage séparé.

Je vais joindre le code pour chaque composant qui affiche simplement le résultat du rouleau afin qu'il puisse être utilisé pour faire fonctionner correctement les écrans et vérifier le câblage.

Le codage du jeu n'apporte rien de nouveau en ce qui concerne les commandes en langage assembleur ou les composants du microcontrôleur AVR et je n'ai donc pas besoin de le parcourir ligne par ligne. Vous avez probablement remarqué que lorsque nous introduisons quelque chose de nouveau, je parcoure chaque ligne dans les moindres détails au point de vous exaspérer sinon de vous endormir. D'un autre côté, je ne le ferai pas s'il n'y a rien de nouveau introduit. C'est le cas aujourd'hui. Je pense donc que vous êtes maintenant prêt à jouer avec le code, à lire le code, à analyser le code, à comprendre le code, à critiquer le code, à vous moquer du code et à rire du gars qui a écrit le code. Je vais donc vous laisser aller de l'avant et le faire. Il est presque certain que vous trouverez de nombreux endroits où vous pourrez améliorer ou au moins simplifier ce que j'ai écrit.

J'ai, comme d'habitude, joint la version finale du code pour les deux écrans et le lanceur de dés à l'étape suivante, ainsi qu'une vidéo de moi testant la chose.

Étape 5: Code final et vidéo

J'ai joint la vidéo et les 3 programmes. Vous remarquerez que vous pouvez fixer le pari et l'argent du croupier de départ et du joueur en haut du programme avec des déclarations.equ.

Dans le prochain tutoriel, nous ajouterons la possibilité de parier sur différentes choses qui rendront le jeu plus excitant. La chose intéressante à propos du Craps moderne est que vous avez une multitude de façons différentes de parier et d'essayer de maximiser vos chances. En fait, le Craps est le jeu à cotes les plus élevées du Casino ! … SI vous savez en jouer. D'un autre côté, si vous ne savez pas comment jouer, cela devient l'un des jeux aux cotes les plus basses.

Une fois que nous aurons plus de choses sur lesquelles parier notre argent, j'augmenterai le montant total d'argent dans le jeu.

Je devrais être amusant !

À la prochaine!

Conseillé: