Inhaltsverzeichnis:

AVR-Assembler-Tutorial 11: 5 Schritte
AVR-Assembler-Tutorial 11: 5 Schritte

Video: AVR-Assembler-Tutorial 11: 5 Schritte

Video: AVR-Assembler-Tutorial 11: 5 Schritte
Video: Лекция 4. Архитектура AVR. Ассемблер 2024, Juli
Anonim
AVR-Assembler-Tutorial 11
AVR-Assembler-Tutorial 11
AVR-Assembler-Tutorial 11
AVR-Assembler-Tutorial 11
AVR-Assembler-Tutorial 11
AVR-Assembler-Tutorial 11

Willkommen bei Lernprogramm 11!

In diesem kurzen Tutorial werden wir endlich den ersten Teil unseres Abschlussprojekts erstellen.

Das erste, was Sie tun sollten, ist zum allerletzten Schritt dieses Tutorials zu gehen und das Video anzusehen. Dann komm hierher zurück. [Pausiert, während du das tust….] Okay. Fahren Sie nun fort.

Wenn Sie es noch nicht erraten haben, bauen wir ein Craps-Spiel! Nur weil ich ein Craps-Spiel entwickle, heißt das natürlich nicht, dass Sie es müssen. Ich hoffe, das versteht sich von selbst. Sinnvoll ist es auf jeden Fall, mit Mikrocontrollern segmentierte Displays etc. anzusteuern und miteinander zu kommunizieren - das machen wir hier hauptsächlich. Sie können Code schreiben, um sie nach Belieben zu verwenden. Im Moment werde ich sie so codieren, dass sie Craps spielen, obwohl ich mich später vielleicht entscheide, die segmentierten Displays für etwas anderes zu verwenden.

Der Grund, warum ich dies baue, ist, dass ich denke, dass ich irgendwann einen Vegas Craps-Tisch in voller Größe in meiner "Mannhöhle" im Keller meines Hauses haben möchte. Jedoch hat keiner meiner Freunde die leiseste Ahnung, wie man Craps-Wetten und -Würfe austeilt, erzielt oder auszahlt. Also dachte ich mir, es wäre cool, wenn der Tisch die gesamte Händlerarbeit für uns erledigt! Wenn wir eine Wette auf dem Tisch platzieren, können wir auch einen kleinen Knopf neben dem Feld drücken, auf dem unsere Chips liegen, und zeigt an, wie viel dort platziert ist, dann kann der Mikrocontroller die Auszahlung für dieses Feld nach dem Würfelwurf berechnen und anzeigen. Ich bin mir aber noch nicht ganz sicher, wie ich diesen Aspekt organisieren werde. Ein Gedanke, den ich hatte, war, dass jede Person gebeten wird, alle ihre Wetten nacheinander zu platzieren, damit der Controller aufzeichnet, wo das Geld jeder Person ist, bevor er den nächsten Spieler aufzeichnet und so weiter. Dann kann der Computer nach dem Wurf die Auszahlungen auf jedem Feld anzeigen und auch für jeden Spieler einen laufenden "Total Cash" führen.

Für eines der Titelbilder dieses Tutorials musste ich nur ein Bild verwenden, auf dem ich diesen Sommer am Pokertisch in Vegas 5 Asse ziehe. Hehe. Verwöhn mich.

Hier ist ein Link zur vollständigen Sammlung meiner AVR-Assembler-Tutorials:

Schritt 1: Craps

Craps!
Craps!
Craps!
Craps!
Craps!
Craps!

In diesem Tutorial werden wir nur den einfachsten Teil des endgültigen Craps-Spiels konstruieren. Dies wird "The Pass Line" genannt und Sie können darauf wetten. Sie können alles, was Sie über den "Pass Line"-Teil des Spiels wissen müssen, lernen, indem Sie sich das kurze 2-minütige Lehrvideo ansehen, das ich diesem Schritt beigefügt habe.

Wir werden ein weiteres 4-stelliges Display bauen, das das Cash des Dealers auf die gleiche Weise verfolgt, wie unser aktuelles 4-stelliges Display das Cash des Spielers verfolgt. Der Dealer beginnt mit 20 US-Dollar und der Spieler mit 20 US-Dollar (das insgesamt mögliche Geld im Spiel beträgt 9999 US-Dollar – das Maximum unserer 4-stelligen Anzeigen, aber wir benötigen nur 20 US-Dollar für dieses erste Stück des Spiels oder sonst). wäre extrem mühsam und in einer angemessenen Zeit schwer zu gewinnen oder zu verlieren). Wenn der Spieler das gesamte Geld des Dealers nimmt, gewinnt der Spieler. Wenn der Spieler sein ganzes Geld verliert, gewinnt der Dealer.

Wie gewinnt oder verliert man Geld? Nun, diejenigen von Ihnen, die Craps gespielt haben, Leute gesehen haben, die auf der Straße "Würfel schießen" oder gesehen haben, wie es gegen das Casino in Vegas gespielt hat, werden es bereits wissen. Für den Rest von Ihnen möchte ich Ihnen eine kurze Beschreibung des "Pass Line"-Teils des Spiels geben, den wir heute programmieren werden.

Craps wird seit Hunderten von Jahren gespielt und reicht bis in die Zeit der Kreuzzüge zurück. Es wurde von Truppen in den Schützengräben des Zweiten Weltkriegs gespielt, es wurde auf den Straßen gespielt, es wurde in Casinos und Spielhallen gespielt. Es begann nur mit der Passlinie und all die anderen Dinge wurden später hinzugefügt. Wir werden diese Entwicklung verfolgen.

So funktioniert die Passlinie. Sie platzieren eine Wette und würfeln dann. Der erste Wurf wird als "Come-Out-Roll" bezeichnet. Wenn Sie eine 2 (Schlangenaugen), eine 3 (Ass Zwei) oder eine 12 (Boxcars) beim Come-Out-Wurf bekommen, verlieren Sie Ihre Wette und es wird "Craps" genannt. Wenn Sie eine 7 (ein Natural) oder eine 11 (ein Yo oder Yo-Leven) würfeln, gewinnen Sie. Wenn Sie eine andere Zahl würfeln, wird diese Zahl zu Ihrem "Punkt". Sobald ein "Punkt" festgelegt ist, würfeln Sie weiter mit dem Ziel, den Punkt erneut zu treffen, bevor Sie eine 7 würfeln. Wenn Sie Ihren Punkt erreichen, bevor eine 7 gewürfelt wird, gewinnen Sie sogar Geld. Bei einer Dollar-Wette gewinnen Sie also einen Dollar vom Dealer. Wenn Sie eine 7 erhalten, bevor Ihr Punkt gewürfelt wird, wird dies "Seven Out" genannt und Sie verlieren Ihren Einsatz an den Dealer.

Danach fängst du wieder an. Setzen Sie eine Wette auf die Passlinie und würfeln Sie, 7 oder 11 gewinnen, 2, 3 oder 12 verlieren.

Es gibt viele weitere Arten von Wetten, "Don't Pass", "Pass Odds", "Don't Pass Odds", "Come Bet", "Don't Come Bet", "Field", "Horn", " harte Wege", etc etc etc. Details findest du hier:

en.wikipedia.org/wiki/Craps

Wie ich oben sagte, werden wir vorerst nur den Pass-Line-Teil des Spiels codieren, der alles war, was sie zu der Zeit hatten, als die Kinder für das Mittagessen des anderen gegen die Wand würfelten.

Bevor wir jedoch mit dem Codieren beginnen, bauen wir die Händler-Bargeldanzeige auf. Dafür möchte ich eines der größeren 4-stelligen Displays verwenden, die Sie von Sparkfun oder anderswo bekommen können. Von nun an werde ich keine Materialien zu diesen Tutorials auflisten. Wenn Sie eigentlich schon alles zusammen mit mir gebaut haben, dann wissen Sie bereits, wo Sie die Materialien bekommen und was sie sind. Es ist sinnlos für mich, sie aufzulisten oder wie viel sie kosten.

Also schnappen wir uns eines unserer Prototyping-Boards, ein großes 4-stelliges Display, ein weiteres ATmega328p, um dieses Display zu steuern, und bauen es wie wir es mit dem Würfelroller und dem Spielerdisplay zuvor gemacht haben. Wir werden auch Header für die Stromversorgung, für die Programmierung und für die TWI-Kommunikation wie die anderen anbringen.

Schritt 2: Bargeldanzeige des Händlers

Kassenanzeige des Händlers
Kassenanzeige des Händlers
Kassenanzeige des Händlers
Kassenanzeige des Händlers
Kassenanzeige des Händlers
Kassenanzeige des Händlers

Wir bauen das Dealer-Display genauso auf, wie wir es mit dem 4-stelligen Display des Spielers im letzten Tutorial gemacht haben. Die einzigen Unterschiede sind, dass es größer ist und weniger Pins hat, daher werden wir es anders anordnen und verdrahten.

Ich habe ein Bild von der Verkabelung dieses Displays angehängt. Sie können sehen, dass es größer ist und weniger Pins hat als unser Playercash-Display. Das Bild stammt von der Sparkfun-Seite, auf der ich das Display erhalten habe, und es zeigt, welche Pins für jede Ziffer Strom sind und welche Pins jedes der Segmente in einer Ziffer steuern.

Wie üblich sollten Sie zunächst das Display an Ihr Prototyping-Steckbrett anschließen und jedes Segment testen, um sicherzustellen, dass Sie verstehen, wie es verdrahtet ist. Dann sollten Sie es an die Pins eines AVR-Mikrocontrollers auf Ihrem Steckbrett anschließen und von dort aus ausführen, bis unser gesamter Code in diesem Tutorial funktioniert. Schließlich sollten Sie am Ende die externe Platine aufbauen und anlöten. Wenn Sie dann das Endprodukt testen, werden Sie wissen, dass alle Probleme von Ihrem Löt- und Schneidejob und nicht vom Code herrühren. Vergessen Sie auch nicht das aus der Tischlerei bekannte Axiom "zweimal messen und einmal schneiden" oder bei der Herstellung von Leiterplatten: "zweimal schneiden, einmal löten". Wie Sie auf dem Bild sehen können, bin ich schließlich zusammengebrochen und habe den perfekten Dremel-Aufsatz für diese Art von Arbeit gekauft. Ein "Diamant-Punkte-Set". Es hat 5 Dollar gekostet, aber das ist viel weniger als die Kosten für die Wut-Management-Therapie, die damit einhergeht, dass ich meinen Schneidejob zu oft hintereinander vernichte.

Ich verwende 330 Ohm Widerstände für dieses Display. Die COM-Pins gehen durch den Widerstand zu GND und der Strom geht an das Segment, das Sie anzeigen möchten. Ich werde PC0 bis PC3 für die COM-Pins und PB0, PB1, PB2, PB3, PB4, PD5, PD6 und PD7 für die Segmente verwenden.

Hier ist der Schlüssel zur Maximierung Ihrer Chancen, es richtig zu machen:

  1. zeichne die Schaltung aus
  2. den Stromkreis unterbrechen
  3. überprüfe deine Verkabelung
  4. Bringen Sie die Widerstände, die Kappen und den Quarzoszillator an
  5. Überprüfen Sie die Anschlüsse und die Verkabelung erneut
  6. Befestigen Sie die externen Drähte
  7. Mikrocontroller anschließen
  8. prüf mal die verkabelung
  9. 4-stelliges Display anbringen
  10. Überprüfen Sie jede Ziffer mit einem Paar Drähte vom Steckbrett
  11. legen Sie es beiseite und schreiben Sie den Code, in dem Wissen, dass Sie wahrscheinlich später etwas optimieren müssen und hoffen, dass Sie keine Verbindung verdeckt haben, die unterbrochen werden muss.

Ich habe eine Reihe von Bildern meiner Verkabelungsarbeit gezeigt. Bitte beachten Sie, dass es Ihnen freisteht, Ihre zu verdrahten, wie Sie möchten. Es ist sehr wahrscheinlich, dass Sie eine bessere Karte finden als ich, und Sie sollten sie verwenden. Nichts in diesen Tutorials hängt davon ab, wie Ihre Komponenten verdrahtet sind, solange sie über die richtigen Ausgangsports verfügen. Was mich daran erinnert. Beachten Sie, dass jetzt zwei Header zu SDA und zwei zu SCL gehen? Warum haben wir das wohl getan?

Nun, wie Sie am angehängten Code am Ende des Tutorials sehen können, habe ich einfach den Code aus der Player-Anzeige des letzten Tutorials ausgeschnitten und in eine neue Datei für die Dealer-Anzeige eingefügt. Dann ging ich durch und änderte die "Segmente"-Nachschlagetabelle, um der neuen Pin-Belegung zu entsprechen, und stellte fest, dass für dieses Display die "com" -Pins geerdet sind und die Segment-Pins 5 V haben und nicht umgekehrt wie für das andere Display. Ich habe auch die Initialisierung der Ports geändert, um die neue Verkabelung widerzuspiegeln, ich habe die Adresse des Dealercash-Displays auf 0b1000000 geändert, damit der Würfelroller mit ihm sprechen kann, ich habe das Unterprogramm "Zyklus" so geändert, dass es den PC0 bis PC3 "com" -Pins, wenn ein bestimmtes Segment mit Strom versorgt werden soll, und ich habe die "Ziffer" geändert, die angezeigt wird, da die neue Verkabelung die Ziffern in umgekehrter Reihenfolge hat (wenn Sie es so belassen haben, wie es war und versucht haben, 1234 anzuzeigen wäre stattdessen als 4321 angezeigt worden).

Hier ist die neue Registerkarte:

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

wobei 1 ON und 0 OFF ist.

Testen Sie nun das Display, indem Sie zunächst den initialisierten Wert des Displays auf verschiedene Zahlen einstellen, damit diese beim Einschalten angezeigt werden. Dies wird Ihnen sagen, ob alles richtig funktioniert.

Ändern Sie dann den Diceroller-Code so, dass er die neue Adresse für den Slave verwendet, verbinden Sie sie miteinander und führen Sie ihn aus. Es sollte sich genauso verhalten wie im letzten Tutorial, außer dass die Würfel jetzt auf der neuen Anzeige erscheinen.

Groß! Jetzt sind wir bereit, den neuen Würfelrollencode zu schreiben, damit er sowohl mit dem Spielerdisplay als auch mit dem Dealerdisplay kommuniziert.

Schritt 3: Programmübersicht

Programmübersicht
Programmübersicht
Programmübersicht
Programmübersicht
Programmübersicht
Programmübersicht

Der Code wird für unser Spiel so funktionieren, dass wir die Würfelrolle als Master behalten und die Dealer-Anzeige als zusätzlichen Slave hinzufügen. Der Würfelroller kontrolliert das Spiel und sendet die resultierenden Geldveränderungen an den Dealer und der Spieler zeigt nach jedem Wurf an. Im Moment haben wir nur die Pass-Line-Wette, die jedes Mal $10 beträgt, damit wir es noch nicht zu kompliziert machen müssen, wenn der Spieler seinen Einsatz ändert. Später, sobald die Mechanik funktioniert, werden wir einen weiteren Controller hinzufügen, der ein zusätzlicher Master ist, der die Wetten und die Auszahlungen steuert, und unser Würfelroller wird ein Master bleiben, aber nur zum Würfeln verwendet werden. Dies ermöglicht uns den Einstieg in die TWI-Arbitrierung, Kollisionen und andere wichtige Aspekte der seriellen Kommunikation, wenn Sie mehrere Master und Slaves haben. Wir werden auch eine Reihe von einzelnen 7-stelligen Displays mit Druckknöpfen darunter hinzufügen, die es uns ermöglichen, auf andere Arten von Rollen zu wetten, aber all das wird in zukünftigen Tutorials kommen. Im Moment wollen wir nur den Würfelroller als Master und die beiden Displays als Slaves. Wenn wir den Knopf drücken, entscheidet der Code, ob wir ein Natural auszahlen, Geld von einem Craps nehmen oder zu einer "Point"-Serie von Würfen wechseln, bis entweder ein Gewinn oder ein Seven-Out ist.

Schreiben wir zuerst die Slave-Routinen. Diese sind insofern einfach, als sie nur auf der SDA-Leitung nach ihrer Adresse suchen. Wenn sie angerufen werden, lesen sie die neue Nummer, um sie anzuzeigen und anzuzeigen. Das ist alles! Sie müssen nicht einmal mit dem Master sprechen, da der Master ihre Gesamtsummen verfolgt und alle Auszahlungsberechnungen durchführt, bevor er sie aktualisiert. In zukünftigen Tutorials werden Slaves an den Master zurückschreiben (wenn wir zum Beispiel einzelne 7-stellige Displays mit Druckknöpfen für den Einsatzbetrag haben, müssen sie dem Master mitteilen, wie viel auf jedem Display gewettet wird, und so werden wir es tun adressieren Sie sie mit einer Adresse + Leseaufruf mit dem Master im "Master-Empfänger-Modus"), aber dazu werden wir zu gegebener Zeit kommen.

Vorerst wird alles durch das Drücken der Würfelwurftaste ausgelöst, gefolgt von einer Berechnung oder weiteren Tastendrücken und schließlich einer Meldung an jede der Anzeigen mit ihren neuen Summen. Nach jeder Auszahlung wird ein Test durchgeführt, um festzustellen, ob der Spieler gewonnen oder verloren hat, d negativ werden können, da sie nur $10 setzen dürfen oder was auch immer übrig bleibt, wenn es weniger als $10 ist.

So wird es also funktionieren. Kommen wir zur Codierung.

Schritt 4: Master-Kommunikationscode

Master-Kommunikationscode
Master-Kommunikationscode

Wir können jetzt die Kommunikationsroutine des Würfelrollers schreiben. Es ist auch fast identisch mit dem, das wir letztes Mal geschrieben haben, außer dass wir mit zwei verschiedenen Slaves kommunizieren werden und nicht nur mit einem. Beachten Sie, dass wir für jeden der Slaves eine andere Adresse verwenden. Sie sollten den Code selbst ändern und dann einfach mit jeder Adresse testen und sicherstellen, dass er genau wie im letzten Tutorial funktioniert, außer mit jeder separaten Anzeige.

Ich werde den Code für jede Komponente anhängen, die einfach das Ergebnis der Rolle anzeigt, damit die Anzeigen ordnungsgemäß funktionieren und die Verkabelung überprüft werden kann.

Die Codierung des Spiels bringt nichts Neues in Bezug auf Assemblersprachbefehle oder AVR-Mikrocontroller-Komponenten und so habe ich nicht das Gefühl, dass ich es Zeile für Zeile durchgehen muss. Sie haben wahrscheinlich bemerkt, dass ich, wenn wir etwas Neues vorstellen, jede Zeile bis ins kleinste Detail durchgehe, bis ich Sie verärgere, wenn ich Sie nicht einschlafe. Andererseits werde ich das nicht tun, wenn nichts Neues eingeführt wird. Das ist heute der Fall. Ich denke, dass Sie jetzt bereit sind, mit dem Code zu spielen, den Code durchzulesen, den Code zu analysieren, den Code zu verstehen, den Code zu kritisieren, über den Code zu spotten und über den Typen zu lachen, der den Code geschrieben hat. Also lasse ich dich weitermachen und das tun. Es ist fast sicher, dass Sie viele Stellen finden werden, an denen Sie das, was ich geschrieben habe, verbessern oder zumindest vereinfachen können.

Die finale Version des Codes für die beiden Displays und den Diceroller habe ich wie immer im nächsten Schritt angehängt, zusammen mit einem Video, in dem ich das Ding teste.

Schritt 5: Endgültiger Code und Video

Ich habe das Video und die 3 Programme angehängt. Sie werden feststellen, dass Sie den Einsatz und das Startgeld für Dealer und Spieler ganz oben im Programm mit.equ-Anweisungen festlegen können.

Im nächsten Tutorial werden wir die Möglichkeit hinzufügen, auf verschiedene Dinge zu wetten, die das Spiel spannender machen. Das Interessante an modernen Craps ist, dass Sie viele verschiedene Möglichkeiten haben, zu wetten und zu versuchen, Ihre Gewinnchancen zu maximieren. Tatsächlich ist Craps das Spiel mit den höchsten Gewinnchancen im Casino! … WENN Sie wissen, wie man es spielt. Auf der anderen Seite, wenn Sie nicht wissen, wie man spielt, wird es zu einem der Spiele mit den niedrigsten Quoten.

Sobald wir mehr Dinge haben, auf die wir unser Geld setzen können, werde ich den Gesamtbetrag im Spiel erhöhen.

Ich sollte Spaß machen!

Bis zum nächsten Mal!

Empfohlen: