İçindekiler:

ANSI Terminalleri Koleksiyonu: 10 Adım
ANSI Terminalleri Koleksiyonu: 10 Adım

Video: ANSI Terminalleri Koleksiyonu: 10 Adım

Video: ANSI Terminalleri Koleksiyonu: 10 Adım
Video: Kıyıda Deniz Kızı Görüntülendi!!! Deniz Kızlarının Gerçek Olduğunu Söyleyen 10 İnsan ve Görüntüleri 2024, Temmuz
Anonim
ANSI Terminalleri Koleksiyonu
ANSI Terminalleri Koleksiyonu

Bu proje, Wordstar gibi eski moda bir kelime işlemciyi çalıştırmaya uygun bir LCD ekranda 80 sütun metni görüntülemenin bir yolu olarak başladı. 0,96 ila 6 inç arasında değişen çeşitli başka ekranlar eklendi. Ekranlar, tek bir PCB'nin yanı sıra bir Arduino çizimi/programı kullanır.

Bilgisayar bağlantısı için seri RS232 bağlantısı ve klavye için PS/2 soketi bulunmaktadır. Ekranlar, makul fiyatlarla yaygın olarak bulunanları temsil edecek şekilde seçildi. Gereken belleğe bağlı olarak, ekranlar bir Arduino Nano, Uno veya Mega kullanır.

Adım 1: Ekranların Özeti

Ekranların Özeti
Ekranların Özeti

480x320 çözünürlüğe sahip çeşitli ekranlar vardır. Bu, 9x5 yazı tipine ve 80 sütun metnine izin verir. 320x240 çözünürlüğe, 9x5 yazı tipine sahip çeşitli panolar ve ayrıca 80 sütun metnine izin verecek çok küçük 7x3 yazı tipi vardır. 160x120 ve 128x64 piksel boyutlarında daha küçük kartlar da vardır. Ayrıca 20x4 ve 16x2 metin ekranları ve son olarak 12x2 on dört segmentli yıldız patlaması ekran kartı.

Bazı ekranlar I2C kullanır, bazıları SPI'dir ve daha büyük ekranlar için daha hızlı güncelleme hızları için 16 bit veri yolu.

Daha küçük ekranlar Arduino Uno'yu kullanır. Daha büyük kartlar daha fazla belleğe ihtiyaç duyar ve bu nedenle bir Mega kullanın. Yıldız patlaması ekran kartı bir Nano kullanır.

Bu noktada fotoğrafların pek çok ekranın hakkını vermediğini söyleyebilirim. Minik beyaz oled ekran çok net ve parlak, bu da kameranın odaklanmasını zorlaştırıyor ve yıldız patlaması led ekran gerçek hayatta çok daha keskin görünüyor.

2. Adım: Donanım

Donanım
Donanım

PCB, mümkün olduğu kadar çok ekranla çalışacak şekilde tasarlanmıştır. Dört jumper kullanarak bir Mega ve Uno arasında geçiş yapmak kolaydır. 3V ile çalışan ekranlar için voltaj bölücü dirençler bulunmaktadır. I2C pinleri, ekranların doğrudan takılabilmesi için bir grup halinde çıkarılır. Terminal 9600 baud'da çalışır ve bu artırılabilirken, daha büyük ekranların çoğu bundan daha hızlı yeniden çizilmeyecektir. PS2 klavyesi bir DIN6 soketine takılır. USB klavyeler ayrıca ucuz bir adaptör fişiyle de çalışacaktır. D9'daki pin 2 ve 3'ü birleştirerek basit bir geri döngü testi yapabilirsiniz ve ardından klavyede yazılan karakterler ekranda görünecektir.

Bazı durumlarda bir PCB'ye ihtiyaç duyulmaz ve ebay'de bulunan önceden hazırlanmış modüllerle çalışan şeyleri elde etmek mümkündür, örneğin PS2 adaptörleri, RS232 adaptör kartları ve doğrudan arduino kartlarına takılan ekranlar.

Yıldız patlaması led ekran için ayrı bir pano da vardır - bu Eğitilebilir Tabloda daha sonra bakın.

3. Adım: Yazılım

Aşağıda Package.txt adlı bir dosya bulunmaktadır. Bu aslında bir.zip dosyasıdır, bu nedenle indirin ve yeniden adlandırın (Instructables zip dosyalarına izin vermez). Arduino çizimi/programı dahildir ve bu, tüm ekranlar tarafından kullanılan tek bir programdır. Ayrıca ekranların her biri için tüm.zip dosyaları vardır.

Programın başında bir dizi #define ifadesi vardır. Ekrana karşılık gelen yorumu kaldırın. Uno, Mega veya Nano'yu seçmek için Tools/Board'ı kullanın. Panoları değiştirmek, koddaki bir satırı değiştirmek kadar basittir.

Birçok ekranla çalışmanın zorluklarından biri, hepsinin kendi yazılım sürücülerine ihtiyaç duymasıdır. Bunların hepsi pakete dahildir. Test, paketin alınmasını ve tamamen sıfırdan yeni bir makineye yeniden kurulmasını içeriyordu. Ayrıca Github ve Adafruit ve LCDWiki'den de kaynak kodu alabilirsiniz. Daha yeni sürümlerin çalışmadığı birkaç örnek vardır, bu nedenle tüm çalışan sürümler zip'e dahil edilmiştir. Bazen, aynı dosya adını ancak farklı sürümleri kullandıkları için bir sürücünün diğerinin çalışmasını durdurduğu durumlar oluyordu. Her sürücünün nasıl kurulacağını gösteren programın üst kısmındaki yorumlarda bir açıklama var. Çoğu Arduino IDE'den Sketch/Include Library/Add ZIP library ile kurulur ve bu, zip dosyasını alır ve onu c:\users\computername\mydocuments\arduino\libraries içine koyar.

Yalnızca bir ekran kullanıyorsanız, bu kitaplıklardan bazılarının yüklenmesi gerekmeyecektir. En azından iki klavye dosyasına ve belirli bir ekran için bir dosyaya ihtiyacınız var. Bazı ekranlar kodu paylaşır. Adafruit'ten gfx kütüphanesini almak da dahil olmak üzere programın üst kısmındaki yorumlarda daha ayrıntılı talimatlar var.

Tüm ekranlar aynı Arduino taslağını kullandığından, ekranları değiştirmek sadece aşağıdaki satırlardan birinin yorumunu kaldırma meselesidir:

// Farklı ekranlar, aşağıdakilerden birini yorumsuz bırakın#define DISPLAY_480X320_LCDWIKI_ILI9486 // 3.5", 480x320, text 80x32, mega, 16 bit, mega 36 pin'e (ve 2 güç pinine) takılır.https://www.lcdwiki.com /3.5inch_Arduino_Display-Mega2560. Aşağıdaki seçeneklerin bazılarından daha yavaş ancak daha okunaklı bir yazı tipi ve daha büyük ekran, 5 saniyelik açılış //#define DISPLAY_480X320_MCUFRIEND_ILI9486 // 3.5", 480x320, metin 80x32, mega, 5x9 yazı tipi, yalnızca mega için ancak yalnızca kullanır uno pinleri, power, D0-D14, A0-A5, ssd1289 40 pin modülünden daha güzel yazı tipi ama çok daha yavaş https://www.arduinolibraries.info/libraries/mcufriend_kbv https://github.com/adafruit/Adafruit -GFX-Library //#define DISPLAY_320X240_MCUFRIEND_ILI9341 // 2.4", 320x240, metin 53x24, mega //#define DISPLAY_320X240_SSD1289_40COL // 3.5", 320x240, metin 40x20, mega, UTFT kitaplığı (8x12'den küçük yazı tipi yok). Hızlı //#define DISPLAY_320X240_SSD1289_53COL // 3.5", 320x240, text 53x24, mega, 9x5 font, fontu düzenleyebilir. Fast //#define DISPLAY_320X240_SSD1289_80COL // 3.5", 320x240, text 80x30, mega, tiny 7x3 font, fontu düzenleyebilir, yukarıdaki ikisinden daha hızlı sürücü, bunlardan en hızlısı spi/i2c yerine ekrana 16 bit doğrudan sürücü olarak //#define DISPLAY_160X128_ST7735 // 1.8", 160x128, text 26x12, uno (ILI9341) SPI 128x160 //#define DISPLAY_128X64_OLED_WHITE // 0.96", 128x64, metin 21x6, mega, I2C, siyah üzerine oled beyaz (bu kart için tft kitaplığı artı tüm kod artı klavye, ram ihtiyaçları çok küçük olmasına rağmen program deposunun dışında kalıyor, bu yüzden sadece bir mega üzerinde çalışır) //#define DISPLAY_20X4 // metin 20x4, uno, I2C'li LCD, metin LCD https://www.arduino.cc/en/Reference/LiquidCrystal //#define DISPLAY_16X2 // metin 16x2, uno, uno'ya takılır, 4 ila 10 arası pinleri kullanır //#DISPLAY_STARBURST'yi tanımlar // metin 12x2, nano, nano denetleyicili yıldız patlaması ekranı //#define DISPLAY_320X240_QVGA_SPI_ILI9341 / / 2.2", 320x240, metin 11x8, uno, büyük yazı tipi, uno, 3v sinyaller, 9 pinli SPI ekranı bkz. Bodmer's Instructables - uno https://www.instructables.com/id/Arduino-TFT-display-and-font- kütüphane/ alt kısımdaki zip dosyasını alın ve gfx ve 9341'i manuel olarak arduino library klasörüne koyun

4. Adım: ANSI Standardı

ANSI Standardı
ANSI Standardı

ANSI, ekranı temizlemek, imleci hareket ettirmek ve renkleri değiştirmek için basit komutlara izin verir. Birkaç fotoğrafta tüm ön plan ve arka plan renklerini gösteren bir demo var. Bunlar kırmızı, sarı, yeşil, mavi, camgöbeği, macenta, siyah, beyaz, koyu gri, açık gri ve renkler parlak veya loş olabilir, bu nedenle 16 ön plan ve 16 arka plan rengi vardır.

Piksel düzeyinde ve 256 veya daha fazla renkle çok daha yüksek çözünürlüklü resimler çizebileceğiniz bir 'grafik' modunda eklemeyi düşünmek oldukça mümkündür. Ana sınırlamalar, Arduino'nun dahili belleği ve 9600 baud'da bir seri bağlantıya bir resim göndermek için geçen süredir.

Kodun karakteri depolamak için bir bayta ve renkleri depolamak için bir bayta ihtiyacı vardır (ön plan için 3 bit, arka plan için 3, parlak/karanlık için bir ve kalın için bir). Yani 80x30'luk bir ekran 2400x2=4800 bayta ihtiyaç duyacak, bu da Mega'ya sığacak ama Uno'ya sığmayacak.

Adım 5: Ekranlar

görüntüler
görüntüler
görüntüler
görüntüler
görüntüler
görüntüler

Yukarıda her bir ekranın fotoğrafları bulunmaktadır. Her ekranın önünden ve arkasından fotoğraflar var ve bunlar ebay veya benzerlerinde bulunan birçok markayı temsil ediyor. Bazıları I2C, bazıları paralel, bazıları daha büyük yazı tiplerine sahip, bazıları Wordstar ve diğer eski kelime işlem programlarına uygun tam 80 sütun görüntüleyebilir. Arduino kodunun metninde daha fazla ayrıntı var.

Adım 6: Şematik

Aşağıda iki dosya var. Instructables.zip dosyalarını işlemediği için.txt olarak adlandırılırlar. Bunları indirin ve.zip olarak yeniden adlandırın.

Pdf dosyaları olarak şematik ve pano düzeni var. Seeed PCB için de bir paket var. Bunlar gerberlerdir ve eğer Seeed'e gidip bunu yüklerseniz gerberleri göstermelidir ve daha sonra PCB'leri yapabilirsiniz. 14 segmentli pano büyüktür ve biraz daha pahalıdır, ancak daha küçük olanı Seeed'in tercih ettiği 10x10cm formatına uyar, bu nedenle 5 veya 10 pano için oldukça makul - aslında nakliye maliyeti panolardan daha fazladır.

Pek çok ekranı PCB'ye ihtiyaç duymadan kullanmak oldukça mümkün. Tamamı ebay veya benzerlerinde bulunan PS2 soket modülleri, RS232 kalkanları/modülleri vardır. I2C olanlar gibi bazı ekranlar sadece birkaç bağlantı kablosu kullanabilir. Bazıları SSD1289 ekranları gibi adaptör kartlarıyla birlikte gelir ve doğrudan bir Mega'ya takılabilir.

7. Adım: Yıldız Patlaması Ekranı

Yıldız Patlaması Ekranı
Yıldız Patlaması Ekranı

Yıldız patlaması ekranı daha büyük bir karttır ve çoğullamayı yapmak için bir Nano ve bir dizi 74xx yonga kullanır. Çok loşlaşmadan veya titreme çok belirgin hale gelmeden önce kaç tane ekranı çoğaltabileceğinizi belirlemek için birçok deney yapıldı. Ekranlar Futurlec'ten geldi https://www.futurlec.com/LEDDisp.shtml 14 segmentli ekranlar küçük harfler de yapabilir ve gerektiğinde bunlar kodda değiştirilebilir. Bu dosyaları.txt'den.zip'e yeniden adlandırın

8. Adım: Diğer Ekranlar İçin Kod Ekleme

Diğer ekranlar için kod eklemek mümkündür. İlk adım, görüntülemek için bir şey, herhangi bir şey elde etmektir. Bir piksel veya bir harf olabilir. Bu, esas olarak sürücüleri aramayı, indirmeyi, test etmeyi, derlenmeyeceğini bulmayı, ardından daha sonra karışıklığa neden olmaması için bu sürücüyü kaldırmayı ve ardından yeni bir tane denemeyi içerir. Bir sonraki adım, aynı görünen bazı ekranlar renkleri tersine çevireceğinden, doğru renkte görüntülenecek bir harf elde etmektir. Neyse ki, genellikle başlangıç kodundaki tek bir numara bunu düzeltir. Sonraki adım, uno veya mega kullanılıp kullanılmayacağını, ekran genişliğini, yüksekliğini, yazı tipi boyutunu, klavye pinlerini ve hangi sürücü dosyalarının kullanılacağını tanımlamak için birkaç satır yazmaktır. Bunlar kodda 39. satırdan başlar ve mevcut ekranların formatını kopyalayabilirsiniz.

Sonraki satır 451'e inip başlangıç kodunu eklemek. Burası, arka plan rengini ve döndürmeyi ayarladığınız ve ekranı başlattığınız yerdir.

Sonraki satır 544'e gitmek ve bir karakter görüntülemek için kodu eklemek. Bazı durumlarda bu sadece bir satırdır, örn.

my_lcd. Draw_Char(xPixel, yPixel, c, tftForecolor, tftBackcolor, 1, 0); // x, y, char, ön, geri, boyut, mod

Sonraki satır 664'e gitmek ve bir piksel çizmek için kodu eklemek. Yine, bazen bu sadece bir satırdır, örneğin:

tft.drawPixel(xPixel, yPixel, tftForecolor);

Son olarak 727. satıra gidin ve imleç için dikey bir çizgi çizmek için kodu ekleyin, örneğin

tft.drawFastVLine(xPixel, yPixel, fontHeight, tftForecolor);

Program, ekran genişliğine ve yazı tipi boyutuna göre ekran arabelleği için ne kadar bellek ayrılacağı gibi şeyleri sıralar.

9. Adım: Wordstar Gösterimi

Bu, bir CP/M bilgisayarı kullanılarak yapıldı ve burada birçok seçenek mevcut. Kurulum için hızlı bir şeye ihtiyacım vardı, bu yüzden bir ESP32'de (Google ESP32 CP/M) bir öykünme kullandım. Örneğin, Grant Searle'nin FPGA öykünmesi ve gerçek bir Z80 kullanmayı tercih edenler için RC2014 gibi birçok başka retro bilgisayar var. Birçok retrobilgisayar, ekran olarak bir PC'de bir terminal programı kullanma eğilimindedir, örneğin Teraterm. Bu ANSI projesinde birçok hata ayıklama, bir terminal programı ile ANSI programını paralel olarak çalıştırmayı ve ekranların aynı göründüğünden emin olmayı içeriyordu.

Adım 10: Diğer Düşünceler

Ekranlar boyut olarak büyüdükçe daha yavaşlar ve yavaşlar. Bir karakteri yeniden çizmek, arka plan renginin de çizilmesi gerektiğinden, o karakterdeki her pikselin yeniden çizilmesini içerir, böylece her şey bir pikseli ne kadar hızlı çizebileceğinize bağlıdır. Bazı ince ayarlar vardır, örneğin bir ekran gelen verilere ayak uyduramıyorsa, metni ekran arabelleğinde saklayın ve daha fazla metin gelmediğinde tam ekran yeniden çizim yapın. indirim ekranda güzel bir resim gösteriyor, ancak o resmi göstermenin ne kadar sürdüğünü göstermeyebilirler ve bazı durumlarda 5 saniye veya daha fazla olabilir. I2C ve SPI, daha küçük ekranlar için harikadır, ancak yaklaşık 50 sütunun üzerindeki herhangi bir şey, 8 veya 16 bitlik bir veri yoluna ihtiyaç duyar.

Wordstar 9600 baud'da kullanmak biraz hantaldır ve 19200 metni kaydırmak için çok daha kullanışlıdır, ancak ekranlar gerçekten buna ayak uyduramaz.

Kullandığım en hızlı görüntü, 16 bit paralel veri yolu oluşturmak için iki adet 8 bitlik harici 512k ram yongası olan Pervane yongasındaydı. Her yazı tipi ram'e önceden yüklenmiştir. Verileri ekrana aktarmak için bir dizi 74xx sayaç yongası kullanıldı. Bu, CPU içinde veri alıp veren dahili bir işlem olmadığı ve yenileme hızının Pervane çipinin bir pimi değiştirebileceği kadar hızlı olduğu anlamına geliyordu. Şaşırtıcı bir şekilde, ekranlar 20Mhz'de bile buna ayak uydurabildi ve böylece sadece 30 milisaniyede tam ekran güncellemesi yapmak mümkün oldu. Bu tür bir oran, cep telefonlarında gördüğünüz gibi sorunsuz kaydırma yapmak için yeterince hızlıdır.

Pervane çipi on yıldan fazla bir süre önce son teknolojiydi ve şimdi büyük miktarda dahili ram içeren ESP8266 ve ESP32 dahil olmak üzere daha fazla seçenek var. Bununla birlikte, bu yongalar hala çok sayıda pime sahip değil, bu nedenle, ekrana saatli bir harici ram yongasının eski skool yöntemini kullanmanın yararı olabilir.

Daha büyük ekranlar için bir LCD TV ekranı veya VGA ekranı kullanmak ve kodlanmış bazı ANSI öykünücülerine, örneğin VGA'yı doğrudan çalıştıran ESP32'ye bakmak daha ucuz olabilir.

Umarım bu projeyi faydalı bulursunuz.

James Moxham

Adelaide, Avustralya

Önerilen: