İçindekiler:

Temel Elektronik Anlayışlı Bir Bilgisayar Oluşturun: 9 Adım (Resimlerle)
Temel Elektronik Anlayışlı Bir Bilgisayar Oluşturun: 9 Adım (Resimlerle)

Video: Temel Elektronik Anlayışlı Bir Bilgisayar Oluşturun: 9 Adım (Resimlerle)

Video: Temel Elektronik Anlayışlı Bir Bilgisayar Oluşturun: 9 Adım (Resimlerle)
Video: Bilgisayarların İçinde Ne Var? - Bilgisayar Donanımları (3D) 2024, Temmuz
Anonim
Temel Elektronik Anlayışıyla Bir Bilgisayar Oluşturun
Temel Elektronik Anlayışıyla Bir Bilgisayar Oluşturun

Hiç gerçekten akıllıymış gibi yapıp kendi bilgisayarınızı sıfırdan kurmak istediniz mi? Minimum düzeyde bir bilgisayar yapmak için ne gerektiği hakkında hiçbir şey bilmiyor musunuz? Bazı IC'leri doğru bir şekilde bir araya getirmek için elektronik hakkında yeterince bilginiz varsa kolaydır. Bu talimat, o kısımda iyi olduğunuzu ve ayrıca birkaç başka şey olduğunu varsayacaktır. Ve değilse, breadboarding/prototiplemenin nasıl yapıldığını biliyorsanız, takip etmek hala çok zor olmamalı. Bu talimatın amacı, nasıl çalıştıkları hakkında pek bir şey bilmeden size çalışan bir "bilgisayar" sağlamaktır. Sizin için çok kısa bir program sağlamanın yanı sıra kablolama ve programlama temellerini ele alacağım. Öyleyse başlayalım.

Adım 1: Parçalar ve Malzemeler

Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler
Parçalar ve Malzemeler

Bir "bilgisayar" şunları gerektirir: güç, giriş, işleme, bellek ve çıkış. Teknik olarak bunların hepsine sahip olacağız. Bunları bu sırayla ele alacağım.

Güç için 5 voltluk (buradan sonra 5V olarak etiketlenmiştir) bir kaynağa ihtiyacınız olacaktır. Devrenizdeki parçaları yanlışlıkla kızartmamanız için düzenlenmiş bir kaynak olması önerilir. Girişimiz butonlar olacak. İşleme kendi kendini açıklayıcıdır; işlemci kullanıyoruz. Bellek yalnızca ROM'dan oluşacaktır. İşlemcinin dahili genel amaçlı registerleri RAM olarak kullanmak için yeterli olacaktır. Çıkış LED'ler olacaktır.

1 LM7805C - 5V Regülatör

1 ZYLOG Z80 - İşlemci

1 AT28C64B - EEPROM

1 74LS273 - Sekizli D Parmak Arası

1 74HC374E - Sekizli D Parmak Arası

3 CD4001BE - Dörtlü NOR Kapısı

1 NE555 - Saat Jeneratörü

2 1K Ohm Direnç

1 10K Ohm Direnç

1 10K Ohm Direnç Ağı; 8 Bussed VEYA 8 Ek 10K direnç

1 1uF Kapasitör

1 100uF Kapasitör

1 Basma Düğmesi

1 3x4 Düğme Matrisi VEYA 8 Ek Düğme

8 LED - Renk Seçimi Önemli Değil

8 330 Ohm Dirençler veya Direnç Ağı

1 Gerçekten Büyük Breadboard veya Birden Çok Küçük Breadboard

Çok ve Çok Tel

Şemamda kurulu bir SRAM çubuğum var. Bunun için endişelenmenize bile gerek yok. Sadece gerçek devremi doğru bir şekilde yansıtmak için şemaya ekledim ve ileride kullanmak üzere devreye ekledim. Ayrıca şemaya bir dörtlü OR kapısı (74LS36) eklenmiştir. Kullanılmayan iki geçidin girişleri VCC'ye bağlanır ve çıkışları yüzer halde bırakılır (çizilmez). Ayrıca, güç devresindeki iki kapasitör çizilmemiş veya yukarıda listelenmemiş.

Tüm devre tahtasını beslemek için regüle edilmiş 12V'yi 5V regülatöre besliyorum. Oldukça ısınıyor, bu yüzden soğutmak için bir soğutucu ekledim. Regülatörü beslemek için 12V'den az kullanırsanız (en az 7V kullanın), daha soğuk çalışmalıdır.

Z80, sihrin gerçekleştiği yerdir. ROM'da depolanan talimatları alır ve yürütür. EEPROM, programımızı işlemcinin yürütmesi için saklar.

Veri yolundaki verileri kendi çıkışına bağlayan çıkış cihazımız olan sekizlik flip-flop. Bu, kullanıcının/izleyicinin gördüklerini değiştirmeden, talimat başına birden çok kez yapılan çok önemli bir adım olan veri yolundakileri değiştirmemize olanak tanır. Flip-flop, çıkış LED'lerini yakmak için gereken akımı sürdüremez, bu nedenle LED'leri sürmek için 8 veri hattını tamponlama görevi gören dörtlü NOR geçit yongalarından ikisini besler. Kapıların çıkışları ters olduğu için LED'leri de ters çevrilecek şekilde kablolamamız gerekiyor ama o noktaya geldiğimizde o konuya geleceğiz. Diğer NOR yongası, mantık kod çözme için kullanılır, ancak yalnızca üç kapı kullanılır.

Giriş için kullanılan sekizlik parmak arası terlik aslında aynı şeydir. Çıkış flip-flop'ları çıkışlarını ya yüksek ya da düşük tutar, böylece veri yolunu sürmek için kullanılamaz; veri yolu üzerinde veri tutacaktır. Giriş için kullanılan flip-flop, /RESET pinini /EN ile değiştirir; bu, çipin çıkışlarını (ve çipten) az çok keser, böylece veri tutmaz (üç durumlu çıkışlar).

Adım 2: Güç, Saat ve Sıfırlama Devrelerinin Kablolanması

Güç, Saat ve Sıfırlama Devrelerinin Kablolanması
Güç, Saat ve Sıfırlama Devrelerinin Kablolanması
Güç, Saat ve Sıfırlama Devrelerinin Kablolanması
Güç, Saat ve Sıfırlama Devrelerinin Kablolanması
Güç, Saat ve Sıfırlama Devrelerinin Kablolanması
Güç, Saat ve Sıfırlama Devrelerinin Kablolanması

NOT: Tüm parçalar için önce güç raylarını kablolayın. Kablolamayı unutmanız gereken her şey arasında, çiplerin unutulan güç bağlantılarından kurtulma olasılığı çok daha düşük olacaktır.

Güç devresi, kablolaması en basit devredir, ardından sırasıyla sıfırlama ve saat devreleri gelir. Resimde, 12V girişi en sağdaki çoklu prizde. Altında sarı bir tel saklayan kahverengi tel, 12V'yi regülatöre besler. Regülatörün çıkışı, devre tahtasındaki diğer tüm anahtarlı uzatma kablolarını besler ve her anahtarlı uzatma kablosu ortak bir zemini paylaşır çünkü elektronik böyle çalışır.

İşlemcinin çalışması için bir saat devresi gerekir. Onsuz, orada başlatılmış durumunda oturacak ve hiçbir şey yapmayacaktır. Saat, işlemcinin dahili kaydırma kayıtlarını çalıştırır, böylece bir şeyler yapmak için sinyaller üretebilir. Herhangi bir saat girişi, basit bir direnç ve basma düğmesi bile yapacaktır. Ancak talimatları yürütmek için birçok saat döngüsü gerekir. Çıktıya yazma talimatı kendi içinde 12 döngü sürer. Muhtemelen orada oturmak ve kodun sadece bir döngüsünü elde etmek için bir düğmeye 100'den fazla kez basmak istemezsiniz (gerçek sayılar talimatın sonundadır). NE555 bunun için var. Anahtarlamayı sizin için yapar ve bunu (nispeten) hızlı bir oranda yapar.

Herhangi bir şeyi kablolamaya başlamadan önce, devam edip bileşenlerinizin panoya nasıl yerleştirilmesini istediğinizi anlamak isteyebilirsiniz. Saat devrem, diğer bileşenlerin yolundan çıkması için kartın altına yerleştirildi. Zamanlayıcı ile temel bir saat yapmayı bildiğinizi varsayacağız. Bunu yapmazsanız, "555 Kararsız" a bakmak ve bir öğreticiyi takip etmek isteyeceksiniz. 5V rayı ile zamanlayıcının (R1) pim 7'si ve pim 7 ile pim 2 (R2) arasındaki 10K arasında gitmek için 1K direnci kullanın. Zamanlayıcının çalışabilmesi için sıfırlama pimi, pim 4'ü 5V rayına bağladığınızdan emin olun. Saatin gerçekten çalıştığını doğrulayabilmem için çıkışıma bir LED koydum, ancak buna gerek yok.

NE555 ile başka bir seçenek de onu NOT kapısı olarak ayarlamak ve çıkışı girişe geri bağlamak için 1K direnç kullanmaktır. Bunu yapmak için genellikle 3 zamanlayıcı kullanılması önerilir, ancak sadece 1 tanesinin iyi çalışması gerektiğini buldum. Biliniz ki bunu yaparsanız çok yüksek hızda salınım yapacak ve çıkış ledlerinin yanıp söndüğünü söylemek çok zor hatta imkansız olacaktır. Bu kuruluma "halka osilatörü" denir.

Saati henüz işlemciye bağlamadığımızı unutmayın. Biz sadece onu hazırlıyoruz. Ayrıca görüntüdeki saatin hemen üzerindeki mantık yongasına da dikkat edin. Çok sonra eklendi ve yerleştirmek için kalan tek yarı makul nokta buydu. RAM/ROM seçimi için kullanılır. Bu talimat, RAM'i yok sayar, bu nedenle bu çip kartınızda bulunmaz.

Şimdi sıfırlama devresini bağlarız. Öncelikle bunun için tahtanızda bir yer bulmanız gerekir. Saatin hemen yanında seçtim. Düğmenizi panoya ekleyin. Düğmenin bir tarafını 5V rayına bağlamak için 1K direnç kullanın. RESET pinlerimiz aktif düşük, yani onları yüksek tutmamız gerekiyor. Direnç bunun için var. Bu bağlantı aynı zamanda sıfırlama pinlerinin bağlandığı yerdir. Düğmenin diğer tarafı doğrudan yere gider. Açılışta sıfırlama istiyorsanız, bu bağlantıya 10uF kapasitör de ekleyin. İşlemci ve flip-flop içindeki sıfırlama devresini etkinleştirmek için sıfırlama pimlerindeki voltajı yeterince düşük tutacaktır.

Adım 3: Z80'i kablolama

Şimdi işin özüne geliyoruz. Z80 olan canavarı bağlayacağız. Kartımda, Z80'i, sıfırlama devresi ile kartın aynı bölümünün en üstüne yerleştirdim. Daha önce belirtildiği gibi, önce güç raylarını kablolayın. 5V soldaki pim 11'e gider ve toprak bir pim aşağıda ancak sağdadır. Çipin tek genişliğini de fark etmiş olabilirsiniz. Breadboard'da bir tarafta 3, diğer tarafta 2 açık konektöre sahip olmanıza neden olacaktır. Bunu yapmayı seçerseniz, yalnızca ek şeyler bağlamayı daha az uygun hale getirir.

Aşağıdaki pin numaraları - bir IC'deki pinleri nasıl sayacağınızı bildiğinizi varsayıyorum - kullanılmayan girişlerdir ve 5V rayına bağlanmalıdır: 16, 17, 24, 25.

Saatimizi hatırlıyor musun? Çıkışı z80'deki pim 6'ya gider. Sıfırlama devresi pim 26'ya bağlanır. Kartta diğer bileşenler olmadan, z80'in kendisinin kablolaması ile size ulaşabildiğim bu kadar. Daha fazla kablolama daha sonraki adımlarda yapılacaktır.

Bu talimatı yazmayı düşünmeden önce devreyi zaten kurmuş olduğum için, bir sonraki adıma kadar resmi erteleyeceğim.

Adım 4: ROM'u Kablolama

ROM'u kablolamak
ROM'u kablolamak

NOT: Hala programlanması gerekiyorsa, kartı gerçekten tahtaya yerleştirmeyi erteleyebilirsiniz (daha fazlası için).

ROM için, sağdaki Z80'in yanına yerleştirdim ve ayrıca devre tahtasında bir pim aşağı kaydırdım. Bu, adres veri yolunu doğrudan bağlamama izin verdi, ancak daha sonraları. AT28C64B bir EEPROM'dur, yani bazı pinleri açıp kapatarak birden çok kez programlanabilir. Devredeyken EEPROM'umuzun yanlışlıkla kendini yeniden programlamasını istemiyoruz. Bu nedenle, güç raylarınızı bağladıktan sonra, yazma özelliğini tamamen devre dışı bırakmak için pim 27'yi (/WE) 5V rayına bağlayın.

Programım çok küçük, sadece alt 5 adres hattının (A0-A4) bağlanmasına ihtiyacım vardı, ama yine de A5, A6 ve A7'yi bağladım, böylece ek iş olmadan daha büyük programlar yazabilirim. Ek adres satırları (A8-A12), kayan girişlerden daha yüksek adreslere istenmeyen erişimi önlemek için doğrudan toprağa bağlanır. Toprağa bağlı kullanılmayan adres girişleri ve 5V'a bağlı yazma kontrolü ile, geri kalanı kablolamak oldukça basittir. İşlemcide A0'ı bulun ve ROM'daki A0'a bağlayın. Ardından işlemcide A1'i bulun ve ROM'daki A1'e bağlayın. Tüm adresleri birbirine bağlayana kadar bunu yapın. Resimde, ROM'a giden adres yolum mavi kablolama ile yapılıyor. RAM'e giden adres yolu kırmızı kablolama ile yapılır. Bu kabloların tümü, bir devre tahtası kablolama kitinde geldikleri için önceden kesilmiş ve soyulmuştu ve bu kablolama için mükemmeldi.

Adresleri bağladıktan sonra (buna adres yolu denir), D0 etiketli pinler için aynı şeyi yapın, ardından D1, D2, vb. Bunu tüm veri pinleri (D0 - D7) için yapın ve veri yolu kablolu. ROM'u kablolamayı neredeyse bitirdik. ROM'un /CE (yonga etkinleştirme) pinini bulun ve onu işlemci pin 19, /MREQ (bellek talebi) ile bağlayın ve ardından ROM'un /OE'sini (çıkış etkinleştirme) bulun ve onu işlemci pin 21, /RD'ye bağlayın (oku). Artık işimiz bitti. Tüm bunlar atlama kabloları ile yapılır çünkü işlemcinin diğer tarafına geçmeleri gerekir ve bir devre tahtası böyle düzgün kabloları kullanmak için yeterli alan sunmaz.

Adım 5: Çıkışı Kablolama

Çıkış Kablolaması
Çıkış Kablolaması
Çıkış Kablolaması
Çıkış Kablolaması

Doldurulmadığından, çıktı için Z80'in solundaki pano bölümünü seçtim. Parmak arası terliği oraya yerleştirin ve güç raylarını bağlayın. Pin 1, /MR (sıfırlama) doğrudan işlemcinin sıfırlama pinine bağlanabilir, ancak 5V rayına bağlı bırakabilirsiniz. Bunu yapmak, yalnızca ilk yazmaya kadar önemsiz verileri göstermesine neden olur. Çipin 11. pin üzerinde nasıl bir saat girişi olduğuna dikkat edin. Bu giriş, pin yükseldiğinde etkinleştirilmesi nedeniyle gariptir. Ayrıca bu pinin işlemciyi çalıştıran saatle aynı OLMADIĞINI da unutmayın. Bu saat, veri yolunda belirtilen verileri kilitler.

ROM'daki D0 - D7'yi işlemcideki aynı pinlere nasıl bağladığımızı hatırlıyor musunuz? Bu çip için de aynısını yapın. D0'ı veri yolunda D0'a gider vb. "Q" ile başlayan pinler çıkışlardır. Bunları bağlamadan önce, daha fazla çip eklememiz gerekiyor. Dörtlü NOR geçitlerini kullandım çünkü bir tüpüm var ve zaten bir tanesine ihtiyacım vardı, ancak doğru şekilde bağlarsanız herhangi bir çip işe yarayacaktır. Tüm kapılardaki bir girişi toprağa bağlayabilir ve diğer girişleri de girişler olarak kullanabilirdim, ancak basitlik için her iki girişi de birbirine bağlamayı seçtim.

Jumper'lar olmadan doğrudan kablolamayı kolaylaştırmak için çipleri parmak arası terliğin altına yerleştirdim, ancak bu noktada kablo azalıyordu, bu yüzden sonunda gerçekten önemli değildi. Flip-flop üzerindeki Q0, Q1….. Q7, bireysel kapılardaki girişlere gider. Her pakette/çipte 4 kapı ile 2 pakete ihtiyacım vardı ve tüm kapıları kullandım. LED'leri bu şekilde arabelleğe almaya gerek kalmadan çalıştırabilen bir flip-flop sürümü bulursanız, bu iki yongaya gerek yoktur. Kapıları, ters çevrilmiş çıkışları (AND/OR/XOR) olmayan bir arabellek olarak kullanırsanız, LED'leri beklediğiniz gibi bağlayabilirsiniz. Benimle aynı parçaları kullanıyorsanız ve/veya çıkışlar ters çevrilmişse, LED'ler aşağıda açıklandığı gibi kablolanmalıdır. İlk görüntü, çıktının IC bölümünü gösterir.

LED'leri pozitif (Anot) 5V raya bağlamak için 330 Ohm dirençleri kullanın ve negatifi (katot) kapıların çıkışına bağlayın. İkinci resimde, her biri yalnızca beş dahili dirence sahip iki direnç veriyolu kullandığımı görebilirsiniz. LED'leri bu şekilde bağlamak, çıkış kapalıyken yanmalarını sağlayacaktır. Bunu yapıyoruz çünkü giriş açıkken çıkış kapalı. Flip-flop kontrolünden çıktılarınızın hangi kapıları takip ettiğinizden kesinlikle emin olun. LED'leriniz dağılmadıkça veya sıraları anlamsız olmadıkça, izini kaybetmek daha sonra kendinize çıkışın neden yanlış olduğunu sorduğunuzda kafa karışıklığına neden olabilir.

Adım 6: Girişin Kablolanması

Girişin Kablolanması
Girişin Kablolanması

O 74HC374 parmak arası terliği al ve bir yere koy. Benimki, Z80'in altında, tahtanın altına doğru bir yerdeydi. D0'ı D0'a ve D1'i D1'e en son ne zaman bağladığımızı hatırlıyor musunuz? Bu sefer Q0'ı D0'a ve Q1'i D1'e bağlarız. Neyse ki bu sefer herhangi bir tampon çipi eklemek zorunda değiliz, haha. Bunun yerine, her bir "D" pinine (D0-D7) bir 10K Ohm bağlayacağız ve aynı pinlere ve 5V rayına toprak ve ardından bir düğme bağlayacağız. Veya bir direnç veriyolu kullanabilir ve parça sayınızı çok azaltabilirsiniz. Bir 3x4 düğme matrisi (matrisli çıktı olmadan!!) da yardımcı olacaktır. Resim, bağlantı mantığıyla birlikte giriş devresinin tamamını gösterir (bu kısım sonraki kısımdır).

Adım 7: Tutkal Mantığı

Bağlamamız gereken son bir şey var. Buna "tutkal mantığı" denir, çünkü her şeyin işe yaraması için kontrol sinyallerinin kodunu çözmek için kullanılır; devreyi bir arada tutan şeydir. İşlemci çıkışa veri yazmak istediğinde, hem /IORQ hem de /WR (sırasıyla 20 ve 22) azalır ve gönderilen veri veri yolunda onaylanır. Her iki parmak arası terlik üzerindeki saat pini yüksek aktiftir, yani pin yüksek bir sinyal aldığında veriler kilitlenir. Bir NOR geçidi kullanırız ve geçidin bir girişine /IORQ ve diğer girişe /WR bağlarız. Her ikisi de yüksek olduğunda, yani IO devreleri seçilmediğinde veya bir yazma işlemi gerçekleştirilmediğinde, flip-flop saatini besleyen çıkış düşük kalır. Her iki giriş de düşük olduğunda ve yalnızca çıkış yüksek olduğunda ve flip-flop verileri kilitlediğinde.

Şimdi giriş flip-flopunu bağlamamız gerekiyor. Saat pimini öncekiyle aynı şekilde ancak /IORQ ve /RD kullanarak bağlayabiliriz. Ancak diğer parmak arası terliklerin aksine, yalnızca /IORQ ve /RD düşük olduğunda düşük alınması gereken bir /OE pinimiz de var. Bir OR kapısı kullanabiliriz. Ya da saat için zaten sahip olduğumuz sinyali alıp elimizdeki iki ters çevirme kapısından biriyle tersine çevirebiliriz. Bu talimatı belirttiğimde, bir VEYA geçidim yoktu, bu yüzden ikinci seçeneği kullandım. İkinci seçeneği kullanmak, zaten herhangi bir ek parça eklemem gerekmediği anlamına geliyordu.

Adım 8: Programlama

Kablolamanız doğruysa ve açıklamam açıksa, geriye kalan tek şey ROM'u programlamak. Bu konuda gitmenin birkaç yolu var. Kolay yolu seçip Digikey'den yeni bir çip sipariş edebilirsiniz. Parçayı sipariş ederken, bir HEX dosyası yükleme seçeneğiniz olacak ve onlar bunu göndermeden önce programlayacaklar. Bu talimata ekli HEX veya OBJ dosyalarını kullanın ve postaya ulaşmasını bekleyin. Seçenek 2, Arduino veya benzeri bir programcı oluşturmaktır. Bu rotayı denedim ve belirli verileri doğru şekilde kopyalayamadı ve bunu anlamam haftalarımı aldı. Elle programlamak ve adres ve veri hatlarını kontrol etmek için anahtarları çevirmek olan seçenek 3'ü bitirdim.

Doğrudan işlemcinin OP Koduna dönüştürüldüğünde, bu programın tamamı yalnızca 17 baytlık adres alanında kalır, bu nedenle elle programlama çok kötü değildi. Program, genel amaçlı B registerına 00 değerini yükler. Register B, önceki eklemenin sonucunu saklamak için kullanılır. A kaydı matematiğin gerçekleştiği yer olduğundan, verileri depolamak için kullanmayacağız.

A kaydından bahsetmişken, girdiyi okuyan ve okunan verileri A'da saklayan bir IN komutu uyguluyoruz. Ardından B kaydının içeriğini ekliyoruz ve sonucu çıkarıyoruz.

Bundan sonra, A kaydı B kaydına kopyalanır. Ardından bir dizi atlama komutu yaparız. Tüm atlamalar adres satırlarının alt baytını gösterdiğinden ve atlama komutunun üst baytı ikinci argümanda verildiğinden ve "00" olduğundan, her atlamayı bir NOP izlemeye zorlayabiliriz. Bunu, yanlışlıkla girişi önlemek için çıktıyı gösterme ve girdi okuma arasında zaman tanımak için yapıyoruz. Her atlama on saat döngüsü kullanır ve her NOP dört kullanır. Döngü beğeninize göre çok uzun sürerse, saat hızını artırabilir veya bir daha az atlama kullanmak için yeniden programlayabilirsiniz.

9. Adım: Test Etme

Her şeyi doğru şekilde bağladıysanız ve ROM'unuz doğru bir şekilde programlandıysa, atmanız gereken son bir adım var: fişini takın ve çalışıp çalışmadığını görün. Bir düğmeye basın ve birkaç saniye bekleyin. Programın ilk döngüsüne ulaşması 81 saat döngüsü ve her döngü 74 saat döngüsü alır.

Çalışmıyorsa, kısa devre ve bağlı olmayan pimler (açılmalar) ve diğer kablolama sorunlarını kontrol edin. Açılışta sıfırlamayı devre dışı bıraktıysanız, işlemci herhangi bir şey yapmadan önce manuel sıfırlama yapmanız gerekecektir. Çalışıp çalışmadıklarını görmek için LED'leri adres yoluna da bağlayabilirsiniz. Ben de bununla ilgili sorunlar yaşıyordum, bu yüzden onları doğrudan veri yoluna bağladım. Bu, ROM'un doğru okunup okunmadığı konusunda endişelenmeme gerek kalmadan işlemci ve ROM arasında neyin iletildiğini görmeme izin verdi, bu da zamanlama diyagramlarını gerektiriyordu ve ben sadece buna dahil olmak istemedim. İyi bir seçim olduğu ortaya çıktı çünkü sonunda yanlış saklanan sorunlu OP Kodlarını yakaladım.

Önerilen: