Использование cимвольных жидкокристаллических LCD дисплеев. Пример на GCC (WinAVR) для Atmega 8
Основными достоинствами символьных жидкокристаллических индикаторов (дисплеев) являются простота использования, не большая потребляемая мощность, рабочие напряжения 3..5 В, долговечность (до 15 лет непрерывной работы). На данный момент очень популярны ЖКИ компания Winstar. Не то чтобы популярны, соотношение цена/качество у них наиболее приемлемое. Winstar производить широкую линейку ЖКИ в том числе и графические индикаторы, но сегодня мы говорим о символьных. (см. также Графический дисплей WG12864A)
Схема подключения жидкокристаллических дисплеев
В качестве примера возьмем наиболее часто используемый WH1602. Назначение контактов LCD:У ЖКИ есть 8-ми и 4-х проводной режим обмена данными с микроконтроллером. Мы будим работать с 4-x. Ноги надо экономить :)
Внимание! Внимательно изучайте назначение выводов дисплея! У индикаторов с разным расположением контактов могут отличаться назначение выводов. Так, например, у WH1602D-YGH-CTK на первый вывод подается напряжение питания, в то время как другим индикаторам на первый вывод следует подавать общий провод (землю).
В нашем случае выводы дисплея DB0, DB1, DB2, DB3 задействованы НЕ будут.
Схема подключения к микроконтроллеру следующая:
Подстроечный резистор служит регулятором контрастности дисплея. Подробнее об особенностях контрастности и программном управлении контрастностью можно прочитать ниже.
GCC Библиотека для LCD
Данная библиотека была найдена на просторах интернета. Мне пришлось ее доработать, так как библиотека требовала в качестве шины данных использование четырех исключительно старших разрядов порта. При этом не позволяла использовать оставшиеся линии порта. Теперь для данных можно использовать любые 4 подряд идущие линии порта (0,1,2,3), (1,2,3,4), (2,3,4,5), (3,4,5,6) или (4,5,6,7), а другие ноги этого же порта можно нормально задействовать. Библиотека может быть использована для символьных дисплеев с любым разрешением.Используемая библиотека требует использовать для линий данных (DB4..DB7) идущих подряд 4-х линий одного порта. Для линий управления RS, E (R/W не используется) могут быть задействованы линии другого порта. Поскольку R/W не задействуем, легко догадаться, что читать из дисплея библиотека не умеет. В файле lcd_lib.hобратите внимание на описание используемых портов:
#define LCD_RS 1 //define MCU pin connected to LCD RS
//#define LCD_RW 0 //define MCU pin connected to LCD R/W<
#define LCD_E 2 //define MCU pin connected to LCD E
#define LCD_D4 4 //define MCU pin connected to LCD D3
#define LCD_D5 5 //define MCU pin connected to LCD D4
#define LCD_D6 6 //define MCU pin connected to LCD D5
#define LCD_D7 7 //define MCU pin connected to LCD D6
#define LDP PORTD //define MCU port connected to LCD data pins
#define LCP PORTB //define MCU port connected to LCD control pins
#define LDDR DDRD //define MCU direction register for port connected to LCD data pins
#define LCDR DDRB //define MCU direction register for port connected to LCD control pins
Для нашей схемы оставляем все без изменений. Пример для работы с дисплеем можно скачать здесь.
Краткое описание функций:
void LCDsendChar - Печатает один символ в текущую позицию void LCDinit - Инициализация LCD void LCDclr - Очистка LCD void LCDhome - переводит курсор в начало void LCDstring - Печатает строку указанной длинны в текущую позицию void LCDGotoXY - Перемещает курсор в указанную позицию void CopyStringtoLCD - Копирует строку из флэш-памяти в указанную позицию дисплея void LCDdefinechar - Записывает изображение символа в память дисплея void LCDshiftRight - перемещает изображение на указанное число символов вправо void LCDshiftLeft - перемещает изображение на указанное число символов влево void LCDcursorOn - Включает курсор подчеркивание void LCDcursorOnBlink - Включает мигающий курсор void LCDcursorOFF - Выключает курсор void LCDblank - отключает изображение, но не очищает void LCDvisible - включает изображение void LCDcursorLeft - перемещает курсор на указанное число символов влево void LCDcursorRight - перемещает курсор на указанное число символов вправо
Контрастность, программное изменение контрастности
Контрастность дисплея управляется подачей напряжения на специальный контакт (см. документацию по дисплею). При этом уровень контрастности зависит от разницы величины напряжения между напряжением питания и напряжением, поданным на контакт контрастности. Для нормальной контрастности разница должна составлять примерно 4 Вольта. Т.е. на контакт контрастности нужно подать при питании 5В примерно 5-4=1 вольт, и примерно 3.3-4=-0.7В (!отрицательное напряжение) при питании 3.3В. Дисплеи, которые имеют встроенный преобразователь напряжения (для контрастности) могут работать при питании 3.3 и 5 В. Обычно это указано в документации. Электроника дисплеев, рассчитанных на питание 5В, отлично работает и при 3.3В., единственный вопрос - где взять отрицательное напряжение для управления контрастностью? Для этого я применяю не сложную схему инвертора напряжения:На вход схемы подаем ШИМ сигнал с микроконтроллера. Управляя скважностью сигнала, можно программно регулировать контрастность. Для ATMega8 это делается примерно так:
TCCR1A = (1<<WGM10) | (1<<WGM11) | (1<<COM1A1);
TCCR1B = (1<<CS11);
OCR1A = 7; // Уровень контрастности
DDRB |= (1<<OC1A);
Характеристики и обозначение дисплеев
Дисплеи Winstar имеют буквенно-цифровое обозначение, в котором содержаться его характеристики. Система обозначений приведена в следующей таблице:W | H | 1602 | B | - | Y | G | B | - | CP | ** |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
№ | Пояснение | Значение | Описание |
1 | Производитель | W | продукт Winstar |
2 | Тип модуля | H | символьный |
G | графический | ||
X | TAB | ||
3 | Число символов, строк или точек | 08,16,20,24,40... | количество символов в строке (для символьных ЖКИ) |
120,122,128... | количество точек в строке (для графических ЖКИ) | ||
01,02,03,04... | количество строк (для символьных ЖКИ) | ||
08,16,32...240... | количество точек в столбце (для графических ЖКИ) | ||
4 | Модель индикатора | A - Z | Серийный номер модели |
5 | Тип и цвет подсветки | N | без подсветки |
A | светодиодная янтарная | ||
B | электролюминисцентная синяя | ||
D | электролюминисцентная зелёная | ||
F | CCFL белая | ||
G | светодиодная зелёная | ||
P | светодиодная синяя | ||
R | светодиодная красная | ||
T | светодиодная белая | ||
W | электролюминисцентная белая | ||
Y | светодиодная желто-зеленая | ||
6 | Тип и цвет ЖКИ | B | TN позитивный, серый |
F | FSTN позитивный | ||
G | STN позитивный, серый | ||
M | STN негативный, синий | ||
N | TN негативный | ||
T | FSTN негативный | ||
Y | STN позитивный, желто-зелёный | ||
7 | Тип поляризации, диапазон температур, угол зрения | A | на отражение, 0 - +50°C, 6:00 |
B | на просвет и отражение, 0 - +50°C, 6:00 | ||
C | на просвет, 0 - +50°C, 6:00 | ||
D | на отражение, 0 - +50°C, 12:00 | ||
E | на просвет и отражение, 0 - +50°C, 12:00 | ||
F | на просвет, 0 - +50°C, 12:00 | ||
G | на отражение, -20 - +70°C, 6:00 | ||
H | на просвет и отражение, -20 - +70°C, 6:00 | ||
I | на просвет, 0 - +50°C, 6:00 | ||
J | на отражение, -20 - +70°C, 12:00 | ||
K | на просвет и отражение, -20 - +70°C, 12:00 | ||
L | на просвет, -20 - +70°C, 12:00 | ||
8 | Знакогенератор | JS / JP | английский/японский |
EE / EU / EP / ES / EC | английский/европейский | ||
CP | английский/русский | ||
9 | Специальный код | V | встроенный источник отрицательного напряжения |
T | встроенный источник отрицательного напряжения и температурная компенсация | ||
TS | Touch Screen | ||
E | подсветка в торец |
Параметры стандартных моделей символьных ЖКИ-индикаторов:
Тип | Модель | Размер модуля, мм | Размер видимой области, мм | Размер точки, мм | Размер символа, мм | Process Color | Backlight | |||||||
TN | STN Gray | STN Yellow | STN Blue | None | LED | EL | ||||||||
WH0802 | A | 58.0 x 32.0 | 38.0 x 16.0 | 0.56 x 0.66 | 2.96 x 5.56 | |||||||||
WH1202 | A | 55.7 x 32.0 | 46.0 x 14.5 | 0.45 x 0.60 | 2.65 x 5.50 | |||||||||
WH1601 | A | 80.0 x 36.0 | 66.0 x 16.0 | 0.55 x 0.75 | 3.07x 6.56 | |||||||||
B | 85.0 x 28.0 | 66.0 x 16.0 | 0.55 x 0.75 | 3.07x 6.56 | ||||||||||
WH1602 | A | 84.0 x 44.0 | 66.0 x 17.0 | 0.55 x 0.65 | 2.95 x 5.55 | |||||||||
B | 80.0 x 36.0 | 66.0 x 16.0 | 0.55 x 0.65 | 2.96 x 5.56 | ||||||||||
C | 85.0 x 36.0 | 66.0 x 16.0 | 0.56 x 0.66 | 2.96 x 5.56 | ||||||||||
D | 85.0 x 30.0 | 66.0 x 16.0 | 0.56 x 0.66 | 2.96 x 5.56 | ||||||||||
J | 80.0 x 36.0 | 66.0 x 16.0 | 0.56 x 0.65 | 2.96 x 5.56 | ||||||||||
L | 122.0 x 44.0 | 99.0 x 24.0 | 0.92 x 1.10 | 4.84 x 9.66 | ||||||||||
M | 85.0 x 32.6 | 66.0 x 17.0 | 0.56 x 0.65 | 2.96 x 5.56 | ||||||||||
WH1604 | A | 87.0 x 60.0 | 62.0 x 26.0 | 0.55 x 0.55 | 2.95 x 4.75 | |||||||||
B | 70.6 x 60.0 | 60.0 x 32.6 | 0.55 x 0.55 | 2.95 x 4.75 | ||||||||||
WH2002 | A | 116.0 x 37.0 | 85.0 x 18.6 | 0.60 x 0.65 | 3.20 x 5.55 | |||||||||
L | 180.0 x 40.0 | 149.0 x 23.0 | 1.12 x 1.12 | 6.00 x 9.66 | ||||||||||
M | 146.0 x 43.0 | 123.0 x 23.0 | 0.92 x 1.10 | 4.84 x 9.22 | ||||||||||
WH2004 | A | 98.0 x 60.0 | 77.0 x 25.2 | 0.55 x 0.55 | 2.95 x 4.75 | |||||||||
L | 146.0 x 62.5 | 123.5 x 43.0 | 0.92 x 1.10 | 4.84 x 9.22 | ||||||||||
WH2402 | A | 118.0 x 36.0 | 94.5 x 16.0 | 0.60 x 0.65 | 3.20 x 5.55 | |||||||||
WH4002 | A | 182.0 x 33.5 | 154.4 x 16.5 | 0.60 x 0.65 | 3.20 x 5.55 | |||||||||
WH4004 | A | 190.0 x 54.0 | 147.0 x 29.5 | 0.50 x 0.55 | 2.78 x 4.89 |
Смотри так же:
Подскажите пожалуйста как быть с таким большим экраном, что нужно отредактировать в библиотеке?
Можно подробней о записи в CGRAM по адресам и вывод этих символов .
#define LDP PORTD //define MCU port connected to LCD data pins
#define LCP PORTD //define MCU port connected to LCD control pins
#define LDDR DDRD //define MCU direction register for port connected to LCD data pins
#define LCDR DDRD //define MCU direction register for port connected to LCD control pins
Возможно PORT или DDR не исправили?
посмотрел листинги, там вроде стоят delay-и. или есть еще некоторые нюансы?
Подскажите пожалуйста как быть с таким большим экраном, что нужно отредактировать в библиотеке?
у меня та же проблема, но у меня 4х строчный DV40400. Заранее спасибо
Додати коментар
Недавні записи
- 🇺🇦 FOC Board STM32F103RB 🧩
- STM32 Motor control SDK - керування оборотами мотора за допомогою потенціометра 📑
- Flask✙Gunicorn✙Nginx➭😎
- STM32 Motor control SDK - програмне керування обертам мотора
- STM32 Motor control SDK - як створити перший проект
- Vue SVG. Приклад побудови живого параметричного креслення
- Вимірювання моменту мотора
- Vue SVG - компонент. Приклад 📑
- Flask + Vue 🏁 Финальный пример 🏁
- Flask, CORS, JSON-файл. Пример#6
Tags
bldc brushless stm32 motor web html css flask atmega foc git java-script pmsm raspberry-pi python websocket mongodb esp8266 nodemcu st-link tim timer docker ngnix programmator ssd1331 ssd1306 wifi uart meteo bme280 bmp280 i2c gps mpu-6050 mpu-9250 sensors 3d-printer options usb barometer remap watchdog flash eeprom rtc bkp encoder pwm servo capture examples dma adc nvic usart gpio books battery dc-dc sms max1674 avr lcd dht11 piezo rs-232 rfid solar exti bluetooth eb-500 displays ethernet led smd soldering mpx4115a hih-4000
Архіви