ESPspectrum

от автора

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


ссылка на оригинал статьи https://habr.com/ru/articles/783778/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *