40-канальный преобразователь логических уровней для ретро-компьютеров

Feb 01, 2024 23:19



Ясно, что если собрать вместе пять 8-канальных преобразователей логических уровней (5 вольт / 3.3 вольт), то получится 40-канальный преобразователь логических уровней. С его помощью можно к ретро-компьютеру с рабочим напряжением 5 В подключить быстрый современный микроконтроллер с рабочим напряжением 3,3 В.

Зачем это нужно?

Предположим, у вас есть старый 8-битный компьютер с оперативной памятью всего 16 Кбайт (например, ZX Spectrum 16k) или даже всего 1 Кбайт (например, ЮТ-88 в базовой конфигурации), и вы хотите увеличить объём его оперативной памяти. А может быть, вы хотите добавить в компьютер 1980-х годов слот micro SD вместо кассетного магнитофона. Или может быть, у вашего компьютера всего несколько 7-сегментных индикаторов в качестве экрана и несколько кнопок в качестве клавиатуры, и вы решили, что пришло время обновить компьютер, установив более современные экран и клавиатуру. Часто можно найти электронные схемы таких расширений, как правило с использованием столь же старых электронных деталей.

Только этот путь не для меня. Я программист, а не электронщик, и предпочитаю запрограммировать микроконтроллер (microcontroller unit или просто MCU) для достижения того же результата. Какие в этом случае у меня есть варианты? Мне нужен хорошо известный MCU с рабочим напряжением 5 В, с достаточным количеством выводов GPIO (вход/выход общего назначения) и, желательно, с достаточным объёмом оперативной памяти. Я знаю только один такой MCU: Arduino Mega 2560.

Можно ли использовать Arduino Mega 2560?

К сожалению, у Arduino Mega 2560 не только ограниченный объем ОЗУ (8 КБайт), но, что более важно, его микроконтроллер с частотой 16 МГц просто слишком медленный для этого проекта. Для сравнения, процессор Z80 в ZX Spectrum работает на частоте 3,5 МГц в обычном режиме и 7 МГц в турбо-режиме.

Лучшее, что мне удалось добиться с Arduino Mega 2560, это примерно 0,5-0,6 МГц, и это с экраном LCD 16x2 вместо более типичного компьютерного дисплея. Печать на LCD (т.е. использование библиотеки LCD) значительно замедляет среднюю частоту процессора.

А какие MCU мы можем использовать в таком случае?

Мне известны следующие более или менее распространённые MCU с форм-фактором Arduino Mega 2560, которые быстрее чем Arduino Mega 2560:
  • Diligent Max32 (80 МГц, семейство PIC32), снят с производства и больше не продается в магазине производителя.
  • Arduino Due (84 МГц), имеется удобная документация.
  • Adafruit Grand Central M4 Express (120 МГц), слот для micro SD находится прямо на плате.
  • Arduino Giga R1 WiFi (два ядра - 480 МГц и 240 МГц), есть специальный "щит" (насадка) для 4" дисплея.
Ещё можно попробовать Raspberry Pi Pico или Teensy.

Что общего у всех этих относительно быстрых MCU? Их рабочее напряжение составляет 3,3 В! Таким образом, нельзя напрямую соединить контакты ретро-процессора с контактами MCU GPIO - даже если они допускают напряжение 5 В, они выдают только максимум 3,3 В, что может сделать операции чтения памяти процессора непредсказуемыми.

Вот тут-то и пригодится преобразователь логических уровней.

Нам понадобятся 16 каналов для шины адреса, 8 каналов для шины данных и несколько каналов для управляющих сигналов, таких как чтение памяти, запись в память, чтение порта ввода-вывода (ВВ), запись в порт ВВ и т. д. Для более медленных операций, таких как использование карты памяти micro SD, возможно понадобятся дополнительные каналы, чтобы попросить процессор подождать. Если вы планируете осуществлять прямой доступ к памяти (DMA), например, для отрисовки экрана на основе содержимого определённой области оперативной памяти, вам также понадобятся дополнительные каналы для временного отключения процессора (если эта область памяти не находится в самом микроконтроллере).

Для создания 40-канального преобразователя логических уровней может пригодиться длинная печатная плата Perma-Proto от Adafruit. Во-первых, пять 8-канальных преобразователей логического уровня занимают всю ширину платы. Во-вторых, в любом случае придётся добавить параллельно преобразователям выводные разъемы, чтобы подключить всё это к процессору и MCU. Это пришлось бы сделать и на печатной плате, так что дополнительное место на макетной плате не пропадает. Также на 8-канальных преобразователях могут быть установлены выводы (как на фото), которые могут пригодиться для подключения к компьютеру чего-либо ещё - на стороне 5 В и/или 3,3 В.

Если прямой доступ к памяти не понадобится (а значит, только процессор будет управлять шиной адреса), то вместо двух более дорогих 8-канальных двунаправленных преобразователей логического уровня TXB0108 можно использовать два 8-разрядных логических сдвигателя уровня 74LVC245. (На фотографии выше я вообще использовал три 74LVC245 - два для шины адреса и один для половины шины управления.) Только имейте в виду, что этот более дешевый заменитель не является автоматически двунаправленным (у него есть вывод управления направлением), и что он может только понижать уровень сигнала с 5 В до 3,3 В, но не может повышать сигнал с 3,3 В до 5 В. Также можно использовать только четыре преобразователя вместо пяти, если нужно не более восьми управляющих сигналов.

ОБНОВЛЕНИЕ: Существующая реализация.

Через полгода после написания этой статьи я понял, что большая часть из того, о чём я писал, уже была реализована в Teensy Adapter for RetroShield от 8-Bit-Force.

arduino, 74lvc245, txb0108, adafruit

Previous post Next post
Up