Spisu treści:

Zbiór terminali ANSI: 10 kroków
Zbiór terminali ANSI: 10 kroków

Wideo: Zbiór terminali ANSI: 10 kroków

Wideo: Zbiór terminali ANSI: 10 kroków
Wideo: Podstawy pracy w terminalu w systemie Linux 2024, Lipiec
Anonim
Zbiór terminali ANSI
Zbiór terminali ANSI

Projekt ten rozpoczął się jako sposób wyświetlania 80-kolumnowego tekstu na wyświetlaczu LCD, odpowiednim do uruchamiania staromodnego edytora tekstu, takiego jak Wordstar. Dodano różne inne wyświetlacze o rozmiarach od 0,96 do 6 cali. Wyświetlacze wykorzystują pojedynczą płytkę drukowaną, a także jeden szkic/program Arduino.

Istnieje szeregowe złącze RS232 do podłączenia do komputera i gniazdo PS/2 dla klawiatury. Wyświetlacze zostały wybrane tak, aby reprezentowały te powszechnie dostępne w rozsądnych cenach. W zależności od potrzebnej pamięci wyświetlacze wykorzystują Arduino Nano, Uno lub Mega.

Krok 1: Podsumowanie ekranów

Podsumowanie wyświetlaczy
Podsumowanie wyświetlaczy

Dostępne są różne wyświetlacze o rozdzielczości 480x320. Pozwala to na czcionkę 9x5 i tekst 80-kolumnowy. Istnieją różne tablice o rozdzielczości 320x240, z czcionkami 9x5, a także bardzo małą czcionką 7x3, aby umożliwić tekst 80-kolumnowy. Istnieją również mniejsze płyty o wymiarach 160x120 i 128x64 piksele. Ponadto wyświetlacze tekstowe 20x4 i 16x2 i wreszcie czternastosegmentowa tablica gwiaździsta 12x2 o wymiarach 12x2.

Niektóre wyświetlacze używają I2C, niektóre są SPI, a w przypadku większych wyświetlaczy 16-bitowa magistrala danych dla szybszej aktualizacji.

Mniejsze wyświetlacze wykorzystują Arduino Uno. Większe tablice potrzebują więcej pamięci, więc używaj Mega. Płytka wyświetlacza Starburst wykorzystuje Nano.

W tym miejscu mógłbym wspomnieć, że zdjęcia nie oddają sprawiedliwości wielu wyświetlaczom. Mały biały wyświetlacz OLED jest bardzo wyraźny i jasny, co utrudniło aparatowi ustawienie ostrości, a wyświetlacz LED Starburst wygląda znacznie ostrzej w prawdziwym życiu.

Krok 2: Sprzęt

Sprzęt komputerowy
Sprzęt komputerowy

PCB została zaprojektowana do pracy z jak największą liczbą wyświetlaczy. Za pomocą czterech zworek można łatwo zmienić Mega i Uno. Dla wyświetlaczy zasilanych napięciem 3V dostępne są rezystory dzielnika napięcia. Piny I2C są wyprowadzone w grupie, dzięki czemu wyświetlacze można podłączyć bezpośrednio. Terminal działa z prędkością 9600 bodów i chociaż można ją zwiększyć, wiele większych wyświetlaczy nie przerysuje się znacznie szybciej. Klawiaturę PS2 podłącza się do gniazda DIN6. Klawiatury USB będą działać również z tanią przejściówką. Możesz wykonać prosty test pętli zwrotnej, łącząc piny 2 i 3 na D9, a następnie znaki wpisane na klawiaturze pojawią się na wyświetlaczu.

W niektórych przypadkach płytka PCB nie jest potrzebna i możliwe jest uzyskanie pracy z gotowymi modułami dostępnymi w serwisie eBay, np. adapterami PS2, płytkami adapterów RS232 i wyświetlaczami, które podłącza się bezpośrednio do płyt arduino.

Istnieje również oddzielna tablica dla wyświetlacza LED Starburst - patrz dalej w tej instrukcji.

Krok 3: Oprogramowanie

Poniżej znajduje się plik o nazwie Package.txt W rzeczywistości jest to plik.zip, więc pobierz go i zmień jego nazwę (Instructables nie zezwala na pliki zip). W zestawie znajduje się szkic/program Arduino i jest to pojedynczy program używany przez wszystkie wyświetlacze. Istnieją również wszystkie pliki.zip dla każdego z wyświetlaczy.

Na początku programu znajduje się seria instrukcji #define. Odkomentuj ten, który odpowiada wyświetlaczowi. Użyj narzędzi/tablicy, aby wybrać Uno, Mega lub Nano. Zmiana tablic jest tak prosta, jak zmiana jednej linii w kodzie.

Jednym z wyzwań pracy z wieloma wyświetlaczami jest to, że wszystkie wydają się potrzebować własnych sterowników oprogramowania. Wszystkie są zawarte w pakiecie. Testy obejmowały pobranie pakietu i ponowne zainstalowanie go na nowej maszynie całkowicie od podstaw. Możesz także uzyskać kod źródłowy z Github i Adafruit oraz LCDWiki. Istnieje kilka przypadków, w których nowsze wersje nie działają, więc wszystkie działające wersje są zawarte w pliku zip. Czasami zdarzały się sytuacje, w których jeden sterownik przerywał działanie innego, ponieważ używał tej samej nazwy pliku, ale różnych wersji. W komentarzach na górze programu znajduje się opis pokazujący, jak zainstalować każdy sterownik. Większość jest instalowana z Arduino IDE z biblioteką Sketch/Include Library/Add ZIP, a to pobiera plik zip i umieszcza go w c:\users\computername\mydocuments\arduino\libraries.

Jeśli używasz tylko jednego wyświetlacza, niektóre z tych bibliotek nie będą musiały być instalowane. Potrzebujesz co najmniej dwóch plików klawiatury i jednego dla konkretnego wyświetlacza. Niektóre wyświetlają kod akcji. W komentarzach na górze programu znajdują się bardziej szczegółowe instrukcje, w tym pobieranie biblioteki gfx z Adafruit.

Ponieważ wszystkie wyświetlacze używają tego samego szkicu Arduino, zmiana wyświetlaczy to tylko kwestia odkomentowania jednej z poniższych linii:

// Różne wyświetlacze, pozostaw jeden z następujących niezakomentowanych#define DISPLAY_480X320_LCDWIKI_ILI9486 // 3,5", 480x320, tekst 80x32, mega, 16 bit, podłączany do mega 36 pinów (i 2 pinów zasilania).https://www.lcdwiki.com /3.5inch_Arduino_Display-Mega2560. Wolniej niż niektóre z poniższych opcji, ale bardziej czytelna czcionka i większy ekran, uruchamianie w ciągu 5 sekund //#define DISPLAY_480X320_MCUFRIEND_ILI9486 // 3,5", 480x320, tekst 80x32, mega, 5x9, tylko dla mega, ale używa tylko piny uno, zasilanie, D0-D14, A0-A5, ładniejsza czcionka niż moduł 40-pinowy ssd1289, ale dużo wolniejsza https://www.arduinolibraries.info/libraries/mcufriend_kbv https://github.com/adafruit/Adafruit -GFX-Library //#define DISPLAY_320X240_MCUFRIEND_ILI9341 // 2,4", 320x240, tekst 53x24, mega //#define DISPLAY_320X240_SSD1289_40COL // 3,5", 320x240, tekst 40x20, mega, biblioteka UTFT (bez czcionek mniejszych niż 8x12). Szybki //#define DISPLAY_320X240_SSD1289_53COL // 3,5", 320x240, tekst 53x24, mega, 9x5 czcionka, możliwość edycji czcionki. Szybki //#define DISPLAY_320X240_SSD1289_80COL // 3,5", 320x240, tekst 80x30, mega, mała czcionka 7x3, możliwość edycji czcionki, szybszy sterownik niż dwa powyższe, najszybszy z nich jako 16-bitowy bezpośredni napęd do wyświetlacza zamiast 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 biały na czarnym (biblioteka tft dla tej płyty plus cały kod plus klawiatura zabrakło miejsca na programy, mimo że potrzeby pamięci RAM są bardzo małe, więc tylko działa na mega) //#define DISPLAY_20X4 // tekst 20x4, uno, LCD z I2C, tekst LCD https://www.arduino.cc/en/Reference/LiquidCrystal //#define DISPLAY_16X2 // tekst 16x2, uno, podłącza się do uno, używa pinów 4 do 10 //#define DISPLAY_STARBURST // tekst 12x2, nano, wyświetlacz starburst z nanokontrolerem //#define DISPLAY_320X240_QVGA_SPI_ILI9341 / / 2.2", 320x240, tekst 11x8, uno, duża czcionka, uno, sygnały 3v, 9-pinowy wyświetlacz SPI patrz Bodmer's Instructables - uno https://www.instructables.com/id/Arduino-TFT-display-and-font- biblioteka / pobierz zip na dole i ręcznie umieść gfx i 9341 w folderze biblioteki arduino

Krok 4: Standard ANSI

Standard ANSI
Standard ANSI

ANSI pozwala na proste polecenia do czyszczenia ekranu, przesuwania kursora i zmiany kolorów. Na kilku zdjęciach znajduje się demo pokazujące wszystkie kolory pierwszego planu i tła. Są to: czerwony, żółty, zielony, niebieski, cyjan, magenta, czarny, biały, ciemnoszary, jasnoszary, a kolory mogą być jasne lub przyciemnione, więc jest 16 kolorów pierwszego planu i 16 kolorów tła.

Można pomyśleć o dodawaniu w trybie „grafiki”, w którym można rysować obrazy o znacznie wyższej rozdzielczości na poziomie pikseli iz 256 lub więcej kolorami. Główne ograniczenia to pamięć wewnętrzna Arduino i czas potrzebny do wysłania obrazu łączem szeregowym z prędkością 9600 bodów.

Kod potrzebuje jednego bajtu do przechowywania znaku i jednego bajtu do przechowywania kolorów (3 bity na pierwszy plan, 3 na tło, jeden na jasne/ciemne i jeden na pogrubienie). Tak więc wyświetlacz 80x30 będzie potrzebował 2400x2=4800 bajtów, co zmieści się w Mega, ale nie w Uno.

Krok 5: Wyświetlacze

Wyświetlacze
Wyświetlacze
Wyświetlacze
Wyświetlacze
Wyświetlacze
Wyświetlacze

Powyżej znajdują się zdjęcia każdego pojedynczego wyświetlacza. Z przodu i z tyłu każdego wyświetlacza znajdują się zdjęcia, które przedstawiają wiele marek dostępnych w serwisie eBay lub podobnym. Niektóre są I2C, niektóre są równoległe, niektóre mają większe czcionki, niektóre mogą wyświetlać pełne 80 kolumn, odpowiednie dla Wordstara i innych starych programów do przetwarzania tekstu. Więcej szczegółów znajduje się w tekście kodu arduino.

Krok 6: Schemat

Poniżej znajdują się dwa pliki. Są one nazywane.txt, ponieważ Instructables nie obsługują plików.zip. Pobierz je i zmień ich nazwę na.zip.

Jest schemat i układ płytki w postaci plików pdf. Jest też opakowanie na PCB Seeed. To są gerbery i jeśli przejdziesz do Seeed i prześlesz to, powinno wyświetlić się gerbery, a następnie możesz wykonać PCB. 14-segmentowa plansza jest duża i kosztuje trochę więcej, ale mniejsza mieści się w preferowanym formacie Seeed 10x10cm, więc jest całkiem rozsądna dla 5 lub 10 plansz - w rzeczywistości wysyłka kosztuje więcej niż deski.

Całkiem możliwe jest używanie wielu wyświetlaczy bez konieczności stosowania płytki drukowanej. Istnieją moduły gniazd PS2, osłony/moduły RS232, wszystkie dostępne w serwisie eBay lub podobnym. Niektóre wyświetlacze, takie jak I2C, mogą używać tylko kilku przewodów połączeniowych. Niektóre, takie jak wyświetlacze SSD1289, są dostarczane z płytami adaptera i można je podłączyć bezpośrednio do Mega.

Krok 7: Wyświetlacz Starburst

Wyświetlacz Starburst
Wyświetlacz Starburst

Wyświetlacz Starburst jest większą płytą i wykorzystuje do multipleksowania układ Nano i kilka chipów 74xx. Przeprowadzono wiele eksperymentów, aby określić, ile ekranów można multipleksować, zanim staną się zbyt ciemne lub migotanie stanie się zbyt zauważalne. Wyświetlacze pochodziły z firmy Futurlec https://www.futurlec.com/LEDDisp.shtml Wyświetlacze 14-segmentowe mogą również pisać małymi literami i w razie potrzeby można je modyfikować w kodzie. Zmień nazwy tych plików z.txt na.zip

Krok 8: Dodawanie kodu dla innych wyświetlaczy

Możliwe jest dodanie kodu dla innych wyświetlaczy. Pierwszym krokiem jest zdobycie czegoś, czegokolwiek do wyświetlenia. Może to być piksel lub litera. Wiąże się to głównie z wyszukaniem sterowników, pobraniem jednego, przetestowaniem go, stwierdzeniem, że się nie skompiluje, a następnie odinstalowaniem tego sterownika, aby później nie powodował zamieszania, a następnie wypróbowaniem nowego. Następnym krokiem jest uzyskanie litery do wyświetlenia we właściwym kolorze, ponieważ niektóre wyświetlacze, które wyglądają identycznie, w rzeczywistości odwrócą kolory. Na szczęście zwykle wystarczy jeden numer w kodzie startowym. Następnym krokiem jest napisanie kilku linijek, aby określić, czy użyć uno czy mega, szerokość wyświetlacza, wysokość, rozmiar czcionki, piny klawiatury i jakich plików sterownika użyć. Zaczynają się one w wierszu 39 w kodzie i można skopiować format istniejących wyświetlaczy.

Następnie przejdź do wiersza 451 i dodaj kod startowy. Tutaj ustawiasz kolor tła i obrót oraz inicjujesz wyświetlanie.

Następnie przejdź do linii 544 i dodaj kod, aby wyświetlić znak. W niektórych przypadkach jest to tylko jedna linia, np.

my_lcd. Draw_Char(xPixel, yPixel, c, tftForecolor, tftBackcolor, 1, 0); // x, y, znak, przód, tył, rozmiar, tryb

Następnie przejdź do linii 664 i dodaj kod, aby narysować piksel. Znowu, czasami jest to tylko jedna linia, np.:

tft.drawPixel(xPixel, yPixel, tftForecolor);

Na koniec przejdź do linii 727 i dodaj kod, aby na przykład narysować pionową linię dla kursora

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

Program sortuje takie rzeczy, jak ilość pamięci do przydzielenia dla bufora ekranu na podstawie szerokości ekranu i rozmiaru czcionki.

Krok 9: Demonstracja Wordstar

Dokonano tego za pomocą komputera CP/M i dostępnych jest tutaj wiele opcji. Potrzebowałem czegoś szybkiego do skonfigurowania, więc użyłem emulacji na ESP32 (Google ESP32 CP/M). Dostępnych jest wiele innych komputerów retro, na przykład emulacja FPGA Grant Searle i RC2014 dla tych, którzy wolą używać prawdziwego Z80. Wiele retrokomputerów ma tendencję do używania jako wyświetlacza programu terminala na komputerze PC, np. Teraterm. Wiele debugowania tego projektu ANSI wymagało równoległego uruchamiania programu terminalowego i programu ANSI oraz upewniania się, że ekrany wyglądają identycznie.

Krok 10: Dalsze myśli

W miarę jak wyświetlacze powiększają się, stają się coraz wolniejsze. Przerysowanie postaci polega na przerysowaniu każdego piksela w tym znaku, ponieważ kolor tła również musi zostać narysowany, więc wszystko sprowadza się do tego, jak szybko można narysować piksel. Istnieje kilka poprawek, na przykład jeśli wyświetlacz nie nadąża za przychodzącymi danymi, po prostu zapisz tekst w buforze ekranu, a następnie wykonaj przerysowanie na pełnym ekranie, gdy nie będzie więcej tekstu. Wiele wyświetlaczy, które widzisz wyprzedaż pokazuje ładny obrazek na ekranie, ale mogą nie pokazywać, ile czasu zajęło wyświetlenie tego obrazu, aw niektórych przypadkach może to być 5 sekund lub więcej. I2C i SPI są świetne dla mniejszych wyświetlaczy, ale wszystko powyżej około 50 kolumn wymaga 8 lub 16-bitowej szyny danych.

Wordstar jest trochę nieporęczny w użyciu przy prędkości 9600 bodów, a 19200 jest znacznie bardziej użyteczny do przewijania tekstu, ale wyświetlacze naprawdę nie nadążają.

Najszybszy wyświetlacz, jakiego użyłem, był na chipie Propeller z dwoma 8-bitowymi zewnętrznymi chipami RAM 512k, aby stworzyć 16-bitową, równoległą magistralę danych. Każda czcionka została wstępnie załadowana do pamięci RAM. Kaskada chipów licznika 74xx została wykorzystana do taktowania danych na wyświetlacz. Oznaczało to, że nie było wewnętrznego przetwarzania w procesorze pobierającym i wysyłającym dane, a częstotliwość odświeżania była tak szybka, jak chip Propeller mógł przełączać pin. Co zaskakujące, wyświetlacze były w stanie nadążyć za tym, nawet przy 20 MHz, dzięki czemu można było wykonać aktualizację pełnoekranową w zaledwie 30 milisekund. Ten rodzaj szybkości jest wystarczająco szybki, aby przewijać płynnie, tak jak w telefonach komórkowych.

Chip Propeller był najnowocześniejszy ponad dziesięć lat temu, a teraz jest więcej opcji, w tym ESP8266 i ESP32, które mają dużą ilość wewnętrznego suwaka. Jednak te układy nadal nie mają dużej liczby pinów, więc nadal może być uzasadnione użycie starej metody zewnętrznego układu pamięci RAM, który jest taktowany do wyświetlacza.

W przypadku większych wyświetlaczy taniej może być użycie telewizora LCD lub ekranu VGA i przyjrzenie się niektórym emulatorom ANSI, które zostały zakodowane, np. ESP32, które bezpośrednio obsługują VGA.

Mam nadzieję, że ten projekt okaże się przydatny.

James Moxham

Adelajda, Australia

Zalecana: