Реклама ⓘ
Главная » Компьютерная электроника
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Дополнительный дисплей для компьютера на Nokia 2650 и AVR

Устройство представляет собой коробочку с дисплеем от Nokia 2650 и 8 кнопками, соединенную с компьютером по программному USB на ATmega8, и отображающую какую-то важную информацию. Программно устройство состоит из нескольких блоков: связь с дисплеем по SPI, связь по USB, обработка кнопок и связь с чем-нибудь по UART. Работа с дисплеем весьма понятно описана в этой статье. Я пробовал использовать аппаратный SPI контроллера, но особого преимущества не получил, в основном, потому что в контроллер встроен 8-битный модуль, а в дисплей - 9-битный. Для связи по USB используется известная библиотека vusb, точнее ее доработка для реализации USB-HID-устройства. После такого, обработка кнопок и UART не кажется чем-то сложным. Применения UART'у не нашел, поэтому толком и не тестировал, так, задел на будущее.

Схема устройства предельно проста - к каждому интерфейсу идет столько выводов, сколько ему нужно.

Платку пришлось делать двусторонней, вот как получилось: вид сверху (на некоторые кнопки надеты пластиковые колпачки для красоты)

Снизу

Сбоку

И в сборе

На плату даже уместился ISP-6 для программирования. Поскольку у большинства программаторов стандартом является ISP-10, воспользовался шлейфом-переходником

Общение с дисплеем и рисование примитивов можно найти в статье по ссылке, интереснее было разобраться с выводом текста. Для простоты и компактности каждый символ хранится в виде битовой маски из 5 байт, что дает теоретический размер 5х8 пикселей, но на самом деле старший бит обрезается, и получается 5х7, чего вполне достаточно почти для всех символов ASCII-кода (правда, например, буква "Щ" выглядит не слишком красиво). Посмотрев на такой шрифт на дисплее 3х3 см я сделал вывод что стоит шрифт увеличить. Для вывода символа обычного размера служит процедура nlcd_Char(), для увеличенного - nlcd_Char2(). Суть хранения символов в том, что одному биту соответствует один пиксель: если 1, то цвета пера, если 0 - фона. Эти два цвета (color_fg и color_bg) явным образом задаются по USB. Сама процедура вывода символа достаточно проста, похожа на вывод закрашенного прямоугольника и требует только точного расчета координат. Ну или танцев с бубном, если рассчитывать лень. Символы были нарисованы в самописной утилите и сохранены в удобном для использования формате. Хранятся, разумеется, во flash-памяти.

С точки зрения компьютера устройство считает себя HID'ом, то есть довольно медленным, но универсальным и не требующим специальных драйверов устройством. Это сделано для простоты программирования и какой-никакой кроссплатформенности. Обмен действительно медленный - заполнение всей доступной области картинкой, передаваемой по USB, занимает не меньше минуты, заполнение, не связанное с обменом, - меньше секунды. Устройство общается структурками по 2 байта: байт команды и байт данных. Всего реализовано 20 простых команд и 3 команды, связанные с цветом (установка цвета фона, цвета пера и вывод точки). Команды разделены на 8-битные, 7-битные и 4-битные. В 8-битных вся информация, если она нужна, хранится в байте данных. Это команды установки яркости (CMD_LED) и контрастности (CMD_CONT), сохранение их в EEPROM (CMD_SAVE), вывод примитивов (CMD_LINE, CMD_RECT, CMD_CIRCLE), очистка экрана (CMD_CLEAR) и обмен данными по UART. В 7-битных командах младших бит отвечает либо за направление (0 - X, 1 - Y), либо, для символа, за размер (0 - обычный, 1 - увеличенный), либо за дополнительный флаг (CMD_CTRL - передача байта данных прямо на контроллер дисплея, без дополнительной обработки, если возникнет желание поиграться с недокументированными режимами, тогда 0 - команда, 1 - данные). В 4-битных командах младшая половина байта команды вместе с байтом данных образуют 12-битный цвет, удобный для дисплея.

Также с устройства можно прочитать такую же структуру. В зависимости от байта команды (DAT_KEY или DAT_UART), в байте данных содержится либо состояние клавиатуры (0 в соответствующем разряде означает, что кнопка нажата, 1 - отпущена), либо принятый по UART байт.

Как видно по фотографиям, устройство вполне работоспособно, осталось только подключить его к компьютеру. Тестовые программы взаимодействия написаны (под windows на CBuilder, под Linux на обычном gcc) и позволяют продемонстрировать все команды. Но полноценной программы взаимодействия пока нет. Еще заметил странный баг - при общении с дисплеем, он начинает мерцать. Это не связано с питанием, скорее баг самого дисплея, или я не нашел нужной команды.

К сожалению, сейчас мало времени допилить программы взаимодействия до рабочего, а не тестового уровня.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
DD1 МК AVR 8-бит
ATmega8A-AU
1 Поиск в магазине ОтронВ блокнот
T1 Биполярный транзистор
КТ315А
1 Поиск в магазине ОтронВ блокнот
X1 Кварцевый резонатор12 МГц1 Поиск в магазине ОтронВ блокнот
C1, C2 Керамический конденсатор30 пФ2 Поиск в магазине ОтронВ блокнот
С3 Электролитический конденсатор47 мкФ1 Поиск в магазине ОтронВ блокнот
С4, С5 Керамический конденсатор0.1 мкФ2 Поиск в магазине ОтронВ блокнот
R1 Резистор
1.5 кОм
1 Поиск в магазине ОтронВ блокнот
R2, R3 Резистор
56 Ом
2 Поиск в магазине ОтронВ блокнот
R4 Резистор
10 Ом
1 Поиск в магазине ОтронВ блокнот
R5 Резистор
10 кОм
1 Поиск в магазине ОтронВ блокнот
R7-R9 Резистор
3 кОм
4 Поиск в магазине ОтронВ блокнот
R10 Резистор
820 Ом
1 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: Изменена: 02.05.2014 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (3) | Я собрал (0) | Подписаться

0
andreyka2024 #
Проект класс! Когда видео будет?
Ответить
0
Angel5a #
и отображающую какую-то важную информацию.
Это попытка придать "крутости" своему девайсу?
Проект может быть полезен при софтовой поддержке на стороне ПК. Либо самодельная программа по сбору данных загрузки/погоды/почты, либо привязаться к готовым LCD4linux LCPproc, что более практично.
Без этого проект бесполезная стекляшка.
И имхо неудачно выбран протокол обмена. И без того медленное HID вы еще урезали всего 2мя байтами. увеличте пакет до доступных 8 (или 64 байт) добавив поле размера данных или просто комбинируя по несколько команд (добавив команду nop).
Как ещё одна альтернатива - взять AVR-CDC (прошивка и дрова есть) представление COM-портом удобнее со стороны ПК и тогда есть шанс в появлении софтовой части на ПК и хоть какому-то полезному применению девайса. Я использовал стандартные системные дрова - ни каких проблем (а тем более у роутеров хид по умолчанию нет, а вот цдц обязательно присутствует).
Ответить
0

[Автор]
COKPOWEHEU #
Видео добавил. Но в видео обрезали работу с тестовой программой так, что ничего не видно.
Насчет скорости - и не предполагалось показывать видео или что-то в этом роде. Задача этой штуки где-то раз в минуту, ну или как удобно, выводить информацию о компьютере: загрузку процессора, памяти, температуру, может, и погоду, но мне оно не надо, даже не думал на эту тему.
В сторону LCD4Linux смотрел, но оно, вроде, не умеет принимать информацию от устройства.
AVR-CDC не устраивает: в качестве одной из операционок стоит Win7 x64, на которую неподписанные драйвера, как в avr-cdc, без плясок с бубном, не ставятся. Лучше уж использовать готовый драйвер.
Софтовая часть какая-никакая есть, иначе как я мог проверить устройство и сделать фотки с загруженными картинками.
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

USB-реле (2 канала)
USB-реле (2 канала)
Мультиметр Mastech MS8239C Лазерный модуль 650нм 5мВт
вверх