İçindekiler:
- Adım 1: Saat Bölücüyü Ayarlama
- Adım 2: Bir Sonlu Durum Makinesi (FSM) Oluşturma
- Adım 3: Yedi Segment Ekranının Eşleştirilmesi
- Adım 4: Karşılaştırıcıyı Oluşturma
- Adım 5: Bir Zamanlayıcı Ayarlama
- Adım 6: Sözde Rastgele Sayı Üreticisini Tasarlama
- 7. Adım: Dönüştürücü Oluşturma
- 8. Adım: Oyun Modülünde Her Şeyi Bir Araya Getirmek
- 9. Adım: Karşılaşılan Ekstra Sorunlar
- Adım 10: Kaynak Dosyaları ve Kısıtlamalar
Video: İkili - Ondalık Eşleştirici Oyunu: 10 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:17
Bu talimat, İkili - Ondalık Eşleştirme oyunumuzu oluşturmak için gereken süreci ve modülleri gösterecektir. 60 saniye içinde, kullanıcılar anahtarları değiştirerek ve bir tahmin düğmesi ile göndererek yedi segmentli ekranda rastgele oluşturulmuş ondalık sayıları çevirecek ve girecektir. Tamamlandığında, bir nihai puan görüntülenecek ve ardından tekrar oynamak için sıfırlanacaktır.
İkili ve hızlı refleksleri anlamak, iyi yapmak için faydalıdır, ancak anında tekrar denemek istemesi durumunda sıfırlama düğmesi sağlanır.
Adım 1: Saat Bölücüyü Ayarlama
Tüm bu projenin omurgası, bu gizmodaki tüm parçaların doğru senkronizasyonundan geliyor. Sonlu Durum Makinemiz dahili saati kullanır, ancak yedi segmentli ekran ve zamanlayıcı, saatin değiştirilmiş bir sürümünü kullanmalıdır.
Bu "yeni saat", her bir belirli bileşen için gereken belirli bir frekansı elde etmek için dahili saati istenen bir periyoda bölmekten gelir. Bu, önceki laboratuvarlarda yapıldı ve deneyimlerden, zamanlayıcının "bir" hanesinin 0.1 Hz'e ayarlandığını ve "onlar" hanesinin 1 Hz olduğunu biliyoruz.
Girişler: ClkIn, bölen(32 bit)
Çıkışlar: ClkOut
Adım 2: Bir Sonlu Durum Makinesi (FSM) Oluşturma
Sonlu Durum Makinemizde, beş giriş (başlangıç, sıfırlama, tahmin, eşit, zaman aşımı) ile beş durumun (Başlat, Görüntüle, Kontrol Et, Puan ve Bitiş) gerekli olacağına karar verdik. Durum Makinemizdeki tek çıktı, kullanıcının aşağıdaki durumlara göre hangi durumda olduğunu (000, 001, 011, 101, 100) temsil eden 3 bitlik bir sayıdır.
Bir Sonlu Durum Makinesinin aslında aşağıdaki işlevleri gerçekleştirmediğini, bunun yerine programın hangi durumda olduğunu ve ne olduğunu söylediğini unutmayın. Gerçekte ne olduğu, aşağıda açıklanan üst modül tarafından belirlenir.
Başlangıç Durumu (000)
Başlangıç Durumu, kullanıcının başlangıç girişi yüksek olana kadar başlayacağı yerdir, bu aynı zamanda sıfırlama düğmesine her basıldığında ulaşılacak durumdur.
Oyun Durumu (001)
Oyun Durumu, rastgele sayının üretildiği ve kullanıcının bir girdi oluşturmak için anahtarları değiştirdiği oyunun başlangıcıdır. Tahmin düğmesine basıldığında, oyun Kontrol Durumuna taşınır.
Durumu Kontrol Et (011)
Bu durum, kullanıcının girişinin değerlerini ve rastgele oluşturulmuş sayıyı karşılaştıracak olan karşılaştırıcının kullanıldığı yerdir. Gönderim doğruysa, eşit değer yüksektir ve FSM Puan Durumuna gider; ancak, gönderim yanlışsa, FSM, gönderim doğru olana kadar Görüntüleme Durumuna geri döner.
Bu Kontrol Durumu, diğerlerine kıyasla nispeten daha hızlı gerçekleşir, çünkü sadece kontrol düğmesine basıldığı sürece gerçekleşir.
Puan Durumu (101)
Eşit değer yüksek olduğundan, gönderim doğruydu. Bu durumda puan değeri bir artacak ve kullanıcının girmesi için yeni bir sayı oluşturulacaktır. Bu yeni numara bizi kullanıcının bir kez daha anahtarları değiştireceği Başlangıç Durumuna geri getiriyor.
Bitiş Durumu (100)
60 saniyelik zamanlayıcı dolduğunda, zaman aşımı girişi yüksek olacaktır ve kullanıcı, son puanın görüntülendiği Bitiş Durumuna ulaşır. Ardından sıfırlama girişine basılacak ve FSM yeniden Başlatma Durumunda yeniden başlayacaktır.
Girdiler: Clk, rst, start, tahmin, equal, timeout
Çıkış: durum (3 bit)
Adım 3: Yedi Segment Ekranının Eşleştirilmesi
Yedi Segment Ekran, tüm projenin önemli bir parçasıdır, çünkü ekrandaki ilk iki hane rastgele sayı üretecinin çıktısı olarak kullanılırken, son iki hane zamanlayıcıdır. Bunun bir örneğini son laboratuvarda ekranda hane olması açısından uygulamış olsak da onaltılı olarak görüntülendi. Bu sorunu çözmek için aşağıda daha ayrıntılı açıklanan bir dönüştürücü ve saat bölücü kullandık.
Ekran, FSM oyun durumuna girene kadar tüm 0'ları gösterir; ancak, son durumda, ekran yalnızca kullanıcının puanını göstermelidir.
Yedi segmentli ekranın dört basamağını da kullandığımızdan, her zaman yanıyormuş gibi algılanmak için her bir anotta 300 Hz'de yeterince hızlı geçiş yapmamız gerekiyor.
Girişler: Clk, yedi segment
Çıkışlar: katotlar(7 bit), anotlar(4 bit)
Adım 4: Karşılaştırıcıyı Oluşturma
Bu alt modül, Kontrol Durumunda, 7 bitlik ikili girilen tahmini gerçek ondalık değerle nasıl karşılaştırdığına göre kullanılır.
Eşit değerin yüksek veya düşük olmasına bağlı olarak hem girdileri hem de iki çıktıyı değerlendiren bir if ifademiz vardı. Bu modül ne kadar önemli olsa da, bu projede tasarlanması açık ara daha basit programlardan biridir.
Girişler: anahtarlar (8 bit), sayı (8 bit)
Çıkış: EQ
Adım 5: Bir Zamanlayıcı Ayarlama
Zamanlayıcımız esasen farklı oranlarda artan iki farklı sayaçtır. "Birin" değerinde bir sayaç (ilk yedi segmentli ekran) ve "onluk" değeri için bir sayaç (yedi segmentli ekranda ikinci basamak). Her rakam saatin yükselen kenarına bağlıdır ve sayaç 60 saniyeye ulaştığında zaman aşımı yüksek olacak ve oyun sona erecek ve başlangıç durumuna dönecektir.
Girişler: Clk, state(3 bit), start
Çıkışlar: Akım (8 bit), zaman aşımı
Adım 6: Sözde Rastgele Sayı Üreticisini Tasarlama
Özellikle bu durum için bir sayı üreteci için başka bir alternatif yöntem, bir LFSR kullanma ihtiyacını ortadan kaldıracağından, giriş yüksek olduğunda sayılan sayıyı veren 0-99 (ikili olarak) arasında yinelenen bir sayıcıya sahip olmaktır.
Sayı, dahili saatin yükselen her kenarını (10 nano-saniye) değiştirir ve bir mikrosaniyede 100 sayının tümü arasında geçiş yapar. Kullanıcı sayı üretecinden yeni bir numara istediğinde, üzerinde bulunduğu numarayı verir, Bu süreç tamamen rastgele olmasa da, bu süreçten ilgili çıktıları bulma olasılığı sözde rastgele olacak kadar düşüktür.
Girdiler: Clk, changenum, equal
Çıkışlar: sayı (8 bit)
7. Adım: Dönüştürücü Oluşturma
Gerekli bir bileşen, orijinal onaltılık sayı yerine yedi bölümlü ekranda ondalık sayıları görüntülemek için kullandığımız Dönüştürücüdür. Her iki sayı da 7 bitlik bir İkili sayıya dayalı olsa da, onaltılıyı ondalık sayıya dönüştürmek için tasarlanmış tam bir modül oluşturduk.
Örneğin, puan için son çıktımız 0010001 (on yedi) olsaydı, yedi segmentli ekran ondalık sayı 17 yerine onaltılık değer 11'i gösterirdi.
Giriş: Numin (8 bit)
Çıktı: Numout (8 bit)
8. Adım: Oyun Modülünde Her Şeyi Bir Araya Getirmek
Bileşenlerimiz için, kullanıcının başlatma, sıfırlama ve tahmin için kullanıcı girdileri olarak hareket etmesi için üç düğme ile kullanıcının geçiş yapması için gerekli 0-6 anahtarlarını kullandık. Yedi segmentli ekran ve saat bileşenleri de önceki laboratuvarlardan yaptığımız ancak bu projeye uyması için değiştirmek zorunda kaldığımız bileşenlerdir.
Bu projeyi yukarıda gösterilen altı modüle ayırarak tüm gizmoyu birçok çalışma parçasına ayırdık, ancak bunların bağlanma şekli oldukça karmaşıktır ve ekteki kara kutu resminden gösterilmektedir.
Oyun devam ederken, kullanıcıyı hangi kullanıma geçeceğini bildirmek için 7 LED yanıyor ve oyun bittiğinde LED'leri de yanıp sönecek şekilde programladık.
Girişler: anahtarlar (8 bit), Clk, reset, start, tahmin
Çıkışlar: katotlar (7 bit), anotlar (4 bit), LED'ler (7 bit)
9. Adım: Karşılaşılan Ekstra Sorunlar
Bu oyunda sadece yedi anahtar kullanılmasına rağmen, kod 8 bitlik bir sayı olarak ayarlamıştır. Bunu, bu 8 biti rastgele sayı üretecinden oluşturduğumuz 8 bitlik sayı ile karşılaştıracak daha uygun bir karşılaştırıcıya sahip olmak için yaptık.
Skor da ilk başta bizi biraz zorladı çünkü FSM skor durumundayken bir puan artıracak şekilde ayarladık; ancak bunun yerine olan şey, devlet var olduğu sürece puanın artmaya devam etmesi ve bize başa çıkamayacağımız makul olmayan yüksek bir puan vermesiydi. Bunu, 8. adımdaki kodda görüldüğü gibi, saatin yükselen kenarıyla senkronize edilmiş bir darbe sinyali ekleyerek düzelttik.
Son olarak, geri sayım sırasında yedi segmentli ekranımızı bozacağı için zamanlayıcının hata ayıklaması çok zaman aldı, bu yüzden 60'tan geriye saymaktan 0'dan yukarıya doğru değiştirmek zorunda kaldık.
Adım 10: Kaynak Dosyaları ve Kısıtlamalar
Kendinizinkini oluşturmak yerine kaynak dosyalarımızdan çekmeyi tercih ederseniz, işte buradalar. Ayrıca, kısıtlama dosyası dahildir.
Önerilen:
Mikro İkili Saat: 10 Adım (Resimlerle)
Mikro İkili Saat: Daha önce ikili kullanarak sınırlı görüntüleme alanından yararlanan bir Eğitilebilir (İkili DVM) oluşturmuş olmak.
NTP Sync ile Gerçek İkili Saat: 4 Adım
NTP Sync ile Gerçek İkili Saat: Gerçek bir ikili saat, günün saatini, geleneksel bir "ikili saat"in aksine, tam bir günün ikili kesirlerinin toplamı olarak görüntüler. saati, saat/dakika/saniyeye karşılık gelen ikili kodlanmış ondalık basamaklar olarak görüntüler. Gelenek
BigBit İkili Saat Göstergesi: 9 Adım (Resimlerle)
BigBit İkili Saat Ekranı: Bir önceki Instructable'da (Microbit Binary Clock), ekran oldukça küçük olduğu için proje taşınabilir bir masaüstü cihazı olarak idealdi. Bu nedenle, bir sonraki versiyonun bir şömine veya duvara monte versiyon olması, ancak çok daha büyük olması uygun görünüyordu.
4-bit İkili Hesap Makinesi: 11 Adım (Resimlerle)
4-bit İkili Hesap Makinesi: Bilgisayarların temel düzeyde nasıl çalıştığına ilgi duydum. Ayrık bileşenlerin kullanımını ve daha karmaşık görevleri gerçekleştirmek için gerekli devreleri anlamak istedim. Bir CPU'daki önemli bir temel bileşen,
İkili Anahtar Oyunu: 6 Adım
İkili Anahtar Oyunu: Ben Heck'in Hex Oyunundan Esinlenerek Bu, arkadaşlarıma ikili sistemi öğretmek için yaptığım bir ikili oyundur. Sonunda kendimi uyanık tutmak için sınıfta bununla oynuyorum. Ekrandaki rastgele denary(0-255) veya onaltılık(0-ff) değerleri ikiliye çeviriyorsunuz ve sonra biz