"Аюша" 6502 SBC - Терминал с кассетным интерфейсом.
Если использовать "Аюшу" исключительно как контроллер, то для управления им
вполне достаточно обычного персонального компьютера или ноутбука. Но
согласитесь, использовать для банального управления машину мощностью в тысячу
таких контроллеров как-то не совсем хорошо. Плюс шум от вентиляторов. Поэтому
наличие отдельного терминала будет отличным решением, причём использовать этот
блок можно не только с "Аюшей", но и с иными устройствами, к примеру, для
настройки xDSL-модема типа Discovery.
Примечание. Как обычно сразу оговорюсь, что описанное необязательно повторять
как есть, ибо некоторые решения были приняты "в лоб", исходя из наличия
комплектующих. Поэтому на приложенном фото видна вакханалия трубчатых
конденсаторов родом из 60-х.
Разберём схему терминала поблочно. Состоит он из пяти узлов, некоторые из них
взаимосвязаны.
Первый узел - согласование между RS-232 и TTL-уровнями. Собран он на
микросхеме МАХ232 и не отличается от применённого в самом контроллере.
Второй узел - формирование и вывод изображения на экран. Тут, положа руку
на сердце и прочие нежные части тела, признаюсь - было решено использовать
однокристальное решение, ибо экранная часть, собранная на рассыпной логике,
содержала бы более 40 корпусов, что сразу бы отбило всё желание к дальнейшей
сборке. Поэтому была взята Atmega8-16 и решение от Jan Baare, позволяющие
получить на обычном телевизоре 40х25 текстовых символов с минимальным
количеством навесных элементов.
Примечание. Даннаый узел позволяет работать на скоростях от 300 до 19800
бит/с, поэтому и возможно его использование с иными внешними устройствами путем
переустановки джамперов (описание находится в ассемблерном листинге). Конечно,
вообще весь терминал вполне возможно собрать на одной Атмеге (ссылки в описании
контроллера), но к сожалению, все найденные в Сети конструкции не позволяли
работать со скоростью ниже 1200 бит/с и не имели исходного кода, только готовую
прошивку. Желающие могут применить в этом и следующем узле иное, совмещённое
решение.
Третий узел - преобразователь кода ASCII-клавиатуры в последовательный
поток. Он немного более сложен и содержит в себе микросхемы 555ИР23 (входная
защелка), 2х555ИР9 (преобразователь параллельного кода в последовательный),
555ИЕ5, 555ЛА4, 1/2 155ТМ2 (формирователь 11 импульсов). Тактовые импульсы
берутся из четвёртого узла, о котором поговорим ниже.
Примечание. Почему решено применить именно ASCII-клавиатуру? Да просто
потому, что это наиболее простой аппаратный вариант. Мы можем применить
клавиатуру хоть от первоApple'ов, хоть PS/2, или собрать её самостоятельно из
отдельных кнопок. Пару вариантов ASCII-клавиатуры мы рассмотрем на отдельной
страничке.
Рассмотрим как работает третий узел. При нажатии клавиши на входах D1-D7
появляется код нажатой клавиши. Одновременно на входе КР (Key Pressed)
появляется кратковременный положительный импульс. По фронту импульса происходит
запись кода клавиши во входную защёлку, дабы исключить "звон" клавиш и,
соответственно, неверного кода. Инвертированный элементом D6.1 импульс КР низким
уровнем записывает зафиксированный код клавиши в регистры D4 D5. Входы регистров
распаяны таким образом, что при его дальнейшем тактировании выдаётся
последовательный код, содержащий в себе стартовый и стоповый импульсы,
необходимые для передачи по RS-232. Поскольку мы работаем в фомате 8-N-1 (8 бит
данных, без коррекции, 1 стоповый бит), то для передачи нам нужно 10 импульсов,
плюс еще один импульс про запас.
Пачка импульсов формируется по тылу инвертированного сигнала КР, опрокидывая
триггер ТМ2. При этом отпускается счётчик ИЕ5 и открывается RS-триггер на
элементах D9.1 D9.2, пропуская тактовые импульсы на счётчик и на регистры. На
одиннадцатом импульсе элемент D6.2 сбрасывает счётчик и триггер и прохождение
тактовых импульсов заканчивается. Соответственно заканчивается и передача кода
нажатой клавиши в СОМ-порт контроллера.
На этом описание основных блоков терминала можно закончить. Стоит оговориться,
что для вышеописанного исполнения для клавиатурной части нужен генератор
тактовых импульсов на необходимую скорость передачи, который можно выполнить как
на таймере 1006ВИ1 (555), так и по любой известной схеме на логических
элементах. Идеальный вариант - стабилизированный кварцем, однако при таких
низких скоростях (общеупотребительная 9600 бит/с) достаточно и RC-цепочки.
Однако, поскольку нами была выбрана скорость в 300 бит/с, мы продолжим наше
описание.
Почему же 300 бит/с? Это же каменный век, скажут многие псевдогуру, которым и
нескольких гигабит мало. Отнюдь, ответим мы, ибо самая медленная часть
компьютера обычно находится перед ним. Да, мы привыкли к тому, что информация на
экран выводится практически мгновенно, но давайте подумаем - насколько это
нужно? Для вывода графики - несомненно, однако тут простой контроллер,
работающий в текстовом режиме. Плюс мало кто может печатать на клавиатуре со
скоростью 33 символа в секунду. Исходя из этого 300 бит/с для терминала вполне
достаточно, как для работы, так и для отладки программ.
Вторая причина использования такой скорости - простая реализация загрузки и
сохранения программ на внешнем носителе без использования программных ухищрений
и наворотов, что освобождает процессор от излишних вычислений. Ещё в 70-х годах
прошлого века для записи на магнитную ленту был придуман так называемый
Канзасский стандарт (иногда называемый FSK, Frequency Shift Keying, сдвиг
частоты), в котором "единица" кодировалась частотой 2400 Гц, а "ноль" - 1200 Гц.
Именно эти частоты хорошо записываются на обычную магнитофонную ленту даже на
самых простых диктофонах. Разумеется, что есть и более скоростные варианты, но и
техника должна быть классом повыше. Кроме бытовых кассетников можно использовать
кассетные и цифровые диктофоны и, в современных условиях, обычные сотовые
телефоны, более половины которых имеют в своём составе функцию диктофона.
Упомянутыми выше частотами мы просто кодируем/декодируем TTL-уровни
последовательного интерфейса, а уж куда они будут передаваться - на терминал, на
контроллер, на модем или принтер - уже не имеет значения. Поэтому распечатать
листинг программы напрямую на матричный принтер, минуя компьютер - это вполне
реально.
Четвёртый узел - блок записи на магнитную ленту (давайте так и далее
именовать этот процесс, вне зависимости от подключенного аудиоустройства). Он
содержит генератор частоты 2400 Гц на элементах D10.1 D10.2 (резистор 470К
служит для повышения стабильности частоты, 130К устанавливает необходимую
частоту генерации), входной коммутатор последовательного потока на элементе
D11.1, делитель на 2 на элементе D11.1 и выходной коммутатор на элементах D10.3
D10.4. Как видно, узел подключён параллельно второму узлу, т.е. всё, что
выводится на монитор, будет выводиться и в кассетный выход. Таким образом
сохранение набранной программы очень просто: набираем команду LIST, включаем
магнитофон на запись и жмём ENTER. Листинг программы выводится неспешно на
монитор, одновременно записываясь на магнитную ленту. После окончания вывода и
появления сообщения ОК выключаем магнитофон.
С этого же узла через два делителя D12 снимаются тактовые импульсы для
клавиатурной части терминала. Как видно из схемы, для повышения скорости работы
терминала по СОМ-порту до 2400 бит/с ничего дополнительного паять не надо,
достаточно только снять тактовые импульсы с нужной точки.
Этот узел перед работой необходимо настроить, установив резистором 130К частоту
генерации в 2400 Гц, используя частотомер или с использованием программ
аудиоредакторов, к примеру, Audacity. Результат - точная частота в 300 Гц на 13
ножке D12.2, иначе при вводе с клавиатуры могут быть ошибки.
Примечание. Основой узла стала схема набора кассетного
интерфейса, выпускаемого ранее компанией SD Sales Company, Dallas, TX, в
конце 70-х годов.
Пятый узел - чтение с магнитофонной ленты. Содержит предварительный
усилитель на элементах D13.3 D13.4 по схеме, аналогичной узлу чтения компьютера
"Пентагон" (отличие - конденсатор 2200 пФ для срыва возможной высокочастотной
генерации, уменьшающей коэффициент усиления), компаратор D9.4 и детектор на
микросхемах 1/2 155АГ3 и 1/2 155ТМ2.
Примечание. Схема детектора аналогична узлу из
интерфейсной платы OSI 430B Super I/O Board, выпускаемой компанией Ohio
Scientific Instruments, Hiram, OH, в начале 80-х.
Одновибратор на 155АГ3 настраивается переменным резистором 10К на средний период
частоты между 2400 и 1200 Гц (1800 Гц). При этом на частоте 2400 Гц одновибратор
будет постоянно перезапускаться, а ТМ2 не будет сбрасываться, поэтому на выходе
будет высокий уровень. На 1200 Гц одновибратор будет отрабатывать, сбрасывая
ТМ2, поэтому на выходе будет постоянный низкий уровень. Таким образом выходной
сигнал будет полностью повторять изначальный, подаваемый ранее с
последовательного входа на узел записи.
Выходной поток с узла чтения через переключатель S1 подаётся на вход МАХ232 для
последующей передачи на контроллер. Видно, что контроллеру абсолютно одинаково,
откуда будет поступать поток символов - с клавиатуры или с магнитной ленты.
Запись программы в контроллер с ленты также проста. Для начала очищаем память
контроллера командой NEW (если не планируется слияния программ или данных),
запускаем магнитофон на воспроизведение. При появлении постоянного тона 2400 Гц
и загорании светодиода (подключенного к выводу 8 D8.2),
переводим переключатель S1 в положение CAS. На экране монитора должны появляться
символы вводимой программы, а светодиод помаргивать. После загрузки программы S1 переводится в положение КВ и работа
продолжается как обычно, с клавиатуры.
На фотографии платы также заметен узел питания монитора терминала, который был
собран из-за особенностей конструкции применённого ЖКИ-монитора,
предназначенного для работы в автомобиле. Поскольку монитор рассчитан на
напряжение питания 9-15 Вольт, чтобы не городить отдельный 12-вольтовый блок
питания, было решено использовать схему повышения напряжения step-up. Вариантов
такого узла много, но была выбрана схема на чипе МС34063, широко применяемой в
автомобильных стабилизаторах для сотовых телефонов. Схема аналогична даташиту и
не имеет особенностей. Часть деталей также была взята из зарядки (использовалась
кем-то выкинутая). При настройке был выбран компромисс между потребляемым током,
нагревом транзистора и выходным напряжением, и было решено остановиться на 10
Вольтах. Разумеется, что если будет применён обычный телевизор или CGA-монитор,
необходимость в узле питания отпадает.
Фото платы терминала с монитором AutoExpert DV-200 4,3"
Для прошивки Atmega8-16 воспользуйтесь прикреплённым архивом, содержащим схему оригинала и и исходники программы.
Второй вариант схемы терминала
Через некоторое время мне не понравилась нестабильная работа регистров 555ИР9 - то не все биты загрузятся, то первый бит уменьшается вполовину. Согласен, может я не умею их готовить, но было решено собрать второй вариант терминала, используя в качестве основы преобразователя из параллельного кода в последовательный микросхему мультиплексора 155КП1.
Выяснилось, что заменив две ИР9 на одну КП1 мы экономим 60 мА тока по питанию. В дальнейшем можно будет заменить ИР23 на ИР27 и еще немного уменьшить энергопотребление.
Схема второго варианта терминала
Плата второго варианта терминала
Обратная сторона платы. И снова вяжем МГТФ.
Вид внутренностей терминала. Установленная плата, залитая "китайскими соплями" клавиатура, сетевой трансформатор из блока питания дисководов ЕС-1840 (да простят меня коллекционеры), выпрямители и стабилизатор питания (один 5 Вольт для основной схемы, второй нестабилизированный для автомобильного монитора).
Ну и напоследок общий вид комплекта контроллера, терминала, кассетника и ЖКИ-телевизора
Тот же комплект, только вместо телевизора установлен автомобильный телемонитор
Проблемы.
Применённый чип "видеоконтроллера", как и упомянуто автором, содержит чисто тестовую прошивку, которая хоть и работоспособна, но имеет некоторые недостатки. Краткий список следующий:
- не отображает табуляцию при вводе с клавиатуры;
- не отображаются символы от 128 до 255;
- есть проблемы и в первой странице символов;
- иногда некорректно срабатывает сброс чипа;
- при выводе в первых десяти строках наблюдается джиттер (ну 16 МГц для вывода
видео конечно бесстыдно мало);
- ну и хотелось бы вывести сигнал звонка ;)
Поскольку прошивка открыта, да ещё и с комментариями, то хотелось бы попросить
знающих людей допилить её до кондиции и поделиться результатом...