Mündəricat:

ANSI terminallarının toplusu: 10 addım
ANSI terminallarının toplusu: 10 addım

Video: ANSI terminallarının toplusu: 10 addım

Video: ANSI terminallarının toplusu: 10 addım
Video: İnformatika Qəbul 2021💥💥(10-22ci sualların izahı) 2024, Iyul
Anonim
ANSI terminallarının toplusu
ANSI terminallarının toplusu

Bu layihə, Wordstar kimi köhnə bir mətn prosessorunu işə salmaq üçün uyğun bir LCD ekranda 80 sütunlu mətnin göstərilməsi yolu ilə başladı. Ölçüsü 0,96 ilə 6 düym arasında dəyişən müxtəlif ekranlar əlavə edildi. Ekranlar tək bir PCB və bir Arduino eskiz/proqramı istifadə edir.

Kompüterə qoşulmaq üçün RS232 seriyalı və klaviatura üçün PS/2 yuvasına malikdir. Göstəricilər, əlverişli qiymətlərlə mövcud olanları təmsil etmək üçün seçilmişdir. Lazım olan yaddaşdan asılı olaraq, ekranlar Arduino Nano, Uno və ya Mega istifadə edir.

Addım 1: Ekranların Xülasəsi

Göstəricilərin xülasəsi
Göstəricilərin xülasəsi

480x320 qətnamə ilə müxtəlif ekranlar var. Bu 9x5 şriftə və 80 sütunlu mətnə imkan verir. 9x5 şriftlə 320x240 qətnamə ilə müxtəlif lövhələr və 80 sütun mətninə icazə vermək üçün çox kiçik 7x3 şrift var. 160x120 və 128x64 piksel ölçülü kiçik lövhələr də var. Həmçinin 20x4 və 16x2 mətn displeyləri və nəhayət 12x2 on dörd seqmentli ulduz püskürtmə lövhəsi.

Bəzi ekranlar I2C istifadə edir, bəziləri SPI və daha böyük ekranlar üçün daha sürətli yeniləmə sürətləri üçün 16 bitlik məlumat avtobusu.

Kiçik ekranlar Arduino Uno istifadə edir. Daha böyük lövhələr daha çox yaddaşa ehtiyac duyur və buna görə də Mega istifadə edin. Starburst ekran lövhəsi bir Nano istifadə edir.

Bu nöqtədə qeyd edə bilərəm ki, fotoşəkillər bir çox ekranlarda ədalət yaratmır. Kiçik ağ rəngli ekran çox dəqiq və parlaqdır ki, bu da kameranın fokuslanmasını çətinləşdirdi və ulduz pərdəsi ilə idarə olunan ekran real həyatda daha kəskin görünür.

Addım 2: Avadanlıq

Avadanlıq
Avadanlıq

PCB mümkün qədər çox ekranla işləmək üçün hazırlanmışdır. Mega və Uno arasında dörd tullanan istifadə edərək dəyişdirmək asandır. 3V -də işləyən ekranlar üçün gərginlik ayırıcı rezistorlar var. I2C sancaqları bir qrup halına gətirilir ki, ekranlar birbaşa qoşula bilsin. Terminal 9600 baudda işləyir və bu artırıla bilsə də, daha böyük ekranların çoxu bundan daha sürətli çəkilməyəcək. PS2 klaviatura DIN6 yuvasına qoşulur. USB klaviatura da ucuz bir adapter fişi ilə işləyəcək. D9 -da 2 və 3 -cü pinləri birləşdirərək sadə bir geri dönmə testi edə bilərsiniz və sonra klaviaturada yazılan simvollar ekranda görünəcək.

Bəzi hallarda bir PCB tələb olunmur və ebayda əvvəlcədən hazırlanmış modullarla işləyən şeyləri əldə etmək mümkündür, məsələn, PS2 adapterləri, RS232 adapter lövhələri və birbaşa arduino lövhələrinə qoşulan ekranlar.

Starburst LED displeyi üçün ayrıca bir lövhə də var - bu Təlimat kitabına baxın.

Addım 3: Proqram təminatı

Aşağıda Package.txt adlı bir fayl var. Bu əslində bir.zip faylıdır, ona görə də yükləyin və adını dəyişin (Instructables zip fayllarına icazə vermir). Arduino eskiz/proqramı daxildir və bu, bütün ekranların istifadə etdiyi tək bir proqramdır. Ekranların hər biri üçün bütün.zip faylları da var.

Proqramın əvvəlində bir sıra #define ifadələr var. Ekrana uyğun olanı qeyd edin. Uno, Mega və ya Nano seçmək üçün Tools/Board istifadə edin. Lövhələri dəyişdirmək, koddakı bir sətri dəyişdirmək qədər sadədir.

Bir çox ekranla işləməkdə çətinliklərdən biri, hamısının öz proqram sürücülərinə ehtiyacı olduğu görünür. Bunların hamısı pakete daxildir. Testə paketi götürmək və sıfırdan tamamilə yeni bir maşına yenidən qurmaq daxildir. Github, Adafruit və LCDWiki -dən də kod əldə edə bilərsiniz. Yeni versiyaların işləmədiyi bir neçə hal var ki, bütün işləyən versiyalar zip -ə daxil edilir. Bəzən bir sürücünün eyni fayl adını, lakin fərqli versiyalardan istifadə etdiyi üçün digərinin işini dayandırdığı hallar olurdu. Proqramın yuxarısındakı şərhlərdə hər bir sürücünün necə qurulacağını göstərən bir təsvir var. Əksəriyyəti Arduino IDE -dən Sketch/Kitabxana Daxil et/ZIP kitabxanası əlavə edin və bu zip faylını götürüb c: / users / computername / mydocuments / arduino / libraries -ə qoyur.

Yalnız bir ekran istifadə edirsinizsə, bu libariyaların bəzilərinin quraşdırılmasına ehtiyac qalmayacaq. Ən azı iki klaviatura faylına və xüsusi ekran üçün birinə ehtiyacınız var. Bəzi paylaşım kodlarını göstərir. Proqramın yuxarısındakı şərhlərdə, gfx kitabxanasını Adafruit -dən əldə etmək də daxil olmaqla daha ətraflı təlimatlar var.

Bütün ekranlar eyni Arduino eskizini istifadə etdiyinə görə, displeylərin dəyişdirilməsi yalnız aşağıdakı sətirlərdən birini şərh etməkdən ibarətdir:

// Fərqli ekranlar, aşağıdakılardan birini şərhsiz qoyun#definition DISPLAY_480X320_LCDWIKI_ILI9486 // 3.5 ", 480x320, mətn 80x32, mega, 16 bit, mega 36 pininə (və 2 güc pininə) qoşulur. Http://www.lcdwiki.com /3.5inch_Arduino_Display-Mega2560. Aşağıdakı bəzi variantlardan daha yavaş, lakin daha oxunaqlı bir yazı tipi və daha böyük bir ekran, 5sec açılış //#DISPLAY_480X320_MCUFRIEND_ILI9486 // 3.5 ", 480x320, mətn 80x32, mega, 5x9 şrift yalnız meqa üçün istifadə olunur. uno sancaqlar, güc, D0-D14, A0-A5, ssd1289 40 pin modulundan daha gözəl yazı tipi, lakin daha yavaş https://www.arduinolibraries.info/libraries/mcufriend_kbv https://github.com/adafruit/Adafruit -GFX-Kitabxana //#DISPLAY_320X240_MCUFRIEND_ILI9341 // 2.4 ", 320x240, mətn 53x24, mega //#DISPLAY_320X240_SSD1289_40COL // 3.5", 320x240, mətn 40x20, mega, UTFT kitabxanasından 8 kiçik (no12). Sürətli //#DISPLAY_320X240_SSD1289_53COL // 3.5 ", 320x240, mətn 53x24, mega, 9x5 yazı tipi, yazı tipini düzəldə bilər. Sürətli //#DISPLAY_320X240_SSD1289_80COL // 3.5", 320x240, mətn 80x30, mega, kiçik 7, yuxarıdakı ikisindən daha sürətli sürücü, bunların hamısı spi/i2c deyil, ekrana 16 bit birbaşa sürücü kimi ən sürətli //#DISPLAY_160X128_ST7735 // 1.8 ", 160x128, mətn 26x12, uno (ILI9341) SPI 128x160 //#define DISPLAY_128X64_OLED_WHITE // 0.96 ", 128x64, mətn 21x6, mega, I2C, qara rəngdə ağ rəngdədir (bu lövhənin tft kitabxanası üstəgəl bütün kodlar və klaviatura proqram yaddaşı tükənir, baxmayaraq ki qoç ehtiyacları çox azdır, buna görə də bir mega üzərində işləyir) //#DISPLAY_20X4 təyin edin // mətn 20x4, uno, I2C ilə LCD, mətn LCD https://www.arduino.cc/en/Reference/LiquidCrystal //#təyin DISPLAY_16X2 // mətn 16x2, uno, uno -ya qoşulur, 4 -dən 10 -a qədər sancaqlar istifadə edir //#DISPLAY_STARBURST təyin edin // mətn 12x2, nano, ulduzlu ekran nano nəzarətçi ilə //#DISPLAY_320X240_QVGA_SPI_ILI9341 / /2.2 ", 320x240, mətn 11x8, uno, böyük şrift, uno, 3v siqnalları, 9 pinli SPI ekranı Bodmerin Təlimatlarına baxın-uno https://www.instructables.com/id/Arduino-TFT-display-and-font- kitabxana/ altdakı zipi əldə edin və gfx və 9341 -i əl ilə arduino kitabxana qovluğuna qoyun

Addım 4: ANSI Standartı

ANSI standartı
ANSI standartı

ANSI, ekranı təmizləmək, kursoru gəzdirmək və rəngləri dəyişdirmək üçün sadə əmrlərə imkan verir. Bir neçə fotoşəkildə bütün ön plan və fon rənglərini göstərən bir demo var. Bunlar qırmızı, sarı, yaşıl, mavi, mavi, bənövşəyi, qara, ağ, tünd boz, açıq boz rənglərdir və rənglər parlaq və ya zəif ola bilər, buna görə 16 ön plan və 16 fon rəngi var.

Piksel səviyyəsində və 256 və ya daha çox rəngdə daha yüksək qətnamə şəkilləri çəkə biləcəyiniz 'qrafik' rejiminə əlavə etməyi düşünmək olduqca mümkündür. Əsas məhdudiyyətlər Arduinonun daxili yaddaşı və bir şəkilin 9600 baud -da seriyalı linkə göndərilmə vaxtıdır.

Kodun xarakteri saxlamaq üçün bir bayta və rənglərin saxlanılması üçün bir bayta ehtiyacı var (ön planda 3 bit, arxa fonda 3, parlaq/qaranlıq və qalın üçün biri). Beləliklə, 80x30 ölçülü bir ekrana 2400x2 = 4800 bayt lazım olacaq ki, bu da Meqaya sığacaq, lakin Uno -ya uyğun gəlmir.

Addım 5: Ekranlar

Göstərir
Göstərir
Göstərir
Göstərir
Göstərir
Göstərir

Yuxarıda hər bir fərdi ekranın fotoşəkilləri var. Hər ekranın ön və arxasından fotoşəkillər var və ebayda və ya bənzərlərində mövcud olan bir çox markanı təmsil edirlər. Bəziləri I2C, bəziləri paralel, bəziləri daha böyük şriftlərə malikdir, bəziləri Wordstar və digər köhnə söz emal proqramları üçün uyğun olan tam 80 sütunu göstərə bilər. Arduino kodunun mətnində daha ətraflı məlumat var.

Addım 6: Şematik

Aşağıda iki fayl var. Instructables.zip fayllarını idarə etmədiyi üçün.txt adlanır. Onları yükləyin və.zip olaraq yenidən adlandırın.

Pdf faylları olaraq sxematik və lövhə düzeni var. Seeed PCB üçün bir paket də var. Bunlar gerberlərdir və Seeed -ə gedib bunu yükləsəniz, gerberləri göstərməlidir və sonra PCB hazırlaya bilərsiniz. 14 seqment lövhəsi böyükdür və bir az daha baha başa gəlir, lakin kiçik olanı Seeed -in üstünlük verdiyi 10x10cm formatına uyğundur, buna görə də 5 və ya 10 lövhə üçün olduqca məqbuldur - əslində göndərmə xərcləri lövhələrdən daha çoxdur.

PCB tələb etmədən bir çox displeydən istifadə etmək olduqca mümkündür. PS2 yuva modulları, RS232 qalxanları/modulları ebayda və ya bənzərlərində mövcuddur. I2C kimi bəzi ekranlar yalnız bir neçə bağlama teli istifadə edə bilər. SSD1289 displeyləri kimi adapter lövhələri var və birbaşa Mega -ya qoşula bilər.

Addım 7: Starburst Ekranı

Starburst Ekran
Starburst Ekran

Ulduz püskürtmə ekranı daha böyük bir lövhədir və multipleksləmə üçün bir Nano və 74xx çipsi istifadə edir. Çox qaranlıqlaşmadan və ya titrəmənin çox nəzərə çarpan hala gəlməzdən əvvəl neçə ekranı çoxlaya biləcəyinizi təyin etmək üçün bir çox təcrübə var idi. Ekranlar Futurlec -dən gəldi https://www.futurlec.com/LEDDisp.shtml 14 seqmentli ekranlar kiçik hərfləri də yerinə yetirə bilər və lazım gələrsə onları kodda dəyişdirmək olar. Bu faylları.txt -dən.zip -ə dəyişin

Addım 8: Digər görüntülər üçün kod əlavə edin

Digər ekranlar üçün kod əlavə etmək mümkündür. İlk addım bir şey əldə etmək, hər şeyi göstərməkdir. Bir piksel və ya hərf ola bilər. Bura əsasən sürücülərin axtarılması, birinin yüklənməsi, sınanması, tərtib olunmayacağını tapmaq, sonra həmin sürücünün silinməsi, sonra qarışıqlıq yaratmaması, sonra yenisini sınamaq daxildir. Növbəti addım, doğru rəngdə göstəriləcək bir məktub əldə etməkdir, çünki eyni görünən bəzi ekranlar rəngləri ters çevirəcək. Xoşbəxtlikdən, ümumiyyətlə, başlanğıc kodundakı yalnız bir nömrə bu problemi həll edəcəkdir. Növbəti addım, uno və ya mega, ekran genişliyi, hündürlüyü, yazı tipi ölçüsü, klaviatura pinləri və hansı sürücü fayllarından istifadə ediləcəyini təyin etmək üçün bir neçə sətir yazmaqdır. Bunlar kodun 39 -cu sətrindən başlayır və mövcud ekranların formatını kopyalaya bilərsiniz.

Sonrakı 451 xəttinə enmək və başlanğıc kodunu əlavə etməkdir. Fon rəngini və fırlanmanı təyin etdiyiniz və ekranı başlatdığınız yer budur.

Sonrakı, 544 xəttinə getmək və bir xarakter göstərmək üçün kodu əlavə etməkdir. Bəzi hallarda bu yalnız bir sətirdir, məsələn

my_lcd. Draw_Char (xPixel, yPixel, c, tftForecolor, tftBackcolor, 1, 0); // x, y, char, ön, arxa, ölçü, rejim

Sonrakı, 664 xəttinə getmək və bir piksel çəkmək üçün kodu əlavə etməkdir. Yenə də bəzən bu yalnız bir sətirdir, məsələn:

tft.drawPixel (xPixel, yPixel, tftForecolor);

Nəhayət, 727 sətrinə gedin və kursor üçün şaquli bir xətt çəkmək üçün kodu əlavə edin

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

Proqram, ekran genişliyi və şrift ölçüsünə əsaslanaraq ekran tamponu üçün nə qədər yaddaş ayrılması kimi şeyləri sıralayır.

Addım 9: Wordstar Nümayişi

Bu CP/M kompüteri ilə edildi və burada bir çox variant var. Qurmaq üçün tez bir şeyə ehtiyacım var idi, buna görə bir ESP32 (Google ESP32 CP/M) üzərində bir emulyasiya istifadə etdim. Bir çox başqa retro kompüter var, məsələn, Grant Searle -in FPGA emulyasiyası və əsl Z80 istifadə etməyi üstün tutanlar üçün RC2014. Bir çox retrokompüterlər, məsələn, Teraterm kimi bir kompüterdəki bir terminal proqramından istifadə edirlər. Bu ANSI layihəsinin bir çox ayıklanması, bir terminal proqramı və ANSI proqramını paralel olaraq işlətməyi və ekranların eyni göründüyündən əmin olmağı əhatə edir.

Addım 10: Əlavə fikirlər

Ölçülər artdıqca ekranlar daha yavaş olur. Bir xarakterin yenidən tərtib edilməsi, fon rəngi də çəkilməli olduğu üçün hər bir pikselin yenidən çəkilməsini nəzərdə tutur, buna görə də hər şey bir piksel çəkə biləcəyinizdən asılıdır. Bəzi düzəlişlər var, məsələn, bir ekran daxil olan məlumatları tuta bilmirsə, mətni ekran tamponunda saxlayın və sonra heç bir mətn gəlməyəndə tam ekran yenidən çəkin. Gördüyünüz bir çox ekran satış ekranda gözəl bir şəkil göstərir, ancaq göstərə bilmədikləri şey, bu şəklin göstərilməsinin nə qədər vaxt çəkdiyi və bəzi hallarda 5 saniyə və ya daha çox ola bilər. I2C və SPI daha kiçik ekranlar üçün əladır, lakin təxminən 50 sütundan çox olan hər hansı bir şeyin 8 və ya 16 bitlik məlumat avtobusuna ehtiyacı var.

Wordstar, 9600 baudda istifadə etməkdə bir az çətinlik çəkir və 19200 mətni sürüşdürmək üçün daha əlverişlidir, lakin ekranlar həqiqətən davam edə bilmir.

İstifadə etdiyim ən sürətli ekran, 16 bitlik paralel məlumat avtobusu yaratmaq üçün iki 8 bit xarici 512k ram çipi olan Pervane çipində idi. Hər bir yazı tipi əvvəlcədən qoça yükləndi. Məlumatları ekrana çıxarmaq üçün 74xx sayğac çipslərindən ibarət bir kaskad istifadə edildi. Bu, CPU -da məlumatların alınması və çıxarılması daxilində heç bir daxili işlənmənin olmadığı və yeniləmə sürəti, Pervane çipinin bir pimi dəyişdirə biləcəyi qədər sürətli olduğu anlamına gəlir. Təəccüblüdür ki, ekranlar 20Mhz -də belə buna davam gətirə bildi və buna görə də cəmi 30 milisaniyədə tam ekran yeniləməsi etmək mümkün oldu. Bu cür nisbət, cib telefonlarında gördüyünüz kimi hamarca sürüşdürmək üçün kifayət qədər sürətlidir.

Pervane çipi on ildən çox əvvəl qabaqcıl idi və indi böyük miqdarda daxili qoç olan ESP8266 və ESP32 daxil olmaqla daha çox seçim var. Bununla birlikdə, bu çiplərdə hələ də çox sayda sancaqlar yoxdur, buna görə də ekrana çıxarılan xarici bir qoç çipinin köhnə üsulunu istifadə etmək hələ də faydalı ola bilər.

Daha böyük ekranlar üçün bir LCD TV ekranı və ya VGA ekranı istifadə etmək və VGA -nı birbaşa idarə edən ESP32 kimi kodlaşdırılmış ANSI emulyatorlarına baxmaq daha ucuz ola bilər.

Ümid edirəm bu layihəni faydalı tapacaqsınız.

James Moxham

Adelaide, Avstraliya

Tövsiyə: