Turinys:

ANSI terminalų kolekcija: 10 žingsnių
ANSI terminalų kolekcija: 10 žingsnių

Video: ANSI terminalų kolekcija: 10 žingsnių

Video: ANSI terminalų kolekcija: 10 žingsnių
Video: Britų muziejus, Britų biblioteka ir Haris Poteris 9 3/4 | Išvykimas iš Londono 😭 2024, Liepa
Anonim
ANSI terminalų kolekcija
ANSI terminalų kolekcija

Šis projektas buvo pradėtas kaip būdas rodyti 80 stulpelių tekstą LCD ekrane, tinkančiame paleisti senamadišką teksto rengyklę, pvz., „Wordstar“. Pridėta įvairių kitų ekranų, kurių dydis svyruoja nuo 0,96 iki 6 colių. Ekranai naudoja vieną PCB ir vieną „Arduino“eskizą/programą.

Yra serijinis RS232 ryšys, skirtas prijungti prie kompiuterio, ir PS/2 lizdas klaviatūrai. Ekranai buvo pasirinkti taip, kad atspindėtų dažniausiai prieinamą kainą už priimtiną kainą. Priklausomai nuo reikalingos atminties, ekranuose naudojami „Arduino Nano“, „Uno“arba „Mega“.

1 veiksmas: ekranų santrauka

Rodinių santrauka
Rodinių santrauka

Yra įvairių ekranų su 480x320 raiška. Tai leidžia 9x5 šriftą ir 80 stulpelių tekstą. Yra įvairių lentų su 320x240 raiška, 9x5 šriftais ir labai mažu 7x3 šriftu, kad būtų galima 80 stulpelių teksto. Taip pat yra mažesnių plokščių su 160x120 ir 128x64 pikseliais. Taip pat 20x4 ir 16x2 teksto ekranai ir galiausiai 12x2 keturiolikos segmentų žvaigždžių rodymo lenta.

Kai kuriuose ekranuose naudojamas I2C, kai kuriuose - SPI, o didesniems ekranams - 16 bitų duomenų magistralė, skirta greitesniam atnaujinimo greičiui.

Mažesni ekranai naudoja „Arduino Uno“. Didesnėms plokštėms reikia daugiau atminties, todėl naudokite „Mega“. „Starburst“ekrano plokštėje naudojamas „Nano“.

Šioje vietoje galėčiau paminėti, kad nuotraukos nėra teisingos daugeliui ekranų. Mažas baltas ekranas yra labai ryškus ir ryškus, todėl fotoaparatui buvo sunkiau sufokusuoti, o „starburst“LED ekranas realiame gyvenime atrodo daug ryškesnis.

2 žingsnis: Aparatūra

Techninė įranga
Techninė įranga

PCB buvo sukurta taip, kad veiktų su kuo daugiau ekranų. Naudojant keturis trumpiklius lengva perjungti „Mega“ir „Uno“. Yra įtampos skirstytuvų rezistoriai ekranams, kurie veikia 3 V įtampa. I2C kaiščiai išvedami į grupę, kad ekranus būtų galima tiesiogiai prijungti. Terminalas veikia 9600 baudų greičiu, ir nors tai galima padidinti, daugelis didesnių ekranų nebus perbraižyti daug greičiau. PS2 klaviatūra prijungiama prie DIN6 lizdo. USB klaviatūros taip pat veiks su pigiu adapterio kištuku. Galite atlikti paprastą grįžtamojo ryšio testą, sujungę D9 2 ir 3 kaiščius, tada ekrane pasirodys klaviatūra įvesti simboliai.

Kai kuriais atvejais PCB nereikia, ir tai galima padaryti naudojant iš anksto pagamintus modulius, pasiekiamus „ebay“, pvz., PS2 adapterius, RS232 adapterių plokštes ir ekranus, kurie jungiami tiesiai į arduino plokštes.

Taip pat yra atskira lenta, skirta „starburst“LED ekranui - žr. Vėliau šioje instrukcijoje.

3 žingsnis: programinė įranga

Žemiau yra failas, vadinamas Package.txt. Tai iš tikrųjų yra.zip failas, todėl atsisiųskite ir pervardykite („Instructables“neleidžia ZIP failų). Įtrauktas „Arduino“eskizas/programa ir tai yra viena programa, naudojama visuose ekranuose. Taip pat yra visi kiekvieno ekrano.zip failai.

Programos pradžioje yra eilutė #apibrėžimų. Išskleiskite tą, kuris atitinka ekraną. Naudodami Įrankiai/lenta pasirinkite Uno, Mega arba Nano. Lentas pakeisti taip paprasta, kaip pakeisti vieną kodo eilutę.

Vienas iš iššūkių dirbant su daugeliu ekranų yra tas, kad jiems visiems reikia savo programinės įrangos tvarkyklių. Visa tai yra įtraukta į paketą. Bandymas apėmė paketo paėmimą ir naujo įdiegimą į naują mašiną visiškai nuo nulio. Taip pat galite gauti šaltinio kodą iš „Github“ir „Adafruit“bei „LCDWiki“. Yra keletas atvejų, kai naujesnės versijos neveikia, todėl visos veikiančios versijos yra įtrauktos į ZIP failą. Kartais pasitaikydavo atvejų, kai vienas vairuotojas sustabdė kitą, nes jis naudojo tą patį failo pavadinimą, bet skirtingas versijas. Programos viršuje esančiuose komentaruose yra aprašymas, rodantis, kaip įdiegti kiekvieną tvarkyklę. Dauguma jų yra įdiegti iš „Arduino IDE“su eskizu/įtraukti biblioteką/pridėti ZIP biblioteką, o tai užtraukia ZIP failą ir įdeda jį į c: / users / computername / mydocuments / arduino / bibliotekas.

Jei naudojate tik vieną ekraną, kai kurių iš šių bibliotekų nereikia įdiegti. Jums reikia mažiausiai dviejų klaviatūros failų ir vieno konkrečiam ekranui. Kai kuriuose ekranuose yra bendrinamas kodas. Programos viršuje esančiuose komentaruose yra išsamesnės instrukcijos, įskaitant „gfx“bibliotekos gavimą iš „Adafruit“.

Kadangi visuose ekranuose naudojamas tas pats „Arduino“eskizas, ekranų keitimas yra tik vieno iš toliau pateiktų eilučių komentavimas:

// Skirtingi ekranai, palikite vieną iš šių komentarų#define DISPLAY_480X320_LCDWIKI_ILI9486 // 3.5 ", 480x320, tekstas 80x32, mega, 16 bitų, prijungiamas prie mega 36 kontaktų (ir 2 maitinimo kaiščių).https://www.lcdwiki.com /3.5inch_Arduino_Display-Mega2560. Lėčiau nei kai kurios toliau pateiktos parinktys, bet labiau skaitomas šriftas ir didesnis ekranas, 5 sekundžių įkrova //#define DISPLAY_480X320_MCUFRIEND_ILI9486 // 3.5 ", 480x320, tekstas 80x32, mega, 5x9, tik mega, bet tik uno kaiščiai, maitinimas, D0-D14, A0-A5, gražesnis šriftas nei ssd1289 40 kontaktų modulis, bet daug lėtesnis https://www.arduinolibraries.info/libraries/mcufriend_kbv https://github.com/adafruit/Adafruit -GFX-biblioteka //#define DISPLAY_320X240_MCUFRIEND_ILI9341 // 2.4 ", 320x240, tekstas 53x24, mega //#define DISPLAY_320X240_SSD1289_40COL // 3.5", 320x240, tekstas 40x20, mega, UTFT biblioteka (be šriftų, mažesnių nei 8x12) Greitas //#apibrėžti DISPLAY_320X240_SSD1289_53COL // 3.5 ", 320 x 240, tekstas 53 x 24, mega, 9 x 5 šriftas, gali redaguoti šriftą. Greitas //#apibrėžti DISPLAY_320X240_SSD1289_80COL // 3,5", 320 x 240, tekstas 80 x 30, mega, mažas 7 x 3 šriftas, gali redaguoti šriftą, greitesnis tvarkyklė nei du aukščiau, greičiausias iš visų kaip 16 bitų tiesioginis diskas į ekraną, o ne spi/i2c //#define DISPLAY_160X128_ST7735 // 1.8 ", 160x128, text 26x12, uno (ILI9341) SPI 128x160 //#define DISPLAY_128X64_OLED_WHITE // 0.96 ", 128x64, tekstas 21x6, mega, I2C, esate baltas juodas (šios plokštės tft biblioteka, visas kodas ir klaviatūra baigia programos saugyklą, nors RAM poreikis yra labai mažas, todėl tik veikia mega) //#apibrėžti DISPLAY_20X4 // tekstas 20x4, uno, skystųjų kristalų ekranas su I2C, tekstinis LCD https://www.arduino.cc/en/Reference/LiquidCrystal //#apibrėžti DISPLAY_16X2 // tekstas 16x2, uno, jungiasi prie uno, naudoja kaiščius nuo 4 iki 10 //#apibrėžti DISPLAY_STARBURST // tekstas 12x2, nano, žvaigždžių ekranas su nano valdikliu //#apibrėžti DISPLAY_320X240_QVGA_SPI_ILI9341 / /2.2 ", 320x240, tekstas 11x8, uno, didelis šriftas, uno, 3v signalai, 9 kontaktų SPI ekranas žr.„ Bodmer's Instructables “-uno https://www.instructables.com/id/Arduino-TFT-display-and-font- biblioteką/ gaukite zip apačioje ir rankiniu būdu įdėkite gfx ir 9341 į arduino bibliotekos aplanką

4 žingsnis: ANSI standartas

ANSI standartas
ANSI standartas

ANSI leidžia paprastomis komandomis išvalyti ekraną, perkelti žymeklį ir pakeisti spalvas. Kai kuriose nuotraukose yra demonstracinė versija, rodanti visas priekinio plano ir fono spalvas. Tai raudona, geltona, žalia, mėlyna, žalsvai mėlyna, rausvai raudona, juoda, balta, tamsiai pilka, šviesiai pilka, o spalvos gali būti ryškios arba silpnos, todėl yra 16 priekinio plano ir 16 fono spalvų.

Visiškai įmanoma pagalvoti apie „grafikos“režimo pridėjimą, kuriame galite piešti daug didesnės raiškos paveikslėlius pikselių lygiu ir su 256 ar daugiau spalvų. Pagrindiniai apribojimai yra vidinė „Arduino“atmintis ir laikas, per kurį siunčiama nuotrauka serijine nuoroda esant 9600 baudų.

Kodui reikia vieno baito, kad būtų išsaugotas simbolis, ir vieno baito, kad būtų išsaugotos spalvos (3 bitai priekiniam planui, 3 fone, vienas ryškus/silpnas ir vienas paryškintas). Taigi 80x30 ekranui reikės 2400x2 = 4800 baitų, kurie tilps į mega, bet ne į Uno.

5 veiksmas: rodymas

Rodo
Rodo
Rodo
Rodo
Rodo
Rodo

Viršuje yra kiekvieno atskiro ekrano nuotraukos. Kiekvieno ekrano priekyje ir gale yra nuotraukų ir jos atstovauja daugeliui „ebay“ar panašių prekių ženklų. Kai kurie yra I2C, kai kurie yra lygiagretūs, kai kurie turi didesnius šriftus, kai kurie gali rodyti visus 80 stulpelių, tinkamų „Wordstar“ir kitoms senoms teksto apdorojimo programoms. Arduino kodo tekste yra daugiau informacijos.

6 žingsnis: schema

Žemiau yra du failai. Jie vadinami.txt, nes „Instructables“netvarko.zip failų. Atsisiųskite juos ir pervardykite kaip.zip.

Yra schema ir lentos išdėstymas kaip pdf failai. Taip pat yra paketas „Seeed PCB“. Tai yra gerberiai ir, jei einate į „Seeed“ir įkeliate tai, jame turėtų būti rodomi gerberiai, tada galėsite gauti PCB. 14 segmentų plokštė yra didelė ir kainuoja šiek tiek daugiau, tačiau mažesnė tinka „Seeed“pageidaujamam 10x10 cm formatui, todėl yra gana pagrįsta 5 ar 10 plokščių - iš tikrųjų siuntimas kainuoja daugiau nei lentos.

Visiškai įmanoma naudoti daugelį ekranų, nereikalaujant PCB. Yra „PS2“lizdų modulių, RS232 skydų/modulių, kuriuos galima rasti „ebay“ar pan. Kai kurie ekranai, tokie kaip „I2C“, gali naudoti tik kelis prijungimo laidus. Kai kurie, pavyzdžiui, SSD1289 ekranai, yra su adapterių plokštėmis ir gali būti prijungti tiesiai prie „Mega“.

7 žingsnis: „Starburst“ekranas

„Starburst“ekranas
„Starburst“ekranas

Žvaigždžių pliūpsnio ekranas yra didesnė plokštė, o multipleksavimui atlikti naudojama „Nano“ir 74xx mikroschemų skaičius. Buvo atlikta daug eksperimentų, siekiant nustatyti, kiek ekranų galite multipleksuoti, kol jie tapo per silpni arba mirgėjimas tapo pernelyg pastebimas. Ekranai atkeliavo iš „Futurlec“https://www.futurlec.com/LEDDisp.shtml 14 segmentų ekranuose taip pat galima rašyti mažąsias raides ir prireikus jas galima pakeisti kodu. Pervardykite šiuos failus iš.txt į.zip

8 veiksmas: kodo pridėjimas kitiems ekranams

Galima pridėti kodą kitiems ekranams. Pirmasis žingsnis yra ką nors parodyti. Tai gali būti pikselis arba raidė. Tai daugiausia susiję su tvarkyklių paieška, atsisiuntimu, bandymu, suradimu, kompiliacija nebus atlikta, tada tos tvarkyklės pašalinimas, kad vėliau nesukeltų painiavos, o tada išbandyti naują. Kitas žingsnis yra gauti raidę, kuri būtų rodoma tinkama spalva, nes kai kurie ekranai, kurie atrodo identiški, iš tikrųjų pakeis spalvas. Laimei, paprastai tai pašalina tik vienas paleidimo kodo numeris. Kitas žingsnis - parašyti kelias eilutes, kad būtų apibrėžta, ar naudoti „uno“, ar „mega“, ekrano plotį, aukštį, šrifto dydį, klaviatūros smeigtukus ir naudojamus tvarkyklės failus. Jie prasideda kodo 39 eilutėje ir galite nukopijuoti esamų ekranų formatą.

Toliau eikite į 451 eilutę ir pridėkite pradžios kodą. Čia nustatote fono spalvą ir pasukimą bei inicijuojate ekraną.

Toliau eikite į 544 eilutę ir pridėkite kodą, kad būtų rodomas simbolis. Kai kuriais atvejais tai tik viena eilutė, pvz

my_lcd. Draw_Char (xPixel, yPixel, c, tftForecolor, tftBackcolor, 1, 0); // x, y, char, priekis, nugara, dydis, režimas

Toliau eikite į 664 eilutę ir pridėkite kodą, kad nupieštumėte pikselį. Vėlgi, kartais tai tik viena eilutė, pvz.:

tft.drawPixel (xPixel, yPixel, tftForecolor);

Galiausiai eikite į 727 eilutę ir pridėkite kodą, kad, pavyzdžiui, nubrėžtumėte vertikalią žymeklio liniją

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

Programa, atsižvelgdama į ekrano plotį ir šrifto dydį, surūšiuoja tokius dalykus kaip atminties rezervas ekrano buferiui.

9 žingsnis: „Wordstar“demonstracija

Tai buvo padaryta naudojant CP/M kompiuterį, ir čia yra daug variantų. Man reikėjo ką nors greitai nustatyti, todėl naudoju ESP32 („Google ESP32 CP/M“) emuliaciją. Yra daug kitų retro kompiuterių, pavyzdžiui, Grant Searle FPGA emuliacija ir RC2014 tiems, kurie nori naudoti tikrą Z80. Daugelis retrokompiuterių kaip ekranas dažniausiai naudoja kompiuterio terminalo programą, pvz., „Teraterm“. Daug derinant šį ANSI projektą reikėjo lygiagrečiai paleisti terminalo programą ir ANSI programą ir įsitikinti, kad ekranai atrodo vienodi.

10 žingsnis: tolesnės mintys

Didėjant ekranų dydžiui, jie tampa vis lėtesni. Piešiant simbolį reikia perbraižyti kiekvieną to simbolio pikselį, nes taip pat turi būti nupiešta fono spalva, taigi viskas priklauso nuo to, kaip greitai galite nupiešti pikselį. Yra tam tikrų patobulinimų, pavyzdžiui, jei ekranas negali neatsilikti nuo gaunamų duomenų, tiesiog išsaugokite tekstą ekrano buferyje ir tada perbraižykite visą ekraną, kai daugiau teksto neatsiranda. Daugelis ekranų, kuriuos matote išpardavimai rodo gražų paveikslėlį ekrane, tačiau jie gali nerodyti, kiek laiko užtruko tos nuotraukos rodymas, o kai kuriais atvejais tai gali trukti 5 ar daugiau sekundžių. „I2C“ir „SPI“puikiai tinka mažesniems ekranams, tačiau daugiau nei 50 stulpelių reikia 8 ar 16 bitų duomenų magistralės.

„Wordstar“yra šiek tiek sudėtinga naudoti esant 9600 baudų, o 19200 yra daug labiau tinkamas tekstui slinkti, tačiau ekranai tikrai negali neatsilikti.

Greičiausias ekranas, kurį naudojau, buvo sraigto mikroschemoje su dviem 8 bitų išoriniais 512 000 RAM lustais, kad būtų sukurta lygiagreti 16 bitų duomenų magistralė. Kiekvienas šriftas buvo iš anksto įkeltas į aviną. Duomenims į ekraną rodyti buvo naudojama 74xx skaitiklis. Tai reiškė, kad procesoriuje nebuvo jokių vidinių procesų, gaunančių ir išvedančių duomenis, o atnaujinimo dažnis buvo toks greitas, kaip sraigto lustas galėjo perjungti kaištį. Keista, kad ekranai sugebėjo tai išlaikyti, net esant 20 MHz dažniui, todėl buvo galima atnaujinti visą ekraną tik per 30 milisekundžių. Toks greitis yra pakankamai greitas, kad būtų galima sklandžiai slinkti, kaip matote mobiliuosiuose telefonuose.

Sraigto lustas buvo pažangiausias prieš daugiau nei dešimt metų, ir dabar yra daugiau galimybių, įskaitant ESP8266 ir ESP32, kuriose yra daug vidinio cilindro. Tačiau šiuose lustuose vis dar nėra daug kaiščių, todėl vis tiek gali būti naudinga naudoti seną skool būdą, kaip išorinis RAM lustas, kuris yra rodomas ekrane.

Didesniems ekranams gali būti pigiau naudoti LCD televizoriaus ekraną arba VGA ekraną ir pažvelgti į kai kuriuos koduotus ANSI emuliatorius, pvz., ESP32, kurie tiesiogiai varo VGA.

Tikiuosi, kad šis projektas jums bus naudingas.

Jamesas Moxhamas

Adelaidė, Australija

Rekomenduojamas: