Технология изготовления печатной платы с использованием пленочного фоторезиста.

Конвертер ASCII 1251 в байтовую строку.

AVR PAL модуль

на микроконтроллере ATmega8A.


Привет мои дорогие друзья. Хочу поделиться с вами своей разработкой видео модуля на распространенном и всем известном, а также доступном микроконтроллере ATmega8A. Создать данное устройство меня подтолкнуло то, что перелопатив весь интернет я не нашел конкретно рабочей хорошо задокументированной схемы. Схемы найденные в интернете в основном подогнаны под мониторы с интерфейсом VGA. А так как компьютерные мониторы довольно большого размера, это делает их в практике менее практичными, да и задокументированы эти схемы довольно мутно, не говоря уже и о более мощных микроконтроллерах с большим объемом RAM и FLASH.

Немного поразмыслив я захотел создать более простое устройство вывода на миниатюрные автомобильные мониторы, которых в интернет магазине на AliExpress большое множество, да и цена начинается от 600 рублей, что делает их довольно доступными. Для работы данных мониторов всего лишь нужно питание в 12В и видеосигнал в формате PAL.

Итак представляю на ваш суд свою схему AVR - PAL модуля на микроконтроллере ATmega8A.




Технические характеристики:

Микроконтроллер - AVR ATmega8A

Частота тактирования - 20МГц

Тип выдаваемого видеосигнала - PAL

Количество строк - 625 (черезстрочная развертка)

Изображение - черно-белое на белом.

Тип изображения - символьное ASCII 1251 с русифицированной раскладкой.

Количество символов по горизонтали - 29

Количество символов по вертикали - 17

Интерфейс управления модулем - UART (Скорость - 38400)

Прошивка модуля написана на Ассемблере.


Формирование сигнала происходит в полном объеме согласно стандарту включая все уравнивающие синхроимпульсы. Управление модулем осуществляется посредством UART порта микроконтроллера на частоте 38400. Байты 0x00 - 0x1F зарезервированы под команды. 0x20 - 0xFF символы ASCII. Передача байт через UART не искажает вывод видеосигнала и не сбивает синхронизацию. По обработке входящей информации модуль отправляет подтверждение что готов к новому приему данных командой 0x1F. Только после этого можно отправлять в него следующий байт! Будьте внимательны в данном моменте. Лучше всего отправку данных в программе сделать по прерыванию приема через UART чтобы не ожидать впустую. (Плата за стабильность развертки.) При начальной загрузке, когда модуль готов к приему данных, будет подана команда 0x1E. Также данная команда будет подана, при срабатывании сторожевого таймера после перезагрузки контроллера.

Для более быстрой загрузки (в разы быстрее) и полноты вывода большого количества символов рекомендуется отключать вывод изображения(синхронизация не отключается) командой 0x0F, а по завершению вывода включать отображение изображения командой 0x10. Данный метод рекомендуется использовать для глобального обновления экрана.

Модуль собран на плате размером 42мм на 50мм.







Технологию изготовления данной платы вы можете посмотреть по этой ссылке:

Технология изготовления печатной платы.

. Список управляющих команд:

0 (0x00) — Пустая команда.

1 (0x01) — Очистить экран. (Рекомендуется выполнять после запрещения вывода командой 0x0F).

2 (0x02) — Установить курсор на символ в строке ( 2 байта команда. Следующий байт должен указывать номер символа 0 - 28)

3 (0x03) — Установить курсор на строку. ( 2 байта команда. Следующий байт должен указывать номер строки 0 - 16)

4 (0x04) — Установить курсор на нулевую строку и нулевой символ.

5 (0x05) — Прочитать символ. Курсор увеличивается на одну позицию по горизонтали.(В ответ модуль отправит прочитанный байт)

6 (0x06) — Прочитать символ. Курсор увеличивается на одну позицию по вертикали.(В ответ модуль отправит прочитанный байт)

7 (0x07) — Режим курсор увеличивать на одну позицию по горизонтали.

8 (0x08) — Режим курсор увеличивать на одну позицию по вертикали.

9 (0x09) — Переместить курсор вверх.

10 (0x0A) — Переместить курсор вниз.

11 (0x0B) — Переместить курсор влево.

12 (0x0C) — Переместить курсор вправо.

13 (0x0D) — Узнать позицию курсора по горизонтали.(В ответ модуль отправит позицию курсора по горизонтали)

14 (0x0E) — узнать позицию курсора по вертикали. (В ответ модуль отправит позицию курсора по вертикали)

15 (0x0F) — Запретить вывод на экран. При запрещении вывода изображения - скорость обмена через UART возрастает в разы и никак не сказывается на стабильности экрана. Развертка генерируется в полной мере.

16 (0x10) — Разрешить вывод на экран.

29(0x1D) – Зарезервировано системой не использовать.

30(0x1E) – Зарезервировано системой не использовать.(Отправляется модулем при перезагрузке).

31 (0x1F) – Вывод экрана автора.

Для проверки работы модуля можно подключить его через переходник USB-UART к компьютеру. А для отправки и приема команд использовать программу Terminal v1.9.



Только настройки программы выставить как на фото. Установить скорость UART - 38400. Убрать галочку(Указано на фото какую)- обязательно.



Для ввода байт в десятичной системе счисления используйте #. Например #001 - отправить 1.

Для ввода байт в шестнадцатиричной системе используйте $. Например $0F - отправить число 15.

Для отправки символа просто введите его и нажмите ENTER или кнопку Send.

Имейте ввиду что данная программа не поддерживает ASCII 1251!, так что отправить символы русского алфавита у вас не получится! Результатом отправки будут кракозябры. Если вы хотите отправить символы русского алфавита, то вам придется отправлять код символа согласно таблице ASCII 1251. (Например отправка #144 выведет на экран букву "Р").



Скачать архив данного проекта вы можете по этой ссылке:

AVR PAL модуль на микроконтроллере ATmega8A.(Архив ZIP)

Демонстрационный ролик и канал проекта на YouTube:



Описание блока использованного в демонстрационном видео и библиотеку на Си для работы с модулем можете скачать тут:

Демонстрационный модуль AVR_PAL (Архив ZIP)


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

Конвертер ASCII 1251 в байтовую строку.



Спасибо за внимание. Удачного вам моделирования.