Sommario:

Una raccolta di terminali ANSI: 10 passaggi
Una raccolta di terminali ANSI: 10 passaggi

Video: Una raccolta di terminali ANSI: 10 passaggi

Video: Una raccolta di terminali ANSI: 10 passaggi
Video: UNA GIOSTRA SI STACCA A ROMA! 2024, Dicembre
Anonim
Una collezione di terminali ANSI
Una collezione di terminali ANSI

Questo progetto è iniziato come un modo per visualizzare un testo di 80 colonne su un display LCD adatto per l'esecuzione di un elaboratore di testi vecchio stile come Wordstar. Sono stati aggiunti vari altri display di dimensioni comprese tra 0,96 e 6 pollici. I display utilizzano un singolo PCB e uno sketch/programma Arduino.

C'è una connessione seriale RS232 per il collegamento a un computer e una presa PS/2 per una tastiera. I display sono stati scelti per rappresentare quelli comunemente disponibili a prezzi ragionevoli. A seconda della memoria necessaria, i display utilizzano un Arduino Nano, Uno o Mega.

Passaggio 1: riepilogo dei display

Riepilogo dei display
Riepilogo dei display

Ci sono vari display con risoluzione 480x320. Ciò consente un carattere 9x5 e un testo di 80 colonne. Ci sono varie schede con risoluzione 320x240, con font 9x5 e anche un font 7x3 molto piccolo per consentire 80 colonne di testo. Ci sono anche schede più piccole con 160x120 e 128x64 pixel. Inoltre display di testo 20x4 e 16x2, e infine un tabellone starburst a quattordici segmenti 12x2.

Alcuni display utilizzano I2C, alcuni sono SPI e per i display più grandi, un bus dati a 16 bit per velocità di aggiornamento più elevate.

I display più piccoli utilizzano Arduino Uno. Le schede più grandi richiedono più memoria e quindi usa un Mega. Il tabellone starburst utilizza un Nano.

A questo punto potrei menzionare che le foto non rendono giustizia a molti dei display. Il minuscolo display oled bianco è molto nitido e luminoso, il che ha reso più difficile la messa a fuoco della fotocamera e il display a led starburst sembra molto più nitido nella vita reale.

Passaggio 2: hardware

Hardware
Hardware

Il PCB è stato progettato per funzionare con il maggior numero possibile di display. È facile passare da Mega a Uno utilizzando quattro ponticelli. Ci sono resistori divisori di tensione per display che funzionano a 3V. I pin I2C vengono inseriti in un gruppo in modo che i display possano essere collegati direttamente. Il terminale funziona a 9600 baud e, sebbene questo possa essere aumentato, molti dei display più grandi non verranno ridisegnati molto più velocemente di così. La tastiera PS2 si collega a una presa DIN6. Le tastiere USB funzioneranno anche con un adattatore economico. Puoi fare un semplice test di loopback unendo i pin 2 e 3 sul D9 e poi i caratteri digitati sulla tastiera appariranno sul display.

In alcuni casi non è necessario un PCB ed è possibile far funzionare le cose con moduli prefabbricati disponibili su ebay, ad esempio adattatori PS2, schede adattatrici RS232 e display che si collegano direttamente alle schede arduino.

C'è anche una scheda separata per il display a led starburst - vedi più avanti in questo Instructable.

Passaggio 3: software

Di seguito è riportato un file chiamato Package.txt Questo è in realtà un file.zip, quindi scaricalo e rinominalo (Instructables non consente file zip). È incluso lo sketch/programma Arduino e questo è un singolo programma utilizzato da tutti i display. Ci sono anche tutti i file.zip per ciascuno dei display.

All'inizio del programma ci sono una serie di istruzioni #define. Decommenta quello che corrisponde al display. Usa Strumenti/Scheda per selezionare Uno, Mega o Nano. Cambiare le schede è semplice come cambiare una riga nel codice.

Una delle sfide nel lavorare con molti display è che tutti sembrano aver bisogno dei propri driver software. Questi sono tutti inclusi nel pacchetto. Il test includeva il prendere il pacchetto e reinstallarlo su una nuova macchina completamente da zero. Puoi anche codice sorgente da Github e Adafruit e LCDWiki. Ci sono un paio di casi in cui le versioni più recenti non funzionano, quindi tutte le versioni funzionanti sono incluse nello zip. Occasionalmente ci sono stati casi in cui un driver ha interrotto il funzionamento di un altro poiché utilizzavano lo stesso nome file ma versioni diverse. C'è una descrizione nei commenti nella parte superiore del programma che mostra come installare ciascun driver. La maggior parte viene installata dall'IDE Arduino con Sketch/Include Library/Add ZIP library e questo prende il file zip e lo inserisce in c:\users\computername\mydocuments\arduino\libraries.

Se stai utilizzando un solo display, alcune di queste librerie non dovranno essere installate. Come minimo sono necessari i due file della tastiera e quello per il particolare display. Alcuni display condividono il codice. Ci sono istruzioni più dettagliate nei commenti nella parte superiore del programma, incluso ottenere la libreria gfx da Adafruit.

Poiché tutti i display utilizzano lo stesso sketch Arduino, cambiare display è solo questione di decommentare una delle righe seguenti:

// Display diversi, lascia uno dei seguenti non commentati#define DISPLAY_480X320_LCDWIKI_ILI9486 // 3.5", 480x320, testo 80x32, mega, 16 bit, si collega a mega 36 pin (e 2 pin di alimentazione).https://www.lcdwiki.com /3.5inch_Arduino_Display-Mega2560. Più lento di alcune delle opzioni seguenti ma con un carattere più leggibile e uno schermo più grande, avvio di 5 secondi //#define DISPLAY_480X320_MCUFRIEND_ILI9486 // 3.5", 480x320, testo 80x32, mega, font 5x9, solo per mega ma utilizza solo i pin uno, power, D0-D14, A0-A5, font più bello del modulo 40 pin ssd1289 ma molto più lento https://www.arduinolibraries.info/libraries/mcufriend_kbv https://github.com/adafruit/Adafruit -GFX-Library //#define DISPLAY_320X240_MCUFRIEND_ILI9341 // 2.4", 320x240, testo 53x24, mega //#define DISPLAY_320X240_SSD1289_40COL // 3.5", 320x240, testo 40x20, mega, libreria UTFT (nessun carattere inferiore a 8x12). Veloce //#define DISPLAY_320X240_SSD1289_53COL // 3.5", 320x240, testo 53x24, mega, font 9x5, può modificare il carattere. Veloce //#define DISPLAY_320X240_SSD1289_80COL // 3.5", 320x240, testo 80x30, mega, font minuscolo 7x3, può modificare il carattere, driver più veloce dei due sopra, il più veloce di tutti questi come drive diretto a 16 bit al display piuttosto che spi/i2c //#define DISPLAY_160X128_ST7735 // 1.8", 160x128, text 26x12, uno (ILI9341) SPI 128x160 //#define DISPLAY_128X64_OLED_WHITE // 0,96", 128x64, testo 21x6, mega, I2C, oled bianco su nero (la libreria tft per questa scheda più tutto il codice più la tastiera esaurisce la memoria del programma, anche se le esigenze di ram sono molto ridotte, quindi solo gira su un mega) //#define DISPLAY_20X4 // text 20x4, uno, LCD with I2C, text LCD https://www.arduino.cc/en/Reference/LiquidCrystal //#define DISPLAY_16X2 // text 16x2, uno, si collega a uno, usa i pin da 4 a 10 //#define DISPLAY_STARBURST // testo 12x2, nano, display starburst con nano controller //#define DISPLAY_320X240_QVGA_SPI_ILI9341 / / 2.2", 320x240, testo 11x8, uno, caratteri grandi, uno, segnali 3v, display SPI a 9 pin vedere Bodmer's Instructables - uno https://www.instructables.com/id/Arduino-TFT-display-and-font- libreria/ prendi lo zip in basso e metti manualmente gfx e 9341 nella cartella della libreria arduino

Passaggio 4: lo standard ANSI

Lo standard ANSI
Lo standard ANSI

ANSI consente semplici comandi per cancellare lo schermo, spostare il cursore e cambiare i colori. Su alcune delle foto c'è una demo che mostra tutti i colori di primo piano e di sfondo. Questi sono rosso, giallo, verde, blu, ciano, magenta, nero, bianco, grigio scuro, grigio chiaro e i colori possono essere luminosi o sbiaditi, quindi ci sono 16 colori di primo piano e 16 di sfondo.

È abbastanza possibile pensare di aggiungere una modalità 'grafica' in cui è possibile disegnare immagini con una risoluzione molto più alta a livello di pixel e con 256 o più colori. Le principali limitazioni sono la memoria interna dell'Arduino e il tempo necessario per inviare un'immagine su un collegamento seriale a 9600 baud.

Il codice necessita di un byte per memorizzare il carattere e un byte per memorizzare i colori (3 bit per il primo piano, 3 per lo sfondo, uno per chiaro/scuro e uno per il grassetto). Quindi un display 80x30 avrà bisogno di 2400x2=4800 byte, che si adatteranno a un Mega ma non a Uno.

Passaggio 5: display

display
display
display
display
display
display

Sopra sono le foto di ogni singolo display. Ci sono foto della parte anteriore e posteriore di ogni display e rappresentano molti dei marchi disponibili su ebay o simili. Alcuni sono I2C, alcuni sono paralleli, alcuni hanno caratteri più grandi, alcuni possono visualizzare 80 colonne complete adatte per Wordstar e altri vecchi programmi di elaborazione testi. C'è più dettaglio nel testo del codice arduino.

Passaggio 6: schema

Di seguito sono riportati due file. Sono denominati.txt poiché Instructables non gestisce i file.zip. Scaricali e rinominali come.zip.

C'è lo schema e il layout della scheda come file pdf. C'è anche un pacchetto per Seeed PCB. Questi sono i gerber e se vai su Seeed e carichi questo dovrebbe visualizzare i gerber e puoi quindi ottenere PCB realizzati. La scheda a 14 segmenti è grande e costa un po' di più, ma quella più piccola si adatta al formato 10x10 cm preferito da Seeed, quindi è abbastanza ragionevole per 5 o 10 schede - infatti la spedizione costa più delle schede.

È abbastanza possibile utilizzare molti dei display senza bisogno di un PCB. Ci sono moduli socket PS2, shield/moduli RS232 tutti disponibili su ebay o simili. Alcuni display come quelli I2C possono utilizzare solo pochi cavi di collegamento. Alcuni, come i display SSD1289, sono dotati di schede adattatrici e possono essere collegati direttamente a un Mega.

Passaggio 7: visualizzazione Starburst

Display a stella
Display a stella

Il display starburst è una scheda più grande e utilizza un Nano e un numero di chip 74xx per eseguire il multiplexing. C'erano molti esperimenti per determinare quanti schermi si potevano multiplexare prima che diventassero troppo fiochi o lo sfarfallio diventasse troppo evidente. I display provengono da Futurlec https://www.futurlec.com/LEDDisp.shtml I display a 14 segmenti possono anche fare lettere minuscole e queste possono essere modificate nel codice se necessario. Rinomina questi file da.txt a.zip

Passaggio 8: aggiunta di codice per altri display

È possibile aggiungere codice per altri display. Il primo passo è ottenere qualcosa, qualsiasi cosa, da mostrare. Può essere un pixel o una lettera. Ciò comporta principalmente la ricerca di driver, scaricarne uno, testarlo, trovarlo non verrà compilato, quindi disinstallare quel driver in modo che non causi confusione in seguito, quindi provarne uno nuovo. Il prossimo passo è ottenere una lettera da visualizzare nel colore corretto, poiché alcuni display che sembrano identici in realtà invertiranno i colori. Fortunatamente di solito solo un numero nel codice di avvio risolverà questo problema. Il prossimo passo è scrivere alcune righe per definire se utilizzare uno o mega, la larghezza del display, l'altezza, la dimensione del carattere, i pin della tastiera e quali file del driver utilizzare. Questi iniziano alla riga 39 del codice ed è possibile copiare il formato dei display esistenti.

Il prossimo è scendere alla riga 451 e aggiungere il codice di avvio. Qui è dove si imposta il colore di sfondo e la rotazione e si avvia la visualizzazione.

Il prossimo è andare alla riga 544 e aggiungere il codice per visualizzare un carattere. In alcuni casi questa è solo una riga, ad es

my_lcd. Draw_Char(xPixel, yPixel, c, tftForecolor, tftBackcolor, 1, 0); // x, y, carattere, avanti, indietro, dimensione, modalità

Il prossimo è andare alla riga 664 e aggiungere il codice per disegnare un pixel. Di nuovo, a volte questa è solo una riga, ad esempio:

tft.drawPixel(xPixel, yPixel, tftForecolor);

Infine vai alla riga 727 e aggiungi il codice per disegnare una linea verticale per il cursore, ad esempio

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

Il programma risolve cose come la quantità di memoria da allocare per il buffer dello schermo in base alla larghezza dello schermo e alla dimensione del carattere.

Passaggio 9: dimostrazione di Wordstar

Questo è stato fatto utilizzando un computer CP/M e ci sono molte opzioni disponibili qui. Avevo bisogno di qualcosa di veloce da configurare, quindi ho usato un'emulazione su un ESP32 (Google ESP32 CP/M). Sono disponibili molti altri computer retrò, ad esempio l'emulazione FPGA di Grant Searle e l'RC2014 per coloro che preferiscono utilizzare un vero Z80. Molti retrocomputer tendono a utilizzare un programma terminale su un PC come display, ad esempio Teraterm. Un sacco di debug di questo progetto ANSI ha coinvolto l'esecuzione di un programma terminale e il programma ANSI in parallelo e assicurarsi che le schermate fossero identiche.

Passaggio 10: ulteriori pensieri

Man mano che i display aumentano di dimensioni, diventano sempre più lenti. Ridisegnare un personaggio implica ridisegnare ogni pixel in quel personaggio poiché anche il colore di sfondo deve essere disegnato, quindi tutto si riduce alla velocità con cui puoi disegnare un pixel. Ci sono alcune modifiche, ad esempio se un display non può tenere il passo con i dati in arrivo, basta memorizzare il testo nel buffer dello schermo e quindi eseguire un ridisegno a schermo intero quando non arriva più testo. Molti display che vedi per la vendita mostra una bella immagine sullo schermo, ma ciò che potrebbe non mostrare è il tempo impiegato per visualizzare quell'immagine e in alcuni casi può essere di 5 secondi o più. I2C e SPI sono ottimi per i display più piccoli, ma qualsiasi cosa oltre le 50 colonne ha bisogno di un bus dati a 8 o 16 bit.

Wordstar è un po' ingombrante da usare a 9600 baud e 19200 è molto più utilizzabile per lo scorrimento del testo, ma i display non riescono davvero a tenere il passo.

Il display più veloce che ho usato era sul chip Propeller con due chip ram esterni da 512k a 8 bit, per creare un bus dati parallelo a 16 bit. Ogni font è stato precaricato nella ram. Una cascata di chip contatore 74xx è stata utilizzata per inviare i dati al display. Ciò significava che non vi era alcuna elaborazione interna all'interno della CPU per il recupero e l'output dei dati e la frequenza di aggiornamento era veloce quanto il chip Propeller poteva attivare un pin. Sorprendentemente, i display sono stati in grado di tenere il passo, anche a 20 Mhz, e quindi è stato possibile eseguire un aggiornamento a schermo intero in soli 30 millisecondi. Questo tipo di velocità è abbastanza veloce per scorrere senza intoppi, come si vede sui telefoni cellulari.

Il chip Propeller era all'avanguardia oltre dieci anni fa e ora ci sono più opzioni tra cui ESP8266 ed ESP32 che hanno grandi quantità di ram interno. Tuttavia, quei chip non hanno ancora un numero enorme di pin, quindi potrebbe esserci ancora merito nell'usare il modo vecchio stile di un chip ram esterno che viene sincronizzato sul display.

Per schermi più grandi potrebbe essere più economico utilizzare uno schermo TV LCD o uno schermo VGA e guardare alcuni degli emulatori ANSI che sono stati codificati, ad esempio l'ESP32, che pilota direttamente il VGA.

Spero che trovi utile questo progetto.

James Moxham

Adelaide, Australia

Consigliato: