Bu seride, Robin sıfırdan bir Z80 bilgisayarı oluşturuyor. 1 ve 2 numaralı kısımları yakalayın.
DONANIM
2 100R Dirençli (R1, R2)
4 1K Direnci (R3, R5, R6, R7)
1 5.6K Direnç (R4)
2 100nF Kondansatör (C2, C3)
1 10 uF Kapasitör (C1)
2 1N5817 Diyot (D6, D5)
4 LED'ler (D1, D2, D3, D4)
1 7805 (U4)
1 74HC4040 (U1)
1 PIC16F1516 (U3)
1 EEPROM (örneğin, KM2817) 28 DIP Geniş (U2)
1 FTDI modülü (5 V)
PICKIT3 veya eşdeğeri PIC programcısı
MPLAB X
XC8
Visual Studio 2012 veya daha iyisi
Nasıl çalışır
Bu proje üç bölümden oluşmaktadır: fiziksel devre, mikrodenetleyici yazılımı ve programlanan ROM yongasına veri aktarmamızı sağlayan VB.NET pencereleri uygulaması.
Devre
Programlayıcı devresi, dirençler dahil olmak üzere yalnızca birkaç IC ve pasif bileşenlerden oluşur., kapasitörler ve LED'ler. Ana kontrolör, seri bağlantı, veri aktarımı ve hafıza kontrolü yapan PIC16F1516'dır. IC belleği çok sayıda adres pimi gerektirdiğinden, mikrodenetleyicideki birçok IO pimini kullanmak yerine geçerli bellek adresini göstermek için bir 74HC4040 sayacı kullanılır. Bu, doğru adrese (Saat ve Sıfırlama) ulaşmak için yalnızca iki pimin gerekli olduğu anlamına gelirken, mikrodenetleyicinin belirli bir adrese atlayamayacağı anlamına gelir. Bunun yerine, kontrol cihazının belirli bir adrese ulaşması gerekiyorsa, sayacın sıfırlanması ve ardından doğru değere ulaşılana kadar saatin sıfırlanması gerekir. Neyse ki bizim için, EEPROM'u sıralı olarak programlıyor ve okuyoruz, bu yüzden buna gerek yok. 4040 ve bellek IC’nin yanı sıra, sadece diğer bileşenlergösterge ışıkları 7805 üzerinden programcının mevcut durumunu ve basit güç düzenlemesini göstermek için.
Mikrodenetleyici Kodu
Bütün iken kod için mikrodenetleyiciaçıklanmayacak (büyüklüğü nedeniyle), çekirdek parçalar ele alınacaktır. İlk başladığında,mikrodenetleyiciUART portunu etkinleştiren konfigürasyondan geçer, kesmelere izin verir ve dahili osilatörü maksimum frekans için (yaklaşık 16MHz) yapılandırır. İlk konfigürasyondan sonra, gerekli değişkenlere gerekli değerler atanır ve genel kesintiler etkinleştirilir. Her şey doğru ayarlandığında, mikrodenetleyici bir bağlantı isteği döngüsüne oturmaktadır; bu, ana bilgisayar programının (VB.NET uygulaması) seri port üzerinden 0x01 göndermesini bekleyen bir döngüdür. Ana program bağlanmayı istediğinde, mikrodenetleyici, ana makineye bağlantının kabul edildiğini bildiren bağlantı onayı olan 0x01'i geri gönderir.
Bu noktada, program, program moduna girmeyi bekleyen bir döngüde oturur (0x02 gönderilerek yapılır) ve sonra EEPROM yongasına yazılacak bayt aktarıldığında (FF veya 3C gibi iki ASCII karakter şeklinde) Yazılım iki ASCII karakterini tek bir bayta dönüştürür ve baytı EEPROM'a yazmaya devam eder.
Kesme yordamı ayrıca ana bilgisayar programı tarafından gönderilen belirli komut baytları için belirli yordamlar içerir. Örneğin, 0x03 önemli olan aktarımın sonunu gösterir, çünkü “verileri hazır” olarak işaretler, böylece EEPROM'a yazılması gereken bayt yazılabilir. 0x04 adlı başka bir komut, yazmadan önce yapılan bellek adres sayacını sıfırlar, böylece program EEPROM'da doğru yerde saklanır. 0X05 mikrodenetleyiciye programlama dizisinin tamamlandığını bildirirken, 0x06 mikrodenetleyiciyi geçerli adreste bulunan verileri okumaya ve ardından sayacı bir sonraki bellek adresine işaret edecek şekilde artırmaya bildirir.
Ev Sahibi Programı
ana bilgisayar programıVB.NET ile yazılmış, Z80 programlarımızı EEPROM'a aktarmamızı sağlayan bir form uygulamasıdır. Programın ana kontrolleri Bağlan, Programla, Oku ve BIN dosyası yükle düğmeleridir. Mesajları gösteren sol pencerelerle ve okunan verileri ve programlanacak yüklü bir BIN dosyasının içeriğini gösteren sağ pencerelerle bilgileri görüntülemek için iki zengin düzenleme kutusu vardır.
Bağlan düğmesine tıklandığında, VB.NET programı işletim sistemi tarafından bulunan tüm seri portlar arasında geçiş yapar ve bayt 0x01 her seri portuna gönderilir. 0x01 ile yanıt veren bağlantı noktası bizim programcımızdır ve böylece 0x01 alındığında, programımız başarılı bir bağlantımız olduğunu bilir.
BIN dosyası yükle düğmesi Z80 programımızı yüklememizi sağlayan (tniASM kullanılarak oluşturulmuş) bir açık dosya iletişim kutusu açar. Yüklendikten sonra, program ikili verileri bir bayt dizisine akıtır, ardından dosyanın içeriğini zengin görünüm kutusu (sağdaki büyük pencere) ikili görünümde görüntüler. Ancak, bayt verileri insan tarafından okunabilen bir formatta olmadığından, bayt verilerini doğrudan zengin düzenleme kutusuna aktaramayız ve bu nedenle verileri ASCII'ye dönüştürmek zorundayız. Bu, baytı ikiye bölen ve 0 ve F gibi karakterlere dönüştürmek için ofsetler ekleyerek yapılır.
Program butonuna tıkladığınızda, VB.NET programı, programlayıcı devresindeki adres sayacını sıfırlayarak başlar. Bu, 0x0000 adresinden program yapmamızı sağlar. Sıfırlandıktan sonra, uygulama verileri seri üzerinden yayınlamaya başlar, ancak bayt değerlerini insan tarafından okunabilen bir ASCII formuna dönüştürmeden önce değil. Bu, 0x00 ve 0x06 arasındaki veri değerlerinin, gönderilecek ham bir 0x00 değerine sahip olmamız durumunda programcının kafasını karıştıracak belirli komutlar olması nedeniyle yapılır. Bu nedenle, mikrodenetleyici iki ASCII byte aldığında (tek bir byte'ı temsil eder), onları daha sonra EEPROM'a programlanan tek byte'a dönüştürür.
Oku düğmesi bir kez tıklandığında, EEPROM programlayıcısındaki adres sayacını sıfırlar ve bayt istemeye başlar (komut 0x06). Mikrodenetleyiciden akan veriler ASCII kodlu değildir, çünkü ana program komut baytları kullanmaz, ancak baytlar hala insan tarafından okunabilen bir formata dönüştürülür, böylece BIN zengin metin kutusunda görüntülenebilirler. Z80 bilgisayarımız bir 256 bayt ROM alanı kullandığından, okuma baytlarının sayısının 256 (0 ile 255 arasında) olduğunu unutmayın. Bununla birlikte, bu, 162 hattında bulunan for döngüsü değiştirerek kolayca değiştirilebilir.
Ana bilgisayar uygulaması tam özellikli bir EEPROM programcısı olmaktan çok uzaktır, ancak bu temel kurulum EEPROM'ları kendi Z80 kodunuzla programlamanızı sağlar. Ekleyebileceğiniz özellikler arasında doğrulama, birden fazla cihaz, ayrı ayrı bayt düzenleme ve ofset kontrolü bulunur.
tniASM
Bilgisayarımız için Z80 programlarını birçok farklı araçla yapabilirsiniz, ancak şahsen en yararlı bulduğum program tniASM'dir. Bu assembler kullanımı ücretsizdir ve buradan indirebilirsiniz . Ancak, bu program yapmaya çalışırken işleri biraz daha karmaşık hale getiren bir komut satırı programıdır, bu yüzden bu projede yer alan derleme yarasa dosyası ile tniASM'dir. Tek yapmanız gereken Z80 assembler kodunuzu main.asm dosyasına (kaynakta bulunur) yapıştırmak ve bir kere yazıldığında Complie.bat programını çalıştırın. Bu, Bin klasöründe bulunan ROM.bin adlı bir bin dosyası çıkarır ve bu dosya daha sonra VB.NET programımıza yüklenir. Bir sonraki projede, donanımımızı test etmek için bazı temel Z80 programlarını yapmaya çalışacağız!
İnşaat
Bu projeyi, şerit, breadboard, matrix board ve PCB'ler gibi birçok farklı devre yapım tekniğini kullanarak inşa edebilirsiniz. Bu proje için birkaç nedenden dolayı bir PCB kullandım. Birincisi, kablolama tam anlamıyla eğlenceli değildir ve ikinci olarak da kullanılan yüzey montajı 7805'ten dolayı. PCB tasarımı tek taraflı olduğu için, teller, kablolar için gereklidir, bununla birlikte, kabloların ana kütlesi PIC ile EEPROM arasında veri aktarımı yapan veri yolu içindir.
Bu proje aynı zamanda devre ve bilgisayar arasında veri aktarmak için bir FTDI'ya ihtiyaç duyduğundan, bir proje kutusu ideal olacaktır. Bununla birlikte, gösteri uğruna, devre tek bir tahta parçasına monte edilmiştir. EEPROM IC tutucu prototipleme için yeterli bir 28 DIP soketidir, ancak bu programlayıcıyı sık kullanacaksanız, sıfır takma kuvveti (ZIF) soketi kullanmak isteyeceksiniz. ZIF soketim olmadığından ve EEPROM'ları programlamak için başka bir programcım olduğundan standart bir soket kullandım. Yine de tamamen ideal değil, çünkü paralel bir porta ihtiyacı var ve bunlar artık oldukça nadir.
No comments:
Post a Comment