Indholdsfortegnelse:

En samling ANSI -terminaler: 10 trin
En samling ANSI -terminaler: 10 trin

Video: En samling ANSI -terminaler: 10 trin

Video: En samling ANSI -terminaler: 10 trin
Video: Acceptance Sampling Contrasting the LQ vs the AQL for Product Inspections 2024, Juli
Anonim
En samling ANSI -terminaler
En samling ANSI -terminaler

Dette projekt startede som en måde at vise 80 søjletekst på et LCD-display, der er egnet til at køre en gammeldags tekstbehandler som Wordstar. Forskellige andre skærme blev tilføjet i størrelsen fra 0,96 til 6 tommer. Skærmene bruger et enkelt printkort samt en Arduino -skitse/et program.

Der er en seriel RS232 -forbindelse til tilslutning til en computer og et PS/2 -stik til et tastatur. Skærmene blev valgt til at repræsentere dem, der er almindeligt tilgængelige til rimelige priser. Afhængigt af den nødvendige hukommelse bruger skærmene en Arduino Nano, Uno eller Mega.

Trin 1: Oversigt over displays

Oversigt over displays
Oversigt over displays

Der er forskellige skærme med en opløsning på 480x320. Dette tillader en 9x5 skrifttype og 80 kolonne tekst. Der er forskellige tavler med 320x240 opløsning, med 9x5 skrifttyper og også en meget lille 7x3 skrifttype, der tillader 80 kolonnetekst. Der er også mindre tavler med 160x120 og 128x64 pixels. Også 20x4 og 16x2 tekstdisplays, og endelig et 12x2 fjorten segment starburst displaykort.

Nogle skærme bruger I2C, nogle er SPI og for de større skærme en 16 bit databus til hurtigere opdateringshastigheder.

Mindre skærme bruger Arduino Uno. Større brædder har brug for mere hukommelse, og brug derfor en Mega. Starburst displaybrættet bruger en Nano.

På dette tidspunkt kan jeg nævne, at billederne ikke gør retfærdighed over for mange af skærmene. Det lille hvide oled -display er meget skarpt og lyst, hvilket gjorde det sværere for kameraet at fokusere, og starburst -LED -displayet ser meget skarpere ud i virkeligheden.

Trin 2: Hardware

Hardware
Hardware

Printkortet er designet til at fungere med så mange skærme som muligt. Det er let at skifte mellem en Mega og Uno ved hjælp af fire jumpere. Der er spændingsdeler modstande til displays, der kører på 3V. I2C -stifter bringes ud i en gruppe, så skærme kan tilsluttes direkte. Terminalen kører med 9600 baud, og selvom dette kan øges, tegner mange af de større displays ikke meget hurtigere end dette. PS2 -tastaturet tilsluttes en DIN6 -stik. USB -tastaturer fungerer også med et billigt adapterstik. Du kan foretage en simpel loopback -test ved at slutte pin 2 og 3 på D9, og derefter vises tegn, der er indtastet på tastaturet, på displayet.

I nogle tilfælde er det ikke nødvendigt med et printkort, og det er muligt at få ting til at fungere med færdiglavede moduler til rådighed på ebay, f.eks. PS2-adaptere, RS232-adapterkort og displays, der kan tilsluttes direkte til arduino-kort.

Der er også et separat bord til starburst led displayet - se senere i denne instruktionsbog.

Trin 3: Software

Nedenfor er en fil kaldet Package.txt Dette er faktisk en.zip -fil, så download og omdøb den (Instructables tillader ikke zip -filer). Inkluderet er Arduino sketch/program, og dette er et enkelt program, der bruges af alle displays. Der er også alle.zip -filer til hver af skærmene.

I begyndelsen af programmet er en række #define udsagn. Fjern en kommentar til den, der svarer til displayet. Brug Tools/Board til at vælge Uno, Mega eller Nano. Skift af tavler er lige så enkelt som at ændre en linje i koden.

En af udfordringerne ved at arbejde med mange skærme er, at de alle synes at have brug for deres egne softwaredrivere. Disse er alle inkluderet i pakken. Test inkluderede at tage pakken og geninstallere den på en ny maskine helt fra bunden. Du kan også kilde kode fra Github og Adafruit og LCDWiki. Der er et par tilfælde, hvor nyere versioner ikke virker, så alle arbejdsversionerne er inkluderet i zip'en. Lejlighedsvis var der tilfælde, hvor en driver stoppede en anden, da de brugte det samme filnavn, men forskellige versioner. Der er en beskrivelse i kommentarerne øverst i programmet, der viser, hvordan hver driver installeres. De fleste installeres fra Arduino IDE med Sketch/Include Library/Add ZIP -bibliotek, og dette tager zip -filen og sætter den i c: / users / computername / mydocuments / arduino / libraries.

Hvis du kun bruger en skærm, behøver nogle af disse biblioteker ikke at blive installeret. I det mindste har du brug for de to tastaturfiler og den ene til det særlige display. Nogle skærme deler kode. Der er mere detaljerede instruktioner i kommentarerne øverst i programmet, herunder at få gfx -biblioteket fra Adafruit.

Da alle skærmene bruger den samme Arduino -skitse, er skiftende displays bare et spørgsmål om ikke at kommentere en af linjerne herunder:

// Forskellige skærme, lad en af følgende ukommenterede#definere DISPLAY_480X320_LCDWIKI_ILI9486 // 3,5 ", 480x320, tekst 80x32, mega, 16 bit, tilsluttes mega 36 pin (og 2 power pins). Http://www.lcdwiki.com /3.5inch_Arduino_Display-Mega2560. Langsommere end nogle af nedenstående muligheder, men en mere læselig skrifttype og større skærm, 5sec bootup //#define DISPLAY_480X320_MCUFRIEND_ILI9486 // 3,5 ", 480x320, tekst 80x32, mega, 5x9 skrifttype, kun til mega, men bruger bare uno pins, power, D0-D14, A0-A5, pænere skrifttype end ssd1289 40 pin modulet, men meget langsommere https://www.arduinolibraries.info/libraries/mcufriend_kbv https://github.com/adafruit/Adafruit -GFX-bibliotek //#definere DISPLAY_320X240_MCUFRIEND_ILI9341 // 2,4 ", 320x240, tekst 53x24, mega //#definere DISPLAY_320X240_SSD1289_40COL // 3,5", 320x240, tekst 40x20, mega, UTFT-bibliotek (ingen skrifttyper mindre end 8x12) Hurtig //#define DISPLAY_320X240_SSD1289_53COL // 3,5 ", 320x240, tekst 53x24, mega, 9x5 skrifttype, kan redigere skrifttype. Hurtig //#definere DISPLAY_320X240_SSD1289_80COL // 3,5", 320x240, tekst 80x30, mega, lille 7x3 skrifttype, kan redigere, hurtigere driver end de to ovenfor, hurtigste af alle disse som 16 bit direkte drev til skærmen frem for spi/i2c //#define DISPLAY_160X128_ST7735 // 1,8 ", 160x128, tekst 26x12, uno (ILI9341) SPI 128x160 //#define DISPLAY_128X64_OLED_WHITE // 0,96 ", 128x64, tekst 21x6, mega, I2C, oled hvid på sort (tft -biblioteket til dette kort plus al koden plus tastaturet løber tør for programlager, selvom rambehovet er meget lille, så kun kører på en mega) //#definere DISPLAY_20X4 // tekst 20x4, uno, LCD med I2C, tekst LCD https://www.arduino.cc/en/Reference/LiquidCrystal //#definere DISPLAY_16X2 // tekst 16x2, uno, tilsluttes uno, bruger stifter 4 til 10 //#define DISPLAY_STARBURST // tekst 12x2, nano, starburst display med nano controller //#define DISPLAY_320X240_QVGA_SPI_ILI9341 / /2,2 ", 320x240, tekst 11x8, uno, stor skrifttype, uno, 3v signaler, 9 pin SPI display se Bodmers instruktioner-uno https://www.instructables.com/id/Arduino-TFT-display-and-font- bibliotek/ få zip i bunden, og læg manuelt gfx og 9341 i arduino biblioteksmappen

Trin 4: ANSI -standarden

ANSI -standarden
ANSI -standarden

ANSI giver enkle kommandoer til at rydde skærmen, flytte markøren rundt og ændre farver. På et par af billederne er der en demo, der viser alle for- og baggrundsfarver. Disse er rød, gul, grøn, blå, cyan, magenta, sort, hvid, mørkegrå, lysegrå, og farverne kan være lyse eller svage, så der er 16 forgrunds- og 16 baggrundsfarver.

Det er ganske muligt at tænke på at tilføje i en 'grafik' tilstand, hvor du kan tegne meget højere opløsning billeder på pixelniveau og med 256 eller flere farver. De største begrænsninger er Arduinoens interne hukommelse og den tid, det tager at sende et billede ned af et serielt link på 9600 baud.

Koden har brug for en byte for at gemme tegnet og en byte for at gemme farverne (3 bit til forgrunden, 3 til baggrunden, en til lys/dæmpet og en til fed). Så en 80x30 -skærm skal bruge 2400x2 = 4800 bytes, som passer i en Mega, men ikke en Uno.

Trin 5: Viser

Viser
Viser
Viser
Viser
Viser
Viser

Ovenfor er fotos af hvert enkelt display. Der er fotos fra forsiden og bagsiden af hver skærm, og de repræsenterer mange af de mærker, der er tilgængelige på ebay eller lignende. Nogle er I2C, nogle er parallelle, nogle har større skrifttyper, nogle kan vise hele 80 kolonner, der er velegnede til Wordstar og andre gamle tekstbehandlingsprogrammer. Der er flere detaljer i teksten til arduino -koden.

Trin 6: Skematisk

Nedenfor er to filer. De navngives som.txt, da Instructables ikke håndterer.zip -filer. Download dem og omdøb dem til.zip.

Der er skematisk og tavlelayoutet som pdf -filer. Der er også en pakke til Seeed PCB. Dette er gerberne, og hvis du går til Seeed og uploader dette, skal det vise gerberne, og du kan derefter få lavet PCB'er. 14 -segmentet bord er stort og koster en del mere, men det mindre passer i Seeed foretrukne 10x10cm format, så det er ganske rimeligt for 5 eller 10 boards - faktisk koster forsendelse mere end brædderne.

Det er ganske muligt at bruge mange af skærmene uden at skulle bruge et printkort. Der er PS2 stikmoduler, RS232 skjolde/moduler alle tilgængelige på ebay eller lignende. Nogle skærme som I2C kan bare bruge et par tilslutningskabler. Nogle som SSD1289 -skærme leveres med adapterkort og kan sluttes direkte til en Mega.

Trin 7: Starburst Display

Starburst Display
Starburst Display

Starburst -displayet er et større bord og bruger en Nano og et antal 74xx -chips til multiplexering. Der var mange eksperimenter for at bestemme, hvor mange skærme du kunne multiplexere, før de blev for svage eller flimren blev for mærkbar. Skærmene kom fra Futurlec https://www.futurlec.com/LEDDisp.shtml De 14 segmentdisplays kan også lave små bogstaver, og disse kan om nødvendigt ændres i koden. Omdøb disse filer fra.txt til.zip

Trin 8: Tilføjelse af kode til andre skærme

Det er muligt at tilføje kode til andre displays. Det første trin er at få noget, hvad som helst, at vise. Det kan være en pixel eller et bogstav. Dette indebærer hovedsageligt at søge efter drivere, downloade en, teste den, finde den ikke vil kompilere og derefter afinstallere den driver, så den ikke forårsager forvirring senere, og derefter prøve en ny. Det næste trin er at få et bogstav til at blive vist i den korrekte farve, da nogle displays, der ser identiske ud, faktisk vil invertere farverne. Heldigvis vil normalt kun et nummer i opstartskoden løse dette. Næste trin er at skrive et par linjer for at definere, om der skal bruges en uno eller mega, skærmbredden, højden, skriftstørrelsen, tastaturnåle og hvilke driverfiler der skal bruges. Disse starter ved linje 39 i koden, og du kan kopiere formatet på de eksisterende skærme.

Næste er at gå ned til linje 451 og tilføje startkoden. Det er her, du indstiller baggrundsfarven og rotationen og starter displayet.

Næste er at gå til linje 544 og tilføje koden for at vise et tegn. I nogle tilfælde er dette kun en linje, f.eks

my_lcd. Draw_Char (xPixel, yPixel, c, tftForecolor, tftBackcolor, 1, 0); // x, y, char, fore, back, size, mode

Næste er at gå til linje 664 og tilføje koden for at tegne en pixel. Igen, nogle gange er dette kun en linje f.eks.:

tft.drawPixel (xPixel, yPixel, tftForecolor);

Gå til sidst til linje 727, og tilføj koden for at tegne en lodret linje for f.eks. Markøren

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

Programmet sorterer ting ud, som hvor meget hukommelse der skal tildeles til skærmbufferen baseret på skærmbredden og skrifttypestørrelsen.

Trin 9: Demonstration af Wordstar

Dette blev gjort ved hjælp af en CP/M -computer, og der er mange muligheder her. Jeg havde brug for noget hurtigt at konfigurere, så brugte en emulering på en ESP32 (Google ESP32 CP/M). Der er mange andre retrocomputere til rådighed, f.eks. Grant Searles FPGA -emulering og RC2014 for dem, der foretrækker at bruge en rigtig Z80. Mange retrocomputere har en tendens til at bruge et terminalprogram på en pc som display, f.eks. Teraterm. Meget debugging af dette ANSI -projekt involverede at køre et terminalprogram og ANSI -programmet parallelt og sikre, at skærmene så identiske ud.

Trin 10: Yderligere tanker

Når skærmene stiger i størrelse, bliver de langsommere og langsommere. Omtegning af et tegn indebærer at tegne hver pixel i det tegn, da baggrundsfarven også skal tegnes, så alt afhænger af, hvor hurtigt du kan tegne en pixel. Der er nogle tweaks, f.eks. Hvis en skærm ikke kan følge med i, at dataene kommer ind, skal du bare gemme teksten i skærmbufferen og derefter tegne en fuld skærm igen, når der ikke kommer mere tekst. Mange skærme, du ser for salg viser et smukt billede på skærmen, men hvad de måske ikke viser, er, hvor lang tid det tog at vise billedet, og i nogle tilfælde kan det være 5 sekunder eller mere. I2C og SPI er gode til de mindre skærme, men alt over omkring 50 kolonner har brug for en 8 eller 16 bit databus.

Wordstar er lidt uhåndterlig at bruge på 9600 baud, og 19200 er meget mere anvendelig til at rulle tekst, men skærmene kan virkelig ikke følge med.

Den hurtigste skærm, jeg har brugt, var på Propeller -chippen med to 8 -bit eksterne 512k ramchips, til at oprette en 16 -bit parallel databus. Hver skrifttype blev forudindlæst i vædderen. En kaskade af 74xx -modchips blev brugt til at klokke dataene ind i displayet. Dette betød, at der ikke var nogen intern behandling inden for CPU’en, der hentede og udsendte data, og opdateringshastigheden var så hurtig som Propeller -chippen kunne skifte en pin. Overraskende nok kunne skærmene følge med dette, selv ved 20Mhz, og det var derfor muligt at lave en fuldskærmsopdatering på kun 30 millisekunder. Den slags hastighed er hurtig nok til at rulle gnidningsløst, som du ser på mobiltelefoner.

Propellechippen var banebrydende for over ti år siden, og der er flere muligheder nu, herunder ESP8266 og ESP32, som har store mængder intern ram. Disse chips har dog stadig ikke et stort antal stifter, så der kan stadig være fortjeneste ved at bruge den gamle skolemåde til en ekstern ramchip, der er uret til displayet.

For større skærme kan det være billigere at bruge en LCD -tv -skærm eller VGA -skærm og se på nogle af de ANSI -emulatorer, der er blevet kodet, f.eks. ESP32, der driver VGA direkte.

Jeg håber, at du finder dette projekt nyttigt.

James Moxham

Adelaide, Australien

Anbefalede: