...

суббота, 21 декабря 2013 г.

Новогодняя малина — прикручиваем экран HD44780 к Raspberry Pi


С наступающим!

Проникшись идеями постов: «Поздравление по гиковски, без написания дров» и «Создание собственных драйверов под Linux» решил поделится ещё одним способом управления экраном на базе контроллера HD44780 с помошью Raspberry Pi.





Основной задачей LPT порта, демоплат и прочих крутых штук, при управлении экраном, является — дёргать нужными ногами экрана в соответствии с получаемыми от компьютера данными.

В моём случае нет разделения на комп и управляющюю плату так как у RPI есть прекрасный интерфейс General-purpose input/output (GPIO) которым можно рулить напрямую из программы. Для этого я решил использовать библиотеку bcm2835.



Тут не должно быть ничего сложного. Обратате внимание что у меня малина второй ревизии и распиновка разъёма немного отличается от первой.

Посмотреть распиновку разъёма на обе версии можно например тут.

Для удобной работы с экраном мною была написана простенькая библиотека самых важных на мой взгляд функций работы с экраном. Библиотека довольно сырая и неполная но для текущей задачи подойдёт.

Для начала её нужно немного настроить:

файл HD44780.h

#define HD44780_DB4 RPI_V2_GPIO_P1_11
#define HD44780_DB5 RPI_V2_GPIO_P1_12
#define HD44780_DB6 RPI_V2_GPIO_P1_13
#define HD44780_DB7 RPI_V2_GPIO_P1_15
#define HD44780_RS RPI_V2_GPIO_P1_03
#define HD44780_RW RPI_V2_GPIO_P1_05
#define HD44780_E RPI_V2_GPIO_P1_07




Тут требуется указать соответствия контактов GPIO и LCD, если схема подключения не отличается от приведенной ничего менять не нужно.

Так-же, возможно, придётся поправить lcd.c:

#define MAX_DISP_ROWS 2 // The HD44780 supports up to 4 rows
#define MAX_DISP_COLS 16 // The HD44780 supports up to 40 columns




Требуется указать размеры своего экрана.

Важно: экран питается от напряжения 5 вольт, а малина работает с логическими уровнями напряжением 3,3в экран отлично понимает данные уровни, а вот малина, если экран попытается ей чтото передать может и не выдержать, ибо «GPIO voltage levels are 3.3 V and are not 5 V tolerant. There is no over-voltage protection on the board» отсюда. Поэтому читать что либо из экрана настоятельно не рекомендуется. Чтобы всё работало по уму нужен преобразователь уровней, а не прямое подключение.


Работа с программой не слишком отличается от работы с портом из статьи goodic-а тут всё те-же управляющие последовательности так как основывался я на коде из его проекта который основан на проекте от dlinyj который использовал код за авторством Michael McLellan. OpenSource рулит. :)


последовательности


Итак, управляющие последовательности, для нашего экрана:



  • \033 = Отправка ESC-последовательности, с которой начинаются команды

  • [A = Переместить курсор на одну строку вверх

  • [B = Переместить курсор на одну строку вниз

  • [C = Сдвинуть курсор на одну позицию вправо

  • [D = Сдвинуть курсор на одну позицию влево

  • [H = Переместить курсор в левый верхний угол — домой (позиция 0,0)

  • [J = Очистить всё, НЕ возвращает курсор домой!

  • [K = Стирает до конца строки, НЕ возвращает курсор домой!

  • [M = Новая карта символов (ДЗ — объяснить зачем!)

  • [Y = Позиция Y (см. FAQ ниже)

  • [X = Позиция X (см. FAQ ниже)

  • [R = CGRAM Выбор ячейки памяти

  • [V = Прокрутка включена

  • [W = Прокрутка вылючена

  • [b = Подсветка включена-выключена (у нас работать не будет).


Другие полезные команды, работают без префикса \033!



  • \r = Возврат каретки (возвращают курсор в позицию 0 на текущей линии!)

  • \n = Новая линия

  • \t = Табуляция (по умолчанию 3 символа)








Единственное изменение: добавлена последовательность [i отвечающая за начальную инициализацию дисплея.

Её нужно передать при первом обращении к экрану.

Например:

Инициализируем экран.



root@raspberrypi:/home/pi/lcd# echo -en "\033[i" | ./lcd



Выводим текст.

root@raspberrypi:/home/pi/lcd# echo -en "\033[R0\004\016\037\004\016\037\025\016\033[J\033[HHappy New Year\041*\r\n\000\000\000 RPI LCD \000\000\000" | ./lcd




Из минусов данного решения можно заметить необходимость запуска программы из под прав администратора, это можно решить написанием драйвера, но с наскока разобратся как рулить малиной из ядра у меня не вышло.




Сборка:

root@raspberrypi:/home/pi/lcd$ gcc -o lcd lcd.c HD44780.c -lrt -lbcm2835

Чтобы не потерять выкладываю в виде zipjpeg:


С наступающим Новым годом!


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers.


Комментариев нет:

Отправить комментарий