NanoTerminal. Автономный отладчик на Atmega 328 (Arduino). Часть 1.

miniterminal1
Очень часто для отлаживания программы загруженной в микроконтроллер используется последовательный интерфейс UART подключенный к реальному или виртуальному COM-порту компьютера. В частности, в Arduino IDE имеется простенький, но вполне рабочий инструмент — Монитор последовательного порта. Очень удобно отлавливая баг или просто наблюдая значение переменной написать строчку вроде Serial.println(variable); и в Монитор порта полетят цифры, буквы и прочая дребедень.

Это всё хорошо, когда мы отлаживаем изделие, которое просто лежит на столе и подключено к компьютеру. А как быть с автономными роботами, которых мёдом не корми — дай поездить, побегать, поплавать или полетать? Провода исключаются — робот ведь автономный, а значит любит свободу. Радиоканал, вроде Wi-Fi, bluetooth или что-то вроде — хорошо, но очень недалеко, а вообще желательно в пределах помещения. А самое главное надо специально переписывать программу под средства отладки по радиоканалу.

От всех этих недостатков свободен автономный терминал, представляющий собой связку микроконтроллера и дисплея. В сети лежит уже куча примеров реализации подобных устройств, бери да копируй. Но я не такой, я лёгких путей не ищу обычно, а потому решил самостоятельно разработать и реализовать NanoTerminal.
Несмотря на то, что статья датирована концом октября, данному проекту уже четыре месяца и он пережил уже три реинкарнации.

Первая версия была построена буквально за вечер, что называется «на коленках» на базе китайского клона ArduinoNano (отсюда и название NanoTerminal), с OLED-дисплеем на базе контроллера SSD1306. Всё это хозяйство было смонтировано на китайской макетной плате весьма поганого качества. Но тем не менее на этой первой версии я смог написать основной код программы.

Основные характеристики терминала на текущий момент (октябрь 2016):
1) Разрешение дисплея 128х64;
2) МК — Atmega328;
3) Расширенная память — 32 кбайта статического ОЗУ и 32 кбайта EEPROM;
4) Гибкая система меню;
5) Настраиваемая скорость приема/передачи;
6) Встроенный тестер сервоприводов;
7) Игра Тетрис;

Планируется:
1) Встроенный макроязык, аналогичный AT-командам, для управления функциями минитерминала, такими как: сохранение содержимого ОЗУ в EEPROM, чтение EEPROM, очистка памяти, включение/выключение дисплея и так далее.
2) Батарейное питание, выгрузка данных через USB на компьютер.

В серии статей об этом изделии я опишу работу с контроллером дисплея SSD1306, микросхемой EEPROM AT24C256 через интерфейс I2C, а также с микросхемой статической памяти 23К256 через интерфейс SPI.