İçindekiler:

AVR Assembler Eğitimi 11: 5 Adım
AVR Assembler Eğitimi 11: 5 Adım

Video: AVR Assembler Eğitimi 11: 5 Adım

Video: AVR Assembler Eğitimi 11: 5 Adım
Video: Arap futbolcular antrenmanı katlediyor😅 #football #shorts 2024, Kasım
Anonim
AVR Assembler Eğitimi 11
AVR Assembler Eğitimi 11
AVR Assembler Eğitimi 11
AVR Assembler Eğitimi 11
AVR Assembler Eğitimi 11
AVR Assembler Eğitimi 11

Öğretici 11'e hoş geldiniz!

Bu kısa eğitimde, sonunda nihai projemizin ilk bölümünü oluşturacağız.

Yapmanız gereken ilk şey, bu eğitimin en son adımına gitmek ve videoyu izlemek. Sonra buraya gel. [bunu yaparken duraklıyor….] Tamam. Şimdi devam edin.

Henüz tahmin etmediyseniz, bir Craps oyunu inşa ediyoruz! Tabii ki, bir barbut oyunu yapıyorum diye kesinlikle yapman gerektiği anlamına gelmez. Umarım söylemeden geçer. Her durumda, bölümlere ayrılmış ekranları vb. kontrol etmek ve birbirleriyle iletişim kurmak için mikro denetleyicileri kullanmak faydalıdır - burada esas olarak yaptığımız şey budur. Bunları istediğiniz gibi kullanmak için kod yazabilirsiniz. Şimdilik onları barbut oynamak için kodlayacağım, ancak daha sonra bölümlenmiş ekranları başka bir şey yapmak için yeniden tasarlamaya karar verebilirim.

Bunu inşa etmemin nedeni, sonunda evimin bodrum katındaki "adam mağaramda" tam boy bir Vegas barbut masası isteyebileceğimi düşünmem. Ancak, hiçbir arkadaşımın barbut bahisleri ve zarlarını nasıl ele alacağına, puanlayacağına veya ödeyeceğine dair en ufak bir fikri yok. Bu yüzden, tüm satıcının bizim için çalışmasını masanın yapmasının harika olacağını düşündüm! Masaya bir bahis koyduğumuzda, çiplerimizin üzerinde olduğu karenin yanındaki küçük bir butona basıp oraya ne kadar para konduğunu gösterebiliriz, o zaman mikrodenetleyici zar atıldıktan sonra o kare için ödemeyi hesaplayabilir ve görüntüleyebilir. Yine de bu yönü nasıl organize edeceğimden tam olarak emin değilim. Aklıma gelen bir düşünce, her kişiden sırayla tüm bahislerini oynamasının isteneceğiydi, böylece kontrolör, bir sonraki oyuncuyu kaydetmeden önce her bir kişinin parasının nerede olduğunu kaydedecek vb. Daha sonra, atıştan sonra, bilgisayar her karede ödemeleri gösterebilir ve ayrıca her oyuncu için sürekli bir "toplam nakit" tutabilir.

Bu eğitimin kapak resimlerinden biri için, bu yaz Vegas'taki poker masasında 5 as çekerken çekilmiş bir resmimi kullanmak zorunda kaldım. Heheh. Beni şımart.

İşte AVR montajcı eğitimlerimin tam koleksiyonuna bir bağlantı:

Adım 1: Craps

Barbut!
Barbut!
Barbut!
Barbut!
Barbut!
Barbut!

Bu derste, son Barbut oyununun yalnızca en basit kısmını oluşturacağız. Buna "Pass Line" denir ve üzerine bahse girebilirsiniz. Bu adıma eklediğim 2 dakikalık kısa eğitici videoyu izleyerek oyunun "geçiş çizgisi" kısmı hakkında bilmeniz gereken her şeyi öğrenebilirsiniz.

Şu anki 4 haneli ekranımızın Oyuncunun Nakitini takip ettiği şekilde, Krupiyenin Nakitini takip edecek başka bir 4 haneli ekran oluşturacağız. Krupiye 20$ ile başlayacak ve oyuncu 20$ ile başlayacak (oyundaki toplam olası para 9999$ -- maksimum 4 basamaklı ekranlarımız, ancak oyunun bu ilk parçası için sadece 20$'a ihtiyacımız olacak, yoksa başka türlü aşırı derecede sıkıcı ve makul bir sürede kazanması veya kaybetmesi zor olurdu). Oyuncu krupiyenin tüm parasını alırsa, oyuncu kazanır. Oyuncu tüm parasını kaybederse krupiye kazanır.

Nasıl para kazanır veya kaybedersiniz? Pekala, Craps oynamış olanlarınız, sokakta "zar atan" insanları gören ya da onun Vegas'ta kumarhaneye karşı oynandığını görenleriniz zaten biliyor olacaklar. Geri kalanınız için bugün kodlayacağımız oyunun "pass line" kısmının kısa bir tanımını vereyim.

Craps, haçlı seferlerine kadar uzanan yüzlerce yıldır oynanmaktadır. İkinci Dünya Savaşı siperlerinde askerler tarafından oynandı, sokaklarda oynandı, kumarhanelerde ve kumarhanelerde oynandı. Sadece geçiş çizgisiyle başladı ve diğer tüm şeyler daha sonra eklendi. Aynı ilerlemeyi takip edeceğiz.

Geçiş çizgisinin çalışma şekli şudur. Bir bahis yaparsınız ve ardından zarları atarsınız. İlk ruloya "çıkma rulosu" denir. Çıkış atışında 2 (yılan gözlü), 3 (ace deuce) veya 12 (kutu araba) alırsanız, bahsinizi kaybedersiniz ve buna "craps" denir. 7 (doğal) veya 11 (yo veya yo-leven) atarsanız kazanırsınız. Başka bir sayı atarsanız, bu sayı sizin "puanınız" olur. Bir "puan" belirlendikten sonra, 7'yi atmadan önce noktayı tekrar vurmak amacıyla zarları atmaya devam edersiniz. 7'den önce puanınızı alırsanız, eşit para kazanırsınız. Yani bir dolar bahsi size krupiyeden bir dolar kazandırır. Puanınız gelmeden önce 7 alırsanız, buna "yedi" denir ve bahsinizi krupiyeye kaybedersiniz.

Ondan sonra tekrar başlarsın. Geçiş çizgisine bir bahis koyun ve zarı atın, 7 veya 11 galibiyet, 2, 3 veya 12 mağlubiyet.

Daha birçok bahis türü vardır, "geçme", "geçme oranları", "geçme bahisleri", "gel bahis", "gelme bahisi", "saha", "korna", " zor yollar", vb vs vs. Ayrıntıları burada bulabilirsiniz:

en.wikipedia.org/wiki/Craps

Yukarıda da söylediğim gibi, çocukların birbirlerinin yemek parası için duvara zar attıkları günlerdeki oyunun sadece geçiş çizgisi kısmını kodlayacağız ve işte buradan başlayacağız..

Ancak, bir şeyleri kodlamaya başlamadan önce, bayi nakit ekranını oluşturalım. Bunun için Sparkfun'dan veya başka bir yerden alabileceğiniz daha büyük 4 haneli ekranlardan birini kullanmak istiyorum. Şu andan itibaren bu eğitimlerle ilgili materyalleri listelemeyeceğim. Aslında her şeyi benimle birlikte inşa ettiyseniz, o zaman malzemeleri nereden alacağınızı ve ne olduklarını zaten biliyorsunuzdur. Bunları veya ne kadara mal olduklarını listelemek benim için anlamsız.

Öyleyse prototipleme tahtalarımızdan birini, büyük bir 4 haneli ekranı, bu ekranı kontrol etmek için başka bir ATmega328p'yi alalım ve daha önce zar silindiri ve oyuncu ekranı ile yaptığımız gibi oluşturalım. Ayrıca diğerleri gibi güç, programlama ve TWI iletişimi için başlıklar ekleyeceğiz.

2. Adım: Bayinin Nakit Ekranı

Bayinin Nakit Ekranı
Bayinin Nakit Ekranı
Bayinin Nakit Ekranı
Bayinin Nakit Ekranı
Bayinin Nakit Ekranı
Bayinin Nakit Ekranı

Dağıtıcı ekranını, son eğitimde oyuncunun 4 haneli ekranıyla yaptığımız gibi oluşturuyoruz. Tek fark, daha büyük olması ve daha az pime sahip olmasıdır, bu yüzden onu düzenleyeceğiz ve farklı şekilde kablolayacağız.

Bu ekranın kablo bağlantılarının bir resmini ekledim. Playercash ekranımıza göre daha büyük ve daha az iğneye sahip olduğunu görebilirsiniz. Resim, ekranı aldığım sparkfun sayfasından ve her basamak için hangi pinlerin güç olduğunu ve bir basamaktaki segmentlerin her birini hangi pinlerin kontrol ettiğini gösteriyor.

Her zamanki gibi, ekranı prototipleme devre tahtanıza takarak başlamalı ve nasıl kablolandığını anladığınızdan emin olmak için her parçayı test etmelisiniz. Ardından, bunu breadboard'unuzdaki bir AVR mikro denetleyicisinin pinlerine bağlamalı ve bu eğitimde tüm kodlarımız çalışana kadar oradan çalıştırmalısınız. Son olarak, sonunda harici kartı inşa etmeli ve lehimlemelisiniz. Daha sonra nihai ürünü test ettiğinizde, herhangi bir sorunun koddan değil, lehimleme ve kesme işinizden kaynaklandığını bileceksiniz. Ayrıca, marangozluğun iyi bilinen aksiyomunu "iki kez ölçün ve bir kez kesin" ya da devre kartlarının yapılması durumunda: "iki kes, bir kez lehimleyin" sözünü de unutmayın. Resimde görebileceğiniz gibi, sonunda bozuldum ve bu tür işler için mükemmel Dremel ataşmanını satın aldım. Bir "Elmas Nokta Seti". 5 dolara mal oldu ama bu, kesme işimi arka arkaya çok fazla etkilemekle gelen Öfke Yönetimi Terapisinin maliyetinden çok daha az.

Bu ekran için 330 ohm direnç kullanıyorum. COM pinleri dirençten GND'ye geçer ve güç, görüntülemek istediğiniz segmente gider. COM pinleri için PC0 - PC3 ve segmentler için PB0, PB1, PB2, PB3, PB4, PD5, PD6 ve PD7 kullanacağım.

Doğru yapma şansınızı en üst düzeye çıkarmanın anahtarı:

  1. devreyi haritala
  2. devreyi kes
  3. kablolamanızı kontrol edin
  4. dirençleri, kapakları ve kristal osilatörü takın
  5. bağlantıları ve kabloları tekrar kontrol edin
  6. harici kabloları bağlayın
  7. mikrodenetleyiciyi takın
  8. kablolamayı tekrar kontrol edin
  9. 4 haneli ekranı takın
  10. her basamağı breadboard'dan bir çift kabloyla kontrol edin
  11. bir kenara koyun ve kodu yazın, muhtemelen daha sonra bazı şeyleri değiştirmek zorunda kalacağınızı bilerek ve kesilmesi gereken bir bağlantıyı örtmediğinizi umarak.

Kablolama işimin bir dizi resmini gösterdim. Lütfen sizinkini istediğiniz şekilde kablolamakta özgür olduğunuzu unutmayın. Muhtemelen benden daha iyi bir harita bulabilirsin ve onu kullanmalısın. Bu öğreticilerdeki hiçbir şey, doğru çıkış bağlantı noktalarına sahip oldukları sürece bileşenlerinizin nasıl kablolandığına bağlı değildir. Ki bu bana şunu hatırlatıyor. Şimdi SDA'ya giden iki başlık ve SCL'ye giden iki başlık olduğuna dikkat edin. Sence bunu neden yaptık?

Şimdi, öğreticinin sonundaki ekli kodda görebileceğiniz gibi, son öğreticinin oynatıcı ekranından kodu kesip krupiye ekranı için yeni bir dosyaya yapıştırdım. Daha sonra, "segment" arama tablosunu yeni pin haritasına karşılık gelecek şekilde değiştirdim ve bu ekran için "com" pinlerinin topraklandığını ve segment pinlerinin diğer ekran için olduğu gibi tam tersi değil 5V olduğunu belirttim.. Ayrıca yeni kablolamayı yansıtmak için bağlantı noktalarının başlatılmasını değiştirdim, kasa ekranının adresini 0b1000000 olarak değiştirdim, böylece zar silindiri onunla konuşabilecek, "döngü" alt programını değiştirdim, böylece kapanıyor. Belirli bir segmente güç vermek istediğinde PC0 ila PC3 "com" pinleri ve yeni kablolamada rakamlar ters sırada olduğundan (olduğu gibi bırakıp 1234'ü görüntülemeye çalıştıysanız) görüntülenen "rakam" ı değiştirdim bunun yerine 4321 olarak görünürdü).

İşte yeni kayıt haritası:

(PD7, PD6, PD5, PB4, PB3, PB2, PB1, PB0) = (ondalık nokta, c, g, b, f, a, e, d)

burada 1 AÇIK ve 0 KAPALI.

Şimdi, ilk olarak ekranın başlatılmış değerini çeşitli sayılara ayarlayarak ekranı test edin, böylece açıldığında bunları gösterir. Bu size her şeyin doğru çalışıp çalışmadığını söyleyecektir.

Ardından, diceroller kodunu köle için yeni adresi kullanacak şekilde değiştirin, bunları birbirine bağlayın ve çalıştırın. Zar rulolarının artık yeni ekranda görünmesi dışında, tam olarak son eğitimde yaptığımız gibi hareket etmelidir.

Harika! Artık hem oyuncu ekranı hem de krupiye ekranı ile iletişim kurabilmesi için yeni zar atma kodunu yazmaya hazırız.

3. Adım: Program Anahattı

Program Anahattı
Program Anahattı
Program Anahattı
Program Anahattı
Program Anahattı
Program Anahattı

Kodun oyunumuz için çalışma şekli, zar silindirini usta olarak tutacağız ve krupiye ekranını ek bir köle olarak ekleyeceğiz. Zar silindiri oyunu kontrol edecek ve ortaya çıkan değişiklikleri krupiyeye nakit olarak gönderecek ve oyuncu her atıştan sonra görüntüleyecektir. Şimdilik pass line bahsini her seferinde 10$ olarak alacağız, bu yüzden oyuncunun bahsini değiştirmesiyle henüz çok karmaşık hale gelmemize gerek yok. Daha sonra, mekaniği çalıştırdıktan sonra, bahisleri ve ödemeleri kontrol edecek ek bir usta olacak başka bir denetleyici ekleyeceğiz ve zar silindirimiz bir usta olarak kalacak, ancak yalnızca zar atmak için kullanılacak. Bu, birden fazla master ve slave'iniz olduğunda TWI tahkimi, çarpışmalar ve seri iletişimin diğer önemli yönlerine girmemizi sağlayacaktır. Ayrıca, diğer rulo türlerine bahis yapmamızı sağlayacak, altlarında basmalı düğmeler bulunan bir dizi 7 basamaklı tek ekran ekleyeceğiz, ancak bunların tümü gelecekteki eğitimlerde olacak. Şimdilik, sadece zar silindirini usta olarak ve iki ekranı da bağımlı olarak istiyoruz. Düğmeye bastığımızda, kod, doğal bir ödeme mi, bir barbuttan para mı alma ya da bir galibiyete veya yedi-out'a kadar bir "nokta" atış serisine dalmaya karar verecek.

İlk önce slave rutinlerini yazalım. Bunlar basittir, çünkü tek yapacakları adresleri için SDA hattını izlemek, arandıklarında yeni numarayı okuyacak ve göstereceklerdir. Hepsi bu! Master, toplamları takip edeceği ve güncellemeden önce tüm ödeme hesaplamalarını yapacağı için, master ile tekrar konuşmaları bile gerekmez. Gelecekteki öğreticilerde, master'a geri yazan kölelere sahip olacağız (örneğin, bahis miktarı için basma düğmeli tek 7 haneli ekranlarımız olduğunda, master'a her ekranda ne kadar bahis yapıldığını söylemeleri gerekecek ve böylece biz de onlara bir adresle hitap edin + master ile "ana alıcı modunda" aramayı okuyun), ancak bunu zamanı gelince alacağız.

Şimdilik her şey zar atma düğmesine basılması ve ardından bir hesaplama veya daha fazla düğmeye basılması ve son olarak her bir ekrana yeni toplamları ile birlikte bir mesaj ile başlatılır. Her ödemeden sonra, oyuncunun kazanıp kazanmadığını, diğer bir deyişle, bir atıştan sonra krupiye nakitinin sıfır olup olmadığını veya bir atıştan sonra oyuncu nakitinin sıfır olup olmadığını (ne krupiye ne de oyuncu) belirlemek için bir test yapılacaktır. negatif olabilir, çünkü sadece 10$ veya 10$'dan azsa geriye kalan miktarla bahis oynamalarına izin verilir).

İşler bu şekilde olacak. Gelelim kodlamaya.

Adım 4: Ana İletişim Kodu

Ana İletişim Kodu
Ana İletişim Kodu

Artık zar silindirinin iletişim rutinini yazabiliriz. Ayrıca, sadece bir değil iki farklı köle ile iletişim kurmamız dışında, geçen sefer yazdığımızla neredeyse aynı. Her bir köle için farklı bir adres kullandığımızı unutmayın. Kodu kendiniz değiştirmeniz ve ardından her adresle test etmeniz ve her bir ayrı ekran dışında son öğretici gibi çalıştığından emin olmanız gerekir.

Ekranların düzgün çalışmasını sağlamak ve kabloları kontrol etmek için kullanılabilmesi için rulonun sonucunu gösteren her bir bileşenin kodunu ekleyeceğim.

Oyunu kodlamak, montaj dili komutları veya AVR mikrodenetleyici bileşenleri açısından yeni bir şey getirmiyor ve bu yüzden satır satır geçmem gerektiğini hissetmiyorum. Muhtemelen fark etmişsinizdir ki, yeni bir şey tanıttığımızda, sizi uyutmasam bile çileden çıkarma noktasına kadar her satırı en ince ayrıntısına kadar inceliyorum. Öte yandan, yeni tanıtılan bir şey yoksa bunu yapmayacağım. Bugün durum budur. Sanırım şimdiye kadar kodla oynamaya, kodu baştan sona okumaya, kodu analiz etmeye, kodu anlamaya, kodu eleştirmeye, kodla alay etmeye ve kodu yazan adama gülmeye hazırsınız. Bu yüzden devam etmene ve bunu yapmana izin vereceğim. Yazdıklarımı geliştirebileceğiniz veya en azından sadeleştirebileceğiniz birçok yer bulacağınız neredeyse kesin.

Her zamanki gibi, iki ekran için kodun son sürümünü ve bir sonraki adımda diceroller'ı, şeyi test ettiğim bir videoyla birlikte ekledim.

Adım 5: Son Kod ve Video

Videoyu ve 3 programı ekledim..equ deyimleri ile programın en üstünde bahsi ve başlangıç krupiye ve oyuncu parasını sabitleyebileceğinizi fark edeceksiniz.

Bir sonraki eğitimde, oyunu daha heyecanlı hale getirecek farklı şeylere bahis yapma yeteneğini ekleyeceğiz. Modern Craps ile ilgili ilginç olan şey, bahis yapmak ve oranlarınızı en üst düzeye çıkarmak için çok sayıda farklı yola sahip olmanızdır. Aslında Craps, Casino'daki en yüksek oranlı oyundur! … EĞER nasıl oynanacağını biliyorsan. Öte yandan, nasıl oynanacağını bilmiyorsanız, o zaman en düşük oranlı oyunlardan biri haline gelir.

Paramızı yatıracak daha fazla şeyimiz olduğunda, oyundaki toplam para miktarını artıracağım.

Ben eğlenceli olmalıyım!

Bir dahaki sefere görüşürüz!

Önerilen: