Экран для вывода данных через COM-порт

от автора

Если у компьютера нет не только монитора, но и даже видео-выхода, а показания датчиков хотелось бы видеть, то решением может быть отправлять данные в виде строки в COM-порт, который будет слушать микроконтроллер и отображать приходящую строку на своём дисплее. Под катом простейшая реализация этого на микроконтроллере ATtiny13 и 0,96′-экране SSD1306 с разрешением 128х32.


Основная идея заключается в том, чтобы программная часть, отвечающая за сбор информации, выполнялась на ПК, напр. в bat или sh-скрипте, и потом собранные данные выводились штатными средствами ОС, напр. на COM-экранчик, примерно вот так

Получить температуру процессора Отправить данные в COM-порт Подохдать 5с Получить температуру диска Отправить данные в COM-порт Подохдать 5с Получить системное время Отправить данные в COM-порт Подохдать 5с Вернуться в начало

Для прошивки микроконтроллера я использую китайский клон Arduino Pro mini, USB-UART-конвертер на CP2102 и Arduino IDE 1.8.19 с установленным MicroCore. Как именно прошивать, можно узнать на ютубе поискав «как прошить attiny13», из публикации на Хабре или из справки ниже.

Прошивка ATtiny13 посредством Arduino вкратце

  1. Подключаем Arduino через USB-UART-конвертер.
  2. Качаем Arduino IDE. Я использовал 1.8.16, чтобы работать в Windows 7.
  3. Идем File > Examples > 11. ArduinoISP > ArduinoISP. В Tools > Board выбираем вашу плату (у меня это Arduino Pro or Pro Mini), в качестве программатора выбираем AVRISP-mkII и загружаем скетч ISP на Arduino.
  4. Далее устанавливаем между ногами RST и GND конденсатор на 10uF и провода от ножек 10, 11, 12 и 13. Должно получиться как то так.
  5. Далее надо установить MicroCore. Для этого открываем File > Preferences и для поля Additional Board Manager URLs указываем https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json. Закрываем настройки кнопкой OK, открываем Tools > Boards Manager.... В поиске вбиваем MicroCore и устанавливаем его. Если все сделано правильно, то в Boards появится пункт MicroCore, содержащий ATtiny13.
  6. Необходимо выставить Clock 9.6MHz, Bootloader: No и программатор Arduino as ISP
  7. Всё готово. Можно заливать скетчи в ATtiny13.

Прошиваемый скетч — здесь.


Схема подключения экрана и микроконтроллера. Требуется питание 3.3В, напр. от оранжевого провода блока питания, т.к. дисплей не рассчитан на 5В.

Микроконтроллер нельзя подключить к COM-порту напрямую, поскольку порт использует -/+12В,
и потому нужен переходник


За основу взята часть схемы, отвечающая за чтение данных из порта, из статьи отсюда.

Результат на макетной плате

Зеленый и синий провода подключены к COM-порту к пинам TX и GND соответственно, а белый в 24-пиновый ATX разъем на материнской плате к 3.3В.

Если COM-порта на компьютере нет или хочется избежать пайки, то можно воспользоваться USB-UART-конвертером на 3.3В. В этом случае питание и PB1-порт микроконтроллера надо соединить с питанием и TX-портом конвертера. Рекомендую заранее убедиться, что для чипа конвертера в используемой ОС есть нужный драйвер.

После подключения микроконтроллера к компьютеру, необходимо выполнить настройку COM-порта, задав скорость 115200 и для Linux добавив разрешения на запись. Это можно сделать в командной строке/терминале

Для Windows

mode COM3 BAUD=115200 PARITY=n DATA=8 echo HELLO > COM3 
Для Linux

sudo chmod o+rw /dev/ttyS0 sudo stty -F /dev/ttyS0 115200  echo "HELLO" > /dev/ttyS0 

Используйте ttyUSB0 вместо ttyS0, если подключение выполнено USB-UART-конвертером.

Поскольку экран маленький и на него помещается только 5 полноценных символов, что обычно не требуется, если надо показать напр. температуру, то в прошивку была добавлена возможность динамически изменять используемый размер шрифта, путем модификатора @N, где N: 0 — полноразмерный шрифт 20х32, используемый по умолчанию, 1 — узкий шрифт 10х32, как на КДПВ, 2, 3 и 4 — мелкий шрифт 10×16 с выравниванием по верху, центру и низу соответственно. Для отключения экрана достаточно отправить пустое сообщение.


Пример отображения строки @3CPU @066@3C

Дисплей SDD1306 и микроконтроллер ATtiny13 были выбраны для проекта поскольку нашлись в запасах. Покупать ATtiny13 сейчас, чтобы повторить проект, в виду высоких текущих цен на AVR, — особого смысла нет. За чуть больший ценник можно взять уже ESP8266 с большими ресурсами, за счет которых удастся реализовать не только поддержку нижнего регистра букв, но и даже кириллицу с выводом на несколько экранов, которые также можно заменить на 2+ дюймовые TFT для лучшей читаемости. С другой стороны, число деталей получилось минимальным, что тоже неплохо.

Страница проекта — https://github.com/little-brother/attiny13-serial-display.


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


Комментарии

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

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