HRP-N3 - серия источников питания с максимальной пиковой мощностью в 350% от MEAN WELL

Библиотека AVR GCC для управления ЖК индикатором - использование различных выводов микроконтроллера. Часть 2

Примечание. Выборки исходного кода, размещенные в тексте описания, использовать в своих проектах не рекомендуется. В конце описания имеется ссылка на архив с полным исходным кодом к проекту.

В первой части мы рассмотрели конфигурирование библиотеки AVR-GCC для работы с символьными ЖК индикаторами в 4-битном режиме при подключении к выводам различных портов микроконтроллера. Чтобы убедиться, что библиотека функционирует правильно, рассмотрим пример с подключением индикатора по 8-битной шине. Подключение индикатора осуществим согласно схемы.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Подключение ЖК индикатора к микроконтроллеру при использовании разных выводом микроконтроллера

Итак, в программе микроконтроллера сперва, как вы помните, нужно установить режим работы:

//используется 4-битный режмим работы ЖК индикатора (при стандартном подключении индикатора к МК)
//#define LCD_4BIT  //используется 8-битный режмим работы ЖК индикатора (при стандартном подключении индикатора к МК)
//#define LCD_8BIT  //используется 4-битный режмим работы ЖК индикатора (при использовании разных выводов МК)
//#define LCD_4BIT_M //используется 8-битный режмим работы ЖК индикатора (при использовании разных выводов МК)
#define LCD_8BIT_M

Далее, нам необходимо связать выводы индикатора с линиями ввода/вывода микроконтроллера:

#define LCD_RS 5 //вывод порта МК 5 подключен к LCD RS
#define LCD_RW 1 //вывод порта МК 1 подключен к LCD R/W
#define LCD_E 2  //вывод порта МК 2 подключен к LCD E
#define LCD_D0 0 //вывод порта МК 0 подключен к LCD D0
#define LCD_D1 7 //вывод порта МК 7 подключен к LCD D1
#define LCD_D2 1 //вывод порта МК 1 подключен к LCD D2
#define LCD_D3 2 //вывод порта МК 2 подключен к LCD D3
#define LCD_D4 4 //вывод порта МК 4 подключен к LCD D4
#define LCD_D5 2 //вывод порта МК 2 подключен к LCD D5
#define LCD_D6 6 //вывод порта МК 6 подключен к LCD D6
#define LCD_D7 0 //вывод порта МК 0 подключен к LCD D7

И теперь мы должны определить порт и регистр направления данных для каждого вывода микроконтроллера. Так как выводы индикатора могут быть подключены к разным портам, нам нужно работать с индивидуальными выводами. Редактируем следующую часть:

#ifdef LCD_4BIT_M || LCD_8BIT_M //8-битный или 4-битный режим работы (при использовании разных выводов МК)
#define LDPRS PORTB //назначаем порт для линии RS и регистр направления данных
#define LDDRS DDRB
#define LDPRW PORTD //назначаем порт для линии RW и регистр направления данных
#define LDDRW DDRD
#define LDPE PORTD  //назначаем порт для линии E и регистр направления данных
#define LDDE DDRD
#define LDPD0 PORTС //назначаем порт для линии D0 и регистр направления данных
#define LDDD0 DDRС
#define LDPD1 PORTD //назначаем порт для линии D1 и регистр направления данных
#define LDDD1 DDRD
#define LDPD2 PORTС //назначаем порт для линии D2 и регистр направления данных
#define LDDD2 DDRС
#define LDPD3 PORTB //назначаем порт для линии D3 и регистр направления данных
#define LDDD3 DDRB
#define LDPD4 PORTD //назначаем порт для линии D4 и регистр направления данных
#define LDDD4 DDRD
#define LDPD5 PORTC //назначаем порт для линии D5 и регистр направления данных
#define LDDD5 DDRC
#define LDPD6 PORTD //назначаем порт для линии D6 и регистр направления данных
#define LDDD6 DDRD
#define LDPD7 PORTB //назначаем порт для линии D7 и регистр направления данных
#define LDDD7 DDRB
#endif

Конфигурирование библиотеки AVR-GCC для 4-битного режима при стандартном подключении индикатора

В случае стандартного включения ЖК индикатора по 4-битной шине (байт-синхронизированное включение) конфигурирование осуществляется как и в прошлой версии библиотеки. Нужно будет только указать, что мы используем данный режим.

//используется 4-битный режмим работы ЖК индикатора (при стандартном подключении индикатора к МК)
#define LCD_4BIT 

Далее необходимо указать номера выводов микроконтроллера для сигналов управления и данных индикатора.

#define LCD_RS 0 //вывод порта МК 5 подключен к LCD RS
#define LCD_RW 1 //вывод порта МК 5 подключен к LCD R/W
#define LCD_E 2  //вывод порта МК 5 подключен к LCD E
#define LCD_D0 0 //вывод порта МК 5 подключен к LCD D0
#define LCD_D1 1 //вывод порта МК 5 подключен к LCDD1
#define LCD_D2 2 //вывод порта МК 5 подключен к LCD D2
#define LCD_D3 3 //вывод порта МК 5 подключен к LCD D3
#define LCD_D4 4 //вывод порта МК 5 подключен к LCDD4
#define LCD_D5 5 //вывод порта МК 5 подключен к LCD D5
#define LCD_D6 6 //вывод порта МК 5 подключен к LCD D6
#define LCD_D7 7 //вывод порта МК 5 подключен к LCD D7

Затем определяем порты и регистры управления, как указано ниже.

#if defined (LCD_4BIT)||defined (LCD_8BIT)
#define LDP PORTD //определяем порт микроконтроллера, подключенного к шине данных LCD
#define LCP PORTD //определяем порт микроконтроллера, подключенного к шине управления LCD
#define LDDR DDRD //определяем регистр управления портом микроконтроллера, подключенного к шине данных LCD
#define LCDR DDRD //определяем регистр управления портом микроконтроллера, подключенного к шине управления LCD
#endif

Эти же операции необходимо выполнить при стандартном подключении индикатора по 8-битной шине.

Следует заметить, что при байт-синхронизированном подключении индикатора обновление индикатора происходит быстрее, т .к. в 4-битном или 8-битном режиме данные принимаются быстрее – операции с целыми байтами или полубайтами. В смешанном режиме состояние каждого отдельного вывода микроконтроллера устанавливается отдельно. Это увеличивает число команд, используемых для передачи одного байта. Например, для передачи одного байта с помощью данной библиотеки, при подключении индикатора к различным выводам микроконтроллера, можно использовать данную функцию:

static void LCDMix_8Bit(uint8_t data)
{
  if((data)&(0b10000000)) LDPD7 |=1LCD_D7;
   else LDPD7 &=~(1LCD_D7);
   if((data)&(0b01000000)) LDPD6 |=1LCD_D6;
   else LDPD6 &=~(1LCD_D6);
   if((data)&(0b00100000)) LDPD5 |=1LCD_D5;
   else LDPD5&=~(1LCD_D5);
   if((data)&(0b00010000)) LDPD4 |=1LCD_D4;
   else LDPD4 &=~(1LCD_D4);
   if((data)&(0b00001000)) LDPD3 |=1LCD_D3;
   else LDPD3 &=~(1LCD_D3);
   if((data)&(0b00000100)) LDPD2 |=1LCD_D2;
   else LDPD2 &=~(1LCD_D2);
   if((data)&(0b00000010)) LDPD1 |=1LCD_D1;
   else LDPD1&=~(1LCD_D1);
   if((data)&(0b00000001)) LDPD0 |=1LCD_D0;
   else LDPD0 &=~(1LCD_D0);
 }

В функции проверяется каждый бит байта и устанавливается или сбрасывается соответствующий вывод порта. Другими словами, если ваше приложение отображает на индикаторе медленно меняющиеся данные, то подойдет любой режим работы. Но если вы используете ЖК индикатор/дисплей для динамического отображения данных или анимации, лучше всего выбирать стандартный способ подключения индикатора в 8- или 4-битном режиме.

Загрузки

Библиотека AVR-GCC с поддержкой смешанного подключения ЖК индикатора – скачать
Пример программы для управления индикатором (смешанное подключение, 4-битный режим) – скачать
Пример программы для управления индикатором (смешанное подключение, 8-битный режим) – скачать

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: AVR-GCC LCD library - mixed pin support. Part 2

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя