2 года назад начал увлекаться ардуино. позже собирал различные несложные устройства. Опыт как вы понимаете не сильно большой, но мои проекты просты в исполнении. То есть если есть немного навыков программирования ардуино, у вас все получиться

Как возникла идея

Листая ленту я наткнулся на сайт https://dzen.ru/a/ZKXDu7QlJEpvx8DS.На самом деле таких статей много, но во всех есть непонятные моменты. Я перечитал содержимое и решил повторить, но в архиве не было файла, чтобы дома вытравить печатную плату.

Моя главная цель: сделать аналог ZX Spectrum, но с возможностью простого изменения кода. В данной статье я хочу описать процесс сборки, в последующей я буду рассказывать о самой работе.

Я нарисовал печатную плату в программе sprint layout 6. После я купил 2 esp 32 и так как раньше программировал в Arduino IDE решил написать и свою операционную систему, так как можно добавить что-то от себя. И так понятнее как работает устройство.

В моей программе есть преимущество в работе с файлами, но чтобы добавить игру, нужно переписать ее полностью вручную (из за особенностей библиотеки).

Сборка

  1. Запчасти

    • Стеклотекстолит

    • esp32

    • DC 5,5 разъем

    • разъем jeck 3,5

    • разъем VGA

    • разъем USB ( для подключения клавиатуры )

    • резисторы 220 ом

    • конденсаторы 10u(2 штуки) и 100u(1 штука)

2. Я нарисовал и вытравил печатную плату (https://cxem.net/comp/comp144.php sprint layout, https://easyelectronics.ru/sozdanie-pechatnoj-platy-metodom-lazernogo-utyuga.html как делать)

3. Залудил и все припаял

4. Занялся разработкой программы. Получилось не с первого раза, но работает. Моя версия устройства может легко создать читать и удалить файл, есть режим свободной печати и калькулятор.

Схема

Фото работы

Как работает программа

Весь код я решил разделить по частям, так будет по проще ориентироваться во всем. В меню при помощи клавиш 1-5 выбирается режим.К примеру в разделе работы с файлами есть еще разделение: прочитать, создать/изменить, удалить

Для работы с мониторами я использовал библиотеку bitluni https://www.arduino.cc/reference/en/libraries/bitluni-esp32lib/

Во всех режимах используется опрос клавиатуры. Вот пример скетча:

#define CLOCK 16 //D-
#define DATA 17  //D+

const char keymap[] = {
  0, 0,  0,  0,  0,  0,  0,  0,
  0, 0,  0,  0,  0,  0, '`', 0,
  0, 0 , 0 , 0,  0, 'q','1', 0,
  0, 0, 'z','s','a','w','2', 0,
  0,'c','x','d','e','4','3', 0,
  0,' ','v','f','t','r','5', 0,
  0,'n','b','h','g','y','6', 0,
  0, 0, 'm','j','u','7','8', 0,
  0,',','k','i','o','0','9', 0,
  0,'.','/','l',';','p','-', 0,
  0, 0,'\'', 0,'[', '=', 0, 0,
  0, 0,13, ']', 0, '\\', 0, 0,
  0, 0, 0, 0, 0, 0, 127, 0,
  0,'1', 0,'4','7', 0, 0, 0,
  '0','.','2','5','6','8', 0, 0,
  0,'+','3','-','*','9', 0, 0,
  0, 0, 0, 0 };



void setup()
{
  Serial.begin(115200);
  pinMode(CLOCK, INPUT_PULLUP); //пины клавиатуры
  pinMode(DATA, INPUT_PULLUP);
 }

uint8_t lastscan;
uint8_t line = 0, col = 0;


void loop()
{
   uint16_t scanval = 0;
  for(int i = 0; i<11; i++)
  {
    while(digitalRead(CLOCK));
    scanval |= digitalRead(DATA) << i;
    while(!digitalRead(CLOCK));
  }
  scanval >>= 1;
  scanval &= 0xFF;
  Serial.println(scanval, HEX);
  if(lastscan != 0xF0 && scanval != 0xF0)
 {
   Serial.println(keymap[scanval]);
      
  }
  lastscan = scanval;
  
}

Архив с прошивкой и схемой: https://disk.yandex.ru/d/JXB0fTbXuaE3Yg

Почему esp32 https://www.alexcube.ru/blog/2021/11/53-dnya-do-2022-goda-zx-spectrum-iz-arduino/


Так как проект на стадии разработки, буду рад любой помощи, также можно обратиться с вопросами: https://discord.gg/nd6K7sbR

Комментарии (23)


  1. Jury_78
    28.12.2023 12:31
    +3

    решил написать и свою операционную систему

    Вместо RTOS, что есть в ESP?


    1. Alexandr_Yagupov Автор
      28.12.2023 12:31

      Операционка написана в ардуино IDE, довольно проста в разработке


      1. Jury_78
        28.12.2023 12:31

        Без WIFI и BT?


        1. Alexandr_Yagupov Автор
          28.12.2023 12:31

          пока что да, но все впереди


          1. NutsUnderline
            28.12.2023 12:31

            со спектрумом это роднит только то что в оригинале на низком уровне тоже не особо было задокументированно, а скорее даже - лучше. arduino для esp32 представляет собой закрытую lib которая подготовлена в esp idf. она, в свою очередь дергает бинарный код из постоянной памяти , особенно это касается беспроводки. Очень немногие спускаются на esp32 до такого уровня, хотя на спектруме это была необходимость. более того, жесткие времянки необходимые для кассетного магнитофона тоже трудненько обеспечить - описано здесь https://habr.com/ru/articles/782350/ Для этого неплохо бы использовать встроенные аппаратные ресурсы, да они не особо незадокументированы. я уж не знаю как работает либа ps/2 - надо поглядеть. Кстати, на спектуме удобных либ на все случаи жизни тоже далеко не сразу появилось.

            в общем то дело полезное, интересное. просто это ни разу не спектрум


    1. ESedov
      28.12.2023 12:31

      Извиняюсь, но все же, более точно звучит "RTOS есть в компиляторе и в саму ESP вместе с кодом пользовательской программы загружаются нужные функции этой OS"

      Как то так.

      А то многие из такого утверждения могут заключить, что RTOS жестко пришита к ESP программно, а то и вообще аппаратно. Что неверно.


  1. progchip666
    28.12.2023 12:31
    +2

    Плюсанул за то, что мало осталось тех, кто хоть что то готов делать своими руками и писать об этом на харбре.

    Хотя. судя по уровню данной статьи, прямо скажем писатель из вас ещё тот... Остаётся надеяться что по той причине что весь талант ушёл в программирование.


    1. Alexandr_Yagupov Автор
      28.12.2023 12:31

      первый раз статью сделал, соглашусь, надо подделать


  1. iliasam
    28.12.2023 12:31
    +1

    Тема софта совсем не раскрыта.


    1. xaqbyca
      28.12.2023 12:31

      И гамезов


  1. mirv
    28.12.2023 12:31
    +3

    Библиотека от автора bitluni


    1. Alexandr_Yagupov Автор
      28.12.2023 12:31

      Да, все верно. Решил попробовать с ней так как она была проверена ранее


  1. sargon5000
    28.12.2023 12:31
    +4

    Александр, вы бы начали с изложения идеи: что, собственно, вы хотите сделать? Какими средствами и навыками для этого располагаете? Вместо этого вы с места в карьер принялись рассказывать, как травите плату. Наверно же, идея не заключалась единственно в том, чтобы протравить плату и написать калькулятор? Так до конца и осталось непонятно, то ли вы хотите сделать спектроанализатор, то ли повторить. ZX Spectrum.


    1. Alexandr_Yagupov Автор
      28.12.2023 12:31

      Хочу сделать аналог ZX Spectrum. Статью я потихоньку доделаю. Спасибо за активность


  1. azesmbog
    28.12.2023 12:31
    +1

    Ну вот, а я подумал еще один ESPectrum.

    Все придумано до нас :)

    https://zxespectrum.speccy.org/
    https://www.youtube.com@ZXESPectrum


    1. Alexandr_Yagupov Автор
      28.12.2023 12:31

      Нет, мое устройство не тоже самое, что в ссылке. Оно работает по другому и имеет отличия. Я упоминал о наличии похожих проектов, но я сделал все с нуля


  1. Guestishe
    28.12.2023 12:31
    +1

    А пленочные накопители поддерживает?


    1. Alexandr_Yagupov Автор
      28.12.2023 12:31

      Проект на стадии разработки, все впереди ;)


  1. j-b
    28.12.2023 12:31

    Поправьте если ошибаюсь, но ESP32 не умеет с USB работать.

    В данном случае должна использоваться клавиатура совместимая с PS/2, обычная USB не будет работать.

    Да и готовый проект есть https://github.com/dcrespo3d/ZX-ESPectrum-Wiimote/tree/master ...

    Только там еще можно microSD подтянуть, и игры с нее грузить (еще год тому собирал такое)


    1. Alexandr_Yagupov Автор
      28.12.2023 12:31

      отлично работает с USB клавиатурой а pc/2 наоборот не работает. я говорил, что есть куча похожих проектов, но в них есть моменты которые мне не понравились и я сделал все с нуля


      1. Jury_78
        28.12.2023 12:31

        На гидхаб вроде видел, что подключают по ps/2


      1. j-b
        28.12.2023 12:31
        +1

        Видимо у вас клавиатура с поддержкой.

        В свое время задавался этим вопросам, и с этим все было сложно. Работа с HID устройствами...
        В вашем же примере - простой RX/TX как я понял, даже название портов сами за себя говорят.
        #define CLOCK 16 //D-
        #define DATA 17 //D+

        Я, тогда еще, замарачивался с подтяжкой к +5 вольтам на транзисторах, т.к. только по ним и работала стандартная ps/2 клавиатура.


        1. Alexandr_Yagupov Автор
          28.12.2023 12:31

          можно как я понимаю любые контакты для клавиатуры использовать