Оглавление:

Коллекция терминалов ANSI: 10 шагов
Коллекция терминалов ANSI: 10 шагов

Видео: Коллекция терминалов ANSI: 10 шагов

Видео: Коллекция терминалов ANSI: 10 шагов
Видео: 10 простых шагов по НАСТРОЙКЕ Китайской версии телефона! 2024, Ноябрь
Anonim
Коллекция терминалов ANSI
Коллекция терминалов ANSI

Этот проект начался как способ отображения текста в 80 столбцов на ЖК-дисплее, подходящем для работы старомодного текстового процессора, такого как Wordstar. Были добавлены различные другие дисплеи размером от 0,96 до 6 дюймов. В дисплеях используется одна печатная плата, а также один эскиз / программа Arduino.

Имеется последовательное соединение RS232 для подключения к компьютеру и разъем PS / 2 для клавиатуры. Дисплеи были выбраны так, чтобы они были общедоступными по разумным ценам. В зависимости от необходимой памяти в дисплеях используются Arduino Nano, Uno или Mega.

Шаг 1. Сводка дисплеев

Сводка дисплеев
Сводка дисплеев

Существуют различные дисплеи с разрешением 480x320. Это позволяет использовать шрифт 9x5 и текст в 80 столбцов. Существуют различные платы с разрешением 320x240 пикселей, со шрифтами 9x5 и очень маленьким шрифтом 7x3, позволяющим разместить текст в 80 столбцов. Существуют также платы меньшего размера с разрешением 160x120 и 128x64 пикселей. Также текстовые дисплеи 20x4 и 16x2 и, наконец, четырнадцатисегментная панель отображения звездообразования 12x2.

Некоторые дисплеи используют I2C, некоторые - SPI, а для больших дисплеев - 16-битную шину данных для более быстрой скорости обновления.

Меньшие дисплеи используют Arduino Uno. Платы большего размера требуют больше памяти, поэтому используйте Mega. Плата отображения звездообразования использует Nano.

Здесь я мог бы упомянуть, что фотографии не отражают многие дисплеи. Крошечный белый OLED-дисплей очень четкий и яркий, что затрудняет фокусировку камеры, а светодиодный дисплей со вспышкой звездообразования выглядит намного четче в реальной жизни.

Шаг 2: Оборудование

Аппаратное обеспечение
Аппаратное обеспечение

Печатная плата рассчитана на работу с максимально возможным количеством дисплеев. Легко переключаться между Mega и Uno с помощью четырех перемычек. Существуют резисторы делителя напряжения для дисплеев, работающих от 3 В. Контакты I2C вынесены в группу, так что дисплеи можно подключать напрямую. Терминал работает со скоростью 9600 бод, и, хотя ее можно увеличить, многие большие дисплеи не будут перерисовывать намного быстрее, чем это. Клавиатура PS2 подключается к разъему DIN6. USB-клавиатуры также будут работать с дешевым переходником. Вы можете выполнить простой тест с обратной связью, соединив контакты 2 и 3 на D9, после чего символы, набранные с клавиатуры, появятся на дисплее.

В некоторых случаях печатная плата не требуется, и можно заставить вещи работать с готовыми модулями, доступными на ebay, например, адаптерами PS2, адаптерами RS232 и дисплеями, которые подключаются непосредственно к платам Arduino.

Также имеется отдельная плата для светодиодного дисплея звездообразования - см. Далее в этой инструкции.

Шаг 3: Программное обеспечение

Ниже находится файл с именем Package.txt. На самом деле это файл.zip, поэтому загрузите и переименуйте его (Instructables не поддерживает файлы zip). Включен скетч / программа Arduino, и это единственная программа, используемая всеми дисплеями. Также есть все файлы.zip для каждого из дисплеев.

В начале программы есть ряд операторов #define. Раскомментируйте тот, который соответствует отображению. Используйте Tools / Board, чтобы выбрать Uno, Mega или Nano. Сменить платы так же просто, как изменить одну строку в коде.

Одна из проблем, связанных с работой со многими дисплеями, заключается в том, что всем им нужны собственные программные драйверы. Все они включены в пакет. Тестирование включало взятие пакета и его переустановку на новую машину полностью с нуля. Вы также можете исходный код из Github, Adafruit и LCDWiki. Есть несколько случаев, когда более новые версии не работают, поэтому все рабочие версии включены в zip-архив. Иногда были случаи, когда один драйвер останавливал работу другого, поскольку они использовали то же имя файла, но разные версии. В комментариях вверху программы есть описание, показывающее, как установить каждый драйвер. Большинство из них устанавливаются из IDE Arduino с помощью Sketch / Include Library / Add ZIP library, и это берет zip-файл и помещает его в c: / users / computername / mydocuments / arduino / libraries.

Если вы используете только один дисплей, некоторые из этих библиотек устанавливать не нужно. Как минимум вам понадобятся два файла клавиатуры и один для конкретного дисплея. Некоторые дисплеи совместно используют код. В комментариях вверху программы есть более подробные инструкции, включая получение библиотеки gfx от Adafruit.

Поскольку все дисплеи используют один и тот же скетч Arduino, для изменения дисплеев достаточно раскомментировать одну из строк ниже:

// Разные дисплеи, оставьте один из следующих без комментариев # define DISPLAY_480X320_LCDWIKI_ILI9486 // 3,5 дюйма, 480x320, текст 80x32, мега, 16 бит, подключается к мега 36 контактам (и 2 контактам питания). Http://www.lcdwiki.com /3.5inch_Arduino_Display-Mega2560. Медленнее, чем некоторые из приведенных ниже вариантов, но более читаемый шрифт и больший экран, 5секундная загрузка // # define DISPLAY_480X320_MCUFRIEND_ILI9486 // 3.5 ", 480x320, текст 80x32, мега, шрифт 5x9, только для мега, но используется только контакты uno, питание, D0-D14, A0-A5, шрифт лучше, чем у 40-контактного модуля ssd1289, но намного медленнее https://www.arduinolibraries.info/libraries/mcufriend_kbv https://github.com/adafruit/Adafruit -GFX-Library // # define DISPLAY_320X240_MCUFRIEND_ILI9341 // 2,4 ", 320x240, текст 53x24, мега // # определить DISPLAY_320X240_SSD1289_40COL // 3,5", 320x240, текст 40x20, мега, библиотека UTFT (без шрифтов меньше 8x12). Быстро // # определить DISPLAY_320X240_SSD1289_53COL // 3,5 ", 320x240, текст 53x24, мега, шрифт 9x5, можно редактировать шрифт. Быстро // # определить DISPLAY_320X240_SSD1289_80COL // 3,5", 320x240, текст 80x30, мега, крошечный шрифт 7x3, можно редактировать, более быстрый драйвер, чем два вышеупомянутых, самый быстрый из них как 16-битный прямой привод к дисплею, а не spi / i2c // # define DISPLAY_160X128_ST7735 // 1.8 ", 160x128, text 26x12, uno (ILI9341) SPI 128x160 // # define DISPLAY_128X64_OLED_WHITE // 0,96 ", 128x64, текст 21x6, mega, I2C, oled white on black (библиотека tft для этой платы плюс весь код плюс клавиатура исчерпали память программ, хотя потребность в оперативной памяти очень мала, поэтому только работает на мега) // # define DISPLAY_20X4 // текст 20x4, uno, ЖК-дисплей с I2C, текстовый ЖК-дисплей https://www.arduino.cc/en/Reference/LiquidCrystal // # define DISPLAY_16X2 // текст 16x2, uno, подключается к uno, использует контакты с 4 по 10 // # определение DISPLAY_STARBURST // текст 12x2, нано, отображение звездообразования с нано контроллером // # определение DISPLAY_320X240_QVGA_SPI_ILI9341 / / 2.2 ", 320x240, текст 11x8, uno, крупный шрифт, uno, сигналы 3v, 9-контактный дисплей SPI см. Инструкции Бодмера - uno https://www.instructables.com/id/Arduino-TFT-display-and-font- библиотека / получите zip внизу и вручную поместите gfx и 9341 в папку библиотеки arduino

Шаг 4: Стандарт ANSI

Стандарт ANSI
Стандарт ANSI

ANSI позволяет использовать простые команды для очистки экрана, перемещения курсора и изменения цвета. На некоторых фотографиях есть демонстрация, показывающая все цвета переднего и заднего плана. Это красный, желтый, зеленый, синий, голубой, пурпурный, черный, белый, темно-серый, светло-серый; цвета могут быть яркими или тусклыми, поэтому имеется 16 цветов переднего плана и 16 цветов фона.

Вполне возможно подумать о добавлении «графического» режима, в котором вы можете рисовать изображения с гораздо более высоким разрешением на уровне пикселей и с 256 или более цветами. Основными ограничениями являются внутренняя память Arduino и время, необходимое для отправки изображения по последовательному каналу со скоростью 9600 бод.

Коду нужен один байт для хранения символа и один байт для хранения цветов (3 бита для переднего плана, 3 для фона, один для яркого / тусклого и один для жирного). Таким образом, для дисплея 80x30 потребуется 2400x2 = 4800 байтов, что подойдет для Mega, но не для Uno.

Шаг 5: дисплеи

Дисплеи
Дисплеи
Дисплеи
Дисплеи
Дисплеи
Дисплеи

Выше фотографии каждого дисплея в отдельности. Есть фотографии спереди и сзади каждого дисплея, и они представляют многие из брендов, доступных на ebay или аналогичных. Некоторые из них - I2C, некоторые - параллельные, некоторые имеют более крупные шрифты, некоторые могут отображать полные 80 столбцов, подходящих для Wordstar и других старых программ обработки текста. Более подробно в тексте кода Arduino.

Шаг 6: Схема

Ниже два файла. Они называются.txt, поскольку Instructables не обрабатывает файлы.zip. Загрузите их и переименуйте в.zip.

Схема и макет платы представлены в формате pdf. Также есть пакет для Seeed PCB. Это герберы, и если вы зайдете в Seeed и загрузите его, он должен отобразить герберы, и тогда вы сможете изготовить печатные платы. 14-сегментная плата большая и стоит немного дороже, но меньшая подходит для предпочтительного формата Seeed 10x10 см, поэтому вполне разумна для 5 или 10 плат - на самом деле доставка стоит дороже, чем платы.

Вполне возможно использовать многие дисплеи без печатной платы. Существуют модули разъемов PS2, экраны / модули RS232, доступные на ebay или аналогичные. Некоторые дисплеи, такие как I2C, просто могут использовать несколько проводов для подключения. Некоторые, например, дисплеи SSD1289, поставляются с платами адаптеров и могут подключаться прямо к Mega.

Шаг 7: отображение звездообразования

Отображение звездообразования
Отображение звездообразования

Дисплей звездообразования - это большая плата, в которой для мультиплексирования используется Nano и несколько микросхем 74xx. Было проведено множество экспериментов, чтобы определить, сколько дисплеев можно мультиплексировать, прежде чем они станут слишком тусклыми или мерцание станет слишком заметным. Дисплеи были получены от Futurlec https://www.futurlec.com/LEDDisp.shtml. 14-сегментные дисплеи также могут отображать строчные буквы, и при необходимости их можно изменить в коде. Переименуйте эти файлы из.txt в.zip.

Шаг 8: Добавление кода для других дисплеев

Можно добавить код для других дисплеев. Первый шаг - получить что-нибудь, что угодно, для отображения. Это может быть пиксель или буква. В основном это включает поиск драйверов, загрузку одного из них, его тестирование, обнаружение, что он не будет компилироваться, затем удаление этого драйвера, чтобы он не вызвал путаницы в дальнейшем, а затем попытку установить новый. Следующим шагом является получение буквы для отображения в правильном цвете, поскольку некоторые дисплеи, которые выглядят одинаково, на самом деле инвертируют цвета. К счастью, обычно это исправляет всего одна цифра в коде запуска. Следующий шаг - написать несколько строк, чтобы определить, использовать ли uno или mega, ширину дисплея, высоту, размер шрифта, контакты клавиатуры и какие файлы драйверов использовать. Они начинаются со строки 39 кода, и вы можете скопировать формат существующих дисплеев.

Затем нужно перейти к строке 451 и добавить код запуска. Здесь вы устанавливаете цвет фона и поворот и запускаете отображение.

Далее следует перейти к строке 544 и добавить код для отображения символа. В некоторых случаях это всего одна строка, например

my_lcd. Draw_Char (xPixel, yPixel, c, tftForecolor, tftBackcolor, 1, 0); // x, y, char, вперед, назад, размер, режим

Далее следует перейти к строке 664 и добавить код для рисования пикселя. Опять же, иногда это всего лишь одна строка, например:

tft.drawPixel (xPixel, yPixel, tftForecolor);

Наконец, перейдите к строке 727 и добавьте код, чтобы нарисовать вертикальную линию для курсора, например

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

Программа сортирует такие вещи, как объем памяти, выделяемый для экранного буфера, на основе ширины экрана и размера шрифта.

Шаг 9: Демонстрация Wordstar

Это было сделано с помощью компьютера CP / M, и здесь доступно множество опций. Мне нужно было что-то быстро настроить, поэтому я использовал эмуляцию на ESP32 (Google ESP32 CP / M). Доступно множество других ретро-компьютеров, например, эмуляция FPGA Гранта Сирла и RC2014 для тех, кто предпочитает использовать настоящий Z80. Многие ретрокомпьютеры, как правило, используют терминальную программу на ПК в качестве дисплея, например Teraterm. Большая часть отладки этого проекта ANSI включала параллельное выполнение программы терминала и программы ANSI и обеспечение идентичности экранов.

Шаг 10: Дальнейшие мысли

По мере увеличения размера дисплеи становятся все медленнее и медленнее. Перерисовка персонажа включает в себя перерисовку каждого пикселя в этом персонаже, так как также должен быть нарисован цвет фона, поэтому все сводится к тому, как быстро вы можете нарисовать пиксель. Есть некоторые хитрости, например, если дисплей не успевает за поступающими данными, просто сохраните текст в экранном буфере, а затем выполните перерисовку во весь экран, когда текст больше не поступает. Многие дисплеи, которые вы видите для sale показывают красивую картинку на экране, но они могут не показать, сколько времени потребовалось для отображения этого изображения, а в некоторых случаях это может быть 5 секунд или больше. I2C и SPI отлично подходят для небольших дисплеев, но для всего, что превышает 50 столбцов, требуется 8- или 16-битная шина данных.

Wordstar немного громоздок в использовании со скоростью 9600 бод, а 19200 гораздо удобнее использовать для прокрутки текста, но дисплеи действительно не успевают.

Самый быстрый дисплей, который я использовал, был на микросхеме Propeller с двумя 8-битными внешними микросхемами оперативной памяти 512 КБ, чтобы создать 16-битную параллельную шину данных. Каждый шрифт был предварительно загружен в оперативную память. Каскад счетчиков 74xx использовался для синхронизации данных на дисплее. Это означало, что внутри ЦП не было внутренней обработки для выборки и вывода данных, а частота обновления была настолько высокой, насколько чип Propeller мог переключать вывод. Удивительно, но дисплеи смогли справиться с этим даже на частоте 20 МГц, и поэтому было возможно выполнить обновление в полноэкранном режиме всего за 30 миллисекунд. Такой скорости достаточно для плавной прокрутки, как на мобильных телефонах.

Чип Propeller был передовым более десяти лет назад, и теперь есть больше вариантов, включая ESP8266 и ESP32, которые имеют большое количество внутреннего плунжера. Тем не менее, эти чипы по-прежнему не имеют большого количества контактов, поэтому все еще может быть полезно использовать устаревший способ внешнего RAM-чипа, который синхронизируется с дисплеем.

Для дисплеев большего размера может быть дешевле использовать ЖК-экран телевизора или экран VGA и посмотреть на некоторые из эмуляторов ANSI, которые были закодированы, например, ESP32, которые напрямую управляют VGA.

Надеюсь, вы найдете этот проект полезным.

Джеймс Моксхэм

Аделаида, Австралия

Рекомендуемые: