Главная » Компьютерная электроника
Призовой фонд
на сентябрь 2017 г.
1. 1000 руб
PCBWay
2. Осциллограф DSO138
Паяльник
3. Тестер компонентов MG328
Паяльник
4. 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 Поиск в LCSCВ блокнот
T1 Биполярный транзистор
КТ315А
1 Поиск в LCSCВ блокнот
X1 Кварцевый резонатор12 МГц1 Поиск в LCSCВ блокнот
C1, C2 Керамический конденсатор30 пФ2 Поиск в LCSCВ блокнот
С3 Электролитический конденсатор47 мкФ1 Поиск в LCSCВ блокнот
С4, С5 Керамический конденсатор0.1 мкФ2 Поиск в LCSCВ блокнот
R1 Резистор
1.5 кОм
1 Поиск в LCSCВ блокнот
R2, R3 Резистор
56 Ом
2 Поиск в LCSCВ блокнот
R4 Резистор
10 Ом
1 Поиск в LCSCВ блокнот
R5 Резистор
10 кОм
1 Поиск в LCSCВ блокнот
R7-R9 Резистор
3 кОм
4 Поиск в LCSCВ блокнот
R10 Резистор
820 Ом
1 Поиск в LCSCВ блокнот
Добавить все

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

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

Теги:

Опубликована: Изменена: 02.05.2014 0 0
Я собрал 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 канала)
Мультиметр DT9205A Катушка Тесла
вверх