Свързване на LCD екрана LCM1602 с I2C към Arduino. Свързване на LCD екран LCM1602 от I2C към Arduino Свързване на LCD 1602 чрез i2c интерфейс

ЛСД дисплей- Чест гост на проекти на Arduino. Въпреки това, при сгъваеми схеми може да имаме проблем с липсата на Arduino портове поради необходимостта от свързване на екран, който има много контакти. Изходът от тази ситуация може да бъде I2C/IICАдаптер, който свързва практически стандартен екран Arduino 1602 към Uno, Nano или Mega платки с допълнителни 4 пина. Тази статия показва как можете да свържете LCD екран с I2C интерфейс, как можете да получите достъп до библиотеки, да напишете кратък пример и да разгледате типични приложения.

Дисплей с течни кристали LCD 1602Това е първият избор за показване на редове от символи в различни проекти. Той е евтин, с различни модификации с различни цветове на подсветката, можете лесно да създадете готови библиотеки за скицата на Arduino. Ale от неукротимия краткотраен Tsoogo Ekran е този факт, показването на 16 май на digiribrus на Visnovkiv, с Yakiki -Ism най-малко 6. Використанът на Tsoogo LCD без I2C SERYOZHEND към Arduino UNO Poen Nano. Ако няма контакти, ще трябва да закупите платка Arduino Mega или да защитите контактите, включително за свързване на дисплея чрез i2c.

Кратко описание на LCD 1602 пина

Нека разгледаме по-подробно технологията LCD1602:

Кожата от лозята има свое значение:

  1. Земя GND;
  2. Харчування 5;
  3. Настройка на контраста на монитора;
  4. Екип, данни;
  5. Записване и четене на данни;
  6. Активиране;

7-14. Линии за данни;

  1. Плюс поддръжка;
  2. Минус осветление.

Спецификации на дисплея:

  • Символен тип дисплей - възможност за въвеждане на символи;
  • LED подсветка;
  • Контролер HD44780;
  • Живо напрежение 5V;
  • Формат 16x2 знака;
  • Температурен диапазон на работа: -20°С до +70°С, температурен диапазон на съхранение: -30°С до +80°С;
  • Нека погледна на 180 градуса.

Схема на свързване на LCD към платка Arduino без i2C

Стандартната схема за свързване на монитор директно към микроконтролер Arduino без I2C изглежда така.

Поради големия брой свързани контакти може да няма достатъчно място за получаване на необходимите елементи. Превключвателят I2C променя броя на стреличките на 4 и броя на заетите щифтове на 2.

Къде да закупите LCD екрани и екрани за Arduino

LCD екран 1602 (и версия 2004) е много популярен, така че лесно можете да го намерите както в местните онлайн магазини, така и на чуждестранните пазари. Нека да разгледаме наличните опции:

LCD1602+I2C модул със син екран, комбиниран с Arduino Прост LCD1602 дисплей (зелена подсветка) по-евтин от 80 рубли Голям LCD2004 екран с I2C HD44780 за Arduino (синьо и зелено фоново осветление)
Дисплей 1602 с IIC адаптер и сини светлини Друга версия на LCD1602 със запоен I2C модул Порт IIC/I2C/TWI/SPI адаптерен модул за екран 1602, подходящ за Arduino
Дисплей с RGB превключватели! LCD 16×2 + клавиатура + Buzzer Shield за Arduino Шийлд за Arduino с бутони и екран LCD1602 LCD 1602 LCD дисплей за 3D принтер (Smart Controller for RAMPS 1.4, Text LCD 20×4), SD и MicroSD модул за четене на карти

Описание на I2C протокола

Първо, нека поговорим накратко за свързването на дисплея към Arduino чрез i2c адаптер, нека поговорим накратко за самия i2C протокол.

I2C/IIC(Inter-Integrated Circuit) е протокол, който първоначално е създаден за свързване на интегрални схеми в средата на електронно устройство. Дизайнът принадлежи на компанията Philips. Протоколът i2c се основава на 8-битова шина vicorstan, която е необходима за свързване на блокове в електрониката, която го управлява, и системата за адресиране, която може да бъде свързана по същите кабели кома устройства. Ние просто доставяме данни на едно или друго устройство, като добавяме идентификатора на необходимия елемент към пакетите с данни.

Най-простата I2C схема може да побере едно кабелно устройство (обикновено микроконтролер Arduino) и много устройства (например LCD дисплей). Всяко устройство има адрес в диапазона от 7 до 127. Две устройства с еднакъв адрес не е задължително да бъдат в една и съща верига.

Платката Arduino поддържа i2c на хардуерно ниво. Можете да използвате щифтове A4 и A5 за свързване на устройства, използващи този протокол.

В робота I2C можете да видите редица предимства:

  • Работата изисква поне 2 линии – SDA (линия за данни) и SCL (линия за синхронизация).
  • Свързване на голям брой кабелни устройства.
  • Промяна на часа на размирици.
  • За управление на целия набор от устройства е необходим само един микроконтролер.
  • Всеки брой микросхеми, които са свързани към една шина, са заобиколени само от граничен капацитет.
  • Високото ниво на спестяване на данни чрез специален филтър потиска пръските, генерирани във веригите.
  • Проста процедура за диагностициране на възникващи неизправности и отстраняване на неизправности.
  • Шината вече е интегрирана в самия Arduino, така че няма нужда от допълнително разширяване на интерфейса на шината.

Недолики:

  • Основното отклонение на линията е 400 pF.
  • Важно е да програмирате I2C контролера, тъй като в шината има няколко различни устройства.
  • При голям брой устройства става трудно да се локализира повредата, тъй като едно от тях автоматично инсталира фактор на ниско ниво.

i2c модул за LCD 1602 Arduino

Най-добрият и най-лесният начин да инсталирате i2c дисплей в Arduino е да закупите готов екран с вграден протокол. Но такива екрани не издържат на вонята, не е евтино. И оста на различни стандартни екрани вече е произвела голяма здравина. Следователно най-достъпният и най-популярен вариант днес е закупуването и подмяната на съседен I2C модул - адаптер, който изглежда така:

От едната страна на модула има i2c пинове - заземяване, живот и 2 за пренос на данни. От друг адаптер ще използваме розите на външния живот. И, разбира се, има голо дъно на платката, в допълнение към което модулът е запоен към стандартните компоненти на екрана.


За да се свържете с Arduino плащане, използвайте i2c излизане. При необходимост свързваме външно захранване за осветление. С помощта на вграден трим резистор можем да регулираме настройките на контраста J

На пазара можете да намерите LCD 1602 модули със запоени адаптери, тяхната инсталация е максимално опростена. Ако сте закупили същия адаптер, ще трябва да го запоите предварително към модула.

Свързване на RK екрана към Arduino чрез I2C

За да се свържете, имате нужда от самата платка Arduino, дисплей, макет, конектори и потенциометър.

Ако използвате специален i2c адаптер, първо трябва да го запоите към екранния модул. Важно е да имате милост там, можете да се включите в такава схема.


RCD монитор с поддръжка на i2c е свързан, преди да платите за допълнителните четири стрели - две стрели за данни, две стрели за цял живот.

  • GND връзката е свързана към GND на платката.
  • VCC е на 5V.
  • SCL е свързан към щифт A5.
  • SDA е свързан към щифт A.

Това е всичко! Дълги мрежи от пътувания, в които е лесно да се изгубиш. В този случай можем просто да поверим цялата сложност на внедряването на i2C протокола на библиотеките.

Библиотеки за роботи с i2c LCD дисплей

За да комуникирате между Arduino и LCD 1602 чрез I2C шината, ще ви трябват поне две библиотеки:

  • Библиотеката Wire.h за работа с I2C вече е включена в стандартната програма Arduino IDE.
  • Библиотеката LiquidCrystal_I2C.h, която включва голямо разнообразие от команди за управление на монитор през I2C шината, ви позволява да създадете по-проста и по-кратка скица. Необходимо е допълнително да инсталирате библиотеката След като свържете екрана, трябва да инсталирате библиотеката LiquidCrystal_I2C.h

След свързване на всички необходими библиотеки към скицата, ние създаваме обект и можем да персонализираме неговите функции. За тестване е важно да използвате стандартна скица на дупето.

#включи #включи // Библиотечни връзки //#include // Свързване на алтернативна библиотека LiquidCrystal_I2C lcd(0x27,16,2); // Показвам I2C адрес (Night -shine), аз съм параметърът на Ekran (в LCD 1602 - 2 реда от 16-те символи в кожата // Liquidcrystal_pf8574 LCD (0x27); // Wareant за настройката на Bigblastic PCF8574 VOOID (LCD) (LCD .init (); // Инициализиране на дисплея lcd.backlight(); // Свързване на дисплея lcd.setCursor(0,0); // Поставете курсора в началото на първия ред lcd.print ("Здравей"); // Поставете курсора в началото на друг ред lcd.print ("ArduinoMaster"); // Въведете текст на друг ред ()

Описание на функциите и методите на библиотеката LiquidCrystal_I2C:

  • home() и clear() – първата функция ви позволява да завъртите курсора в горната част на екрана, като същевременно показва всичко, което е било на монитора преди.
  • write(ch) – позволява ви да напишете един символ ch на екрана.
  • cursor() и noCursor() – показват/скриват курсора на екрана.
  • blink() и noBlink() – курсорът мига/не мига (ако показването му е било активирано преди това).
  • display() и noDisplay() – позволява ви да свържете/включите дисплея.
  • scrollDisplayLeft() и scrollDisplayRight() – превърта екрана с един знак за лява/дясна ръка.
  • autoscroll() и noAutoscroll() – позволява ви да включите/изключите режима на автоматично превъртане. За кой режим на кожата се записва нов символ на същото място, което преди е било изписано на екрана.
  • leftToRight() и rightToLeft() – Вмъкване директно на показания текст – отляво надясно или отдясно наляво.
  • createChar(ch, bitmap) – създава символ с код ch (0 – 7), като използва масив от растерни изображения за създаване на черни и бели точки.

Алтернативна библиотека за роботи с i2c дисплей

В някои случаи, когато присвоената библиотека с устройства, оборудвани с контролери PCF8574, е повредена, може да възникнат грешки. Алтернатива на тази опция е библиотеката LiquidCrystal_PCF8574.h. Тя разширява LiquidCrystal_I2C, което не е причина за проблемите на викторианците.

Проблеми при свързване на i2c LCD дисплей

Ако след като щракнете върху скица, не видите желаното съобщение на дисплея, опитайте да щракнете върху тези действия.

Първо, можете да увеличите или промените контраста на монитора. Често героите просто не се виждат чрез режимите на контраст и осветление.

Ако това не помогне, проверете дали контактите са свързани правилно и дали захранването е свързано. Ако сте използвали съвместим i2c адаптер, проверете отново точката на запояване на контактите.

Друга често срещана причина за липсващ текст на екрана може да са неправилни i2c адреси. Опитайте се да запомните в скиците адреса на устройството с 0x27 0x20 или 0x3F. Различните дистрибутори може да имат различни адреси за плащане. Ако това не помогне, можете да стартирате i2c скенера на скенера, който преглежда всички връзки на устройството и определя техните адреси с помощта на метод на груба сила. Задна скица на i2c скенер.

Ако екранът все още не работи, опитайте да запоите адаптера и да свържете LCD както обикновено.

Висновок

В тази статия разгледахме основното захранване за LCD екрана в проекти за сгъване на Arduino, ако трябва да спестим допълнителни пари от платката. Прост и евтин i2c адаптер ви позволява да свържете 1602 LCD екран, като използвате само 2 аналогови щифта. В повече ситуации можете да бъдете още по-важен. Такса за наличност - необходимост от използване на допълнителен модул - конвертор и библиотека. Според нас цената на гъвкавостта не е никак висока и ви препоръчваме да се възползвате от тази гъвкавост в проектите.

LCD I2C модулът ви позволява да свържете символен дисплей към платката Arduino, като използвате само два сигнални проводника.

Викоризирани компоненти (купете от Китай):

. Керивна дъска

. Семеен дартс

Основни технически характеристики:

Дисплей: Символ 16x02 или 20x04
. Sublight: Синьо с бели символи
. Контраст: Регулируем с потенциометър
. Живо напрежение: 5V
. Интерфейс: I2C
. I2C адреси: 0x27
. Размери: 82 мм х 35 мм х 18 мм

Връзки с Arduino

Модул с четири изводна букса стандартна 2.54мм

SCL: Сериен часовник

S.D.A.: Серийни данни

VCC: "+" механа

GND: "-" оживено

Връзките осигуряват I2C интерфейс на Arduino платки, базирани на различни контролери и варират

За да работите с този модул, трябва да инсталирате библиотеката LiquidCrystal_I2C1602V1

Събираме го, разопаковаме го и го хвърляме в папката с библиотеки на бащата на Arduino. Тъй като по времето, когато библиотеката е добавена, Arduino IDE е била отворена, така че средната част е активирана отново.

Да преминем направо към скицата. Това приложение показва стандартното „Здравей, свят!“ И то на адреса на нашето място за спане.

примерен програмен код:

#включи #включи LiquidCrystal_I2C lcd(0x27,16,2); /* Задава адреса и размера на дисплея. Когато използвате LCD I2C модул с дисплей 20x04, няма нужда да променяте нищо в кода, просто задайте правилния размер */невалиден настройвам() (lcd.init(); //Инициализация на LCD lcd.backlight(); // Активиране на фоновото осветление // Курсорът е на първия ред lcd.print("Здравей, свят!"); // Показване на текст lcd.setCursor (0, 1); // Поставете курсора върху главата на втория ред lcd.print("сайт"); // Показване на текст) void цикъл () { }

Създаване на властови символи

Показаният текст е прочетен, английската азбука е въведена в паметта на контролера в средата на дисплея и няма проблеми. Какво трябва да направи оста, ако в паметта на контролера няма необходимия символ?

Няма проблем, необходимият символ може да се генерира ръчно. Този метод, на части, впръсквайки 7 знака, ще помогне за решаването на проблема с идентификацията.

Книгата в дисплеите, които разглеждаме, съдържа 5x8 точки. Всичко, което е необходимо, за да създадете символ, е да напишете битова маска и да поставите единици в нея на места, където има точки и нули.

Посоченото по-долу има усмихнато лице.

примерен програмен код:

//Тестван на Arduino IDE 1.0.5 // Добавете необходимите библиотеки#включи #включи // Маска на Побутов за символ на смехабайт усмивка = (B00010, B00001, B11001, B00001, B11001, B00001, B00010,); LiquidCrystal_I2C lcd(0x27,20,4); // Задайте адреса и размера на дисплея.невалиден настройвам() (lcd.init(); //Инициализация на LCD lcd.backlight(); // Активиране на фоновото осветление // Създаване на символ номер 0 lcd.createChar(1, усмивка); lcd.setCursor(0, 0); // Поставете курсора върху ухото на 1-ви ред lcd.print("\1"); // Показване на усмивка (символ номер 1) - "\1") невалиден цикъл () { }

Програма за създаване на символи

В коментарите участник изпрати съобщение до генератора на знаци

Като добавим тук към магазина за хранителни стоки, Chip Resistor е червячно устройство за инсталиране и стагнация в кафяви устройства. Това устройство е проектирано за използване с LCD дисплей под контролера HD44780 в 4-битов режим. За тази цел на платката е инсталирана микросхема, която преобразува I2C шината в паралелен 8-битов порт.

Платката е окабелена по такъв начин, че да може веднага да се комбинира с PK дисплея. На входа се подава жива I2C линия. Платката е снабдена с издърпващи резистори по линиите SCL и SDA, потенциометър за регулиране на контраста и живота на самия дисплей.

Джъмперът вдясно мига/мига. След това, след като използвах тестера, знакът беше сгънат. След инсталирането на модула се разкри, че P3грижи се за свещите. Като джъмпер, 1 включва подсветката, а 0 изгасва. Когато джъмперът бъде премахнат, превключвателят винаги ще се изключва. След това беше взето решение да се допълни библиотеката axlib с функции за работа с I2C шина (софтуерна реализация) и функции за захранване с микросхема PCF8574. С две думи как работи модула. За да изведете байт паралелно, за което трябва да изпратите адреса на микросхемата към I2C шината (по подразбиране е 0x4E. Можете също да промените адреса, като запоите джъмпер на платката и промените стойностите от трите адреса на бита от нисък ред), тогава след като ACK бъде отхвърлено, байтът данни се изпраща. След като микросхемата отговори с ACK, байтът се появява на паралелния порт на микросхемата. За да контролирам PK дисплея, взех функции от библиотеката axlib и леко ги модифицирах, за да работят с I2C шината. #включи #включи #включи #включи #define ADD 0x4E // Адреси на микросхеми /* LCD чип RS P0 RW P1 EN P2 D4 P4 D5 P5 D6 P6 D7 P7 Светлина е свързана към дъното на P3. 1 включено, 0 вик. */ // Видение на почит com | = 0x04; // E към едно pcf8574_byte_out(com, ADD); // Видение на почит com &= 0xFB; // Є до нула pcf8574_byte_out(com, ADD); // Видение на почит) void init (void) (_delay_ms (30); com(0x30); _закъснение_ни(40); com(0x30); // Преход към 4-битов режим _закъснение_ни(40); // Изрязване до команда Vikonannya com(0x30); // Преход към 4-битов режим _закъснение_ни(40); // Изрязване до команда Vikonannya com(0x20); // Преход към 4-битов режим _закъснение_ни(40); // Изрязване до команда Vikonannya com(0x20); // Задаване на параметри com(0x80); // Задаване на параметри com(0x00); // Vimicable дисплей com(0x80); // Vimicable дисплей com(0x00); // Изчистване на дисплея com(0x10); // Изчистване на дисплея com(0x00); com(0x60); // Задайте режима за въвеждане на данни com(0x00); com(0xC0); // Включете дисплея с избрания курсор) void char_out(BYTE данни) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Прехвърляне на най-значимите 4 бита от data_h |= 0x04; pcf8574_byte_out(data_h, ADD)); // Прехвърлете най-високите 4 бита // Прехвърлете най-високите 4 бита // Прехвърляне на по-младите 4 бита // Прехвърляне на по-младите 4 бита // Прехвърляне на по-младите 4 бита) void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) ) int main(void) ( init(); str_out("ЁPҐBET MҐP!" ; докато (1) ( ) ) Vlasna, какво става тук? Отсега нататък можем да свързваме библиотеки за I2C и PCF8574. След като вече писах за I2C, ще ви разкажа за него отново и ще ви разкажа за оста в PCF8574.h. Само три функции са добавени към библиотечния склад.
BYTE pcf8574_test(BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); i2c_stop(); return ask; )Първата функция е написана за проверка на присъствието на устройството в шината. По принцип те могат да се използват за намиране на всяко устройство, което е в автобуса. Функцията приема адреса на устройството и ако съвпадне, се нулира. Ако в автобуса няма устройство с такъв адрес, завийте.
BYTE pcf8574_byte_out(BYTE данни, BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); if(!ask) ask = i2c_send_byte(data); )Тази функция вече е съобразена с тази микросхема. Като аргумент се изпраща байт към шината до адреса на микросхемата. Функцията е първо да поиска микросхемата за адреса и след това да намери байта. Ако микросхемата получи байт и изпрати ACK, тогава функцията завършва работата с микросхемата и връща нула, тъй като изпрати байт. И микросхемата сега извежда този байт към своя паралелен порт. В противен случай NACK се отхвърля и след това се връща към едно, предаването е неуспешно.
BYTE pcf8574_str_out(BYTE *данни, BYTE col, BYTE add) ( BYTE ask = ACK; add &= 0xFE; i2c_start(); ask = i2c_send_byte(add); for(BYTE i=0; i Тази функция е предназначена за експериментиране. Индикаторът получава масив от еднобайтови данни, броя на байтовете и адреса на микросхемата. Моля, опитайте се да прехвърлите всички данни в една сесия, а не по един байт на сесия. Функцията работи, но не е подходяща за PK дисплея. Сега да се върнем към основната програма. След като свържете библиотеки, напишете адреса на микросхемата. След това създаваме три функции, подобни на lcd.h. Принципът на прехвърляне има по-малко значение.
void com (BYTE com) (com | = 0x08; // P3 към едно, така че превключвателят да изгори pcf8574_byte_out(com, ADD); // Видение на почит com | = 0x04; // E към едно pcf8574_byte_out(com, ADD); // Видение на почит com &= 0xFB; // Є до нула pcf8574_byte_out(com, ADD); // Видение на почит } Тази функция предава само команди към дисплея. Първият ред се появи от логическите добавки на командата от 0x08. Това е необходимо поради факта, че предаваме байта не директно към порта на RK дисплея, а през нашия повторител. Ако сме изпратили байт и след това трябва да изведем само един бит, тогава, моля, приемете необходимия бит до последния байт и след това го изпратете отново на порта. Това е проблема. Добавянето от 0x08 е необходимо за постоянно намаляване на единицата до трета категория. Спомняте ли си за свещите? Самата ос е добавена и включва осветление. След това се извиква функцията за прехвърляне на байт към шината. За нея е писано много. След това прехвърляме байта през шината към микросхемата. След това поставете проследяването в единица E, което се извършва чрез логическо добавяне на байта от 0x04. След като изчистите E. По този начин можете да изпратите команда на дисплея, без да предавате самата команда като аргумент. void init(void) (_delay_ms(30); // Пауза след сервиране на храна com(0x30); // Преход към 4-битов режим _закъснение_ни(40); // Изрязване до команда Vikonannya com(0x30); // Преход към 4-битов режим _закъснение_ни(40); // Изрязване до команда Vikonannya com(0x30); // Преход към 4-битов режим _закъснение_ни(40); // Изрязване до команда Vikonannya com(0x20); // Преход към 4-битов режим _закъснение_ни(40); // Изрязване до команда Vikonannya com(0x20); // Задаване на параметри com(0x80); // Задаване на параметри com(0x00); // Vimicable дисплей com(0x80); // Vimicable дисплей com(0x00); // Изчистване на дисплея com(0x10); // Изчистване на дисплея com(0x00); // Задайте режима за въвеждане на данни com(0x60); // Задайте режима за въвеждане на данни com(0x00); // Включете дисплея с избрания курсор com(0xC0); // Включете дисплея с избрания курсор } Тази функция не прави нищо повече от инициализиране на дисплея. Последователността от команди се взема от листа с данни на RK дисплея. void char_out(BYTE данни) ( BYTE data_h = ((data & 0xF0) + 0x09); BYTE data_l = ((data // Прехвърляне на най-значимите 4 бита от data_h |= 0x04; pcf8574_byte_out(data_h, ADD)); // Прехвърлете най-високите 4 бита data_h &= 0xF9; pcf8574_byte_out(data_h, ADD); // Прехвърлете най-високите 4 бита pcf8574_byte_out(данни_l, ДОБАВЯНЕ); // Прехвърляне на по-младите 4 битаданни_l | = 0x04; pcf8574_byte_out(данни_l, ДОБАВЯНЕ); // Прехвърляне на по-младите 4 бита data_l &= 0xF9; pcf8574_byte_out(данни_l, ДОБАВЯНЕ); // Прехвърляне на по-младите 4 бита } Тази функция предава RC данни към дисплея. Получава се по същия начин като командите зад факта, че байтът се прехвърля първо с по-стария байт, а след това с по-младия. И reshta същото. void str_out(BYTE *str) ( while((*str) != "\0") ( char_out(*str); str++; ) )Е, тази функция е само за прехвърляне на реда към дисплея. Vlasne до нашите, тези, които няма да получат сто цента.

Проект за AtmelStudio 6.2

Грамотен 01.08.15 17:11

Кома пропусна. Точно така: "HELLO, SWIT!" Този аксесоар не е само за HD44780. Издърпващите резистори са поставени отстрани на мастера. Съгласно спецификацията, данните се записват от LCD контролера след спада на E. Първата функция ще бъде написана: void com (BYTE com) (com | = 0x08; // превключване на pcf8574_byte_out (com | 0x04, ADD); // Показани данни pcf8574_byte_out , ADD);// E до нула) Същото може да се направи по-малко. Например void char_out(BYTE данни) ще изисква само две кликвания и особено без допълнителни промени. Инициализирането на LCD е деактивирано поради нарушени спецификации за времето.

Алексий 02.08.15 19:11

Поради липсата на кома, дисплеят не се влияе. Това устройство се намира под дисплея със същия или подобен контролер. А самата ос на микросхемата е наистина просто разширение на порта. Добре, достатъчно съм добър. Необходими са допълнителни промени. Ако подадете аргумент към функция, използвайки логика, може да се появят проблеми. Бил съм заседнал така. Инициализирането завършва без прекъсване на времената. В документацията се казва, че между командите се поставя пауза от 40 µs. Тъй като предаването се извършва по i2c шината и това е програмирано по свой начин, тогава трябва да се притеснявате твърде много. Ако все още не сте мързеливи, напишете вашата версия и ми я изпратете. Ще го публикувам. Zreshtoyu този сайт за срещи за любителска публика и скин, който пожелаете, може да изрази своите мисли и идеи за живота на МК.

Алексий 06.08.15 09:14

Добавяне на времена при инициализиране на дисплея в съответствие с „Компетентен“

Дмитро 14.06.16 21:57

Добър ден Алексий. Можете да добавите библиотека за роботи с PCF8574 към генератора на кодове.

Алексий 14.06.16 22:32

Аз ще помисля.))

руслан 21.12.16 19:54
Алексий 21.12.16 21:53

О, така. Особено кода в ASMI. Инженерите на Arduin ще го оценят отново)))

НАСТОЛЕН КОМПЮТЪР.
Е, не се изненадвайте на ASM, програмата там е написана за PIC контролера. Дали тази информация е „още по-полезна“ за AVR специалистите? особено за начинаещи))) Нямам нищо против PIC, но истината е, че PIC и AVR са различни. И от устройството има подробности за работата на RC дисплея, можете да погледнете))) Вярно, аз също написах под CVAVR и всички команди за сортиране и сортиране в рафтове. Ако случайно имате спешен случай, трябва да видите сами какво е написано толкова ясно))) Авторът пише, читателят събира.

GeK 01/04/17 12:52

"I2C адреси на микросхеми (по подразбиране е 0x4E")

Най-високите 4 бита на адреса са фиксирани,
префиксът на PCF8574 е 0100, а PCF8574A е 0111
По-младите 3 бита лежат на входовете на микросхемите A2-A0. След свързване всичките 3 джъмпера са отворени, което показва адреса на микросхемата, показва се стойността 0111111.
// A2 A1 A0 PCF8574 PCF8574A
// 1 1 1 0x20 0x38
// 1 1 0 0x21 0x39
// 1 0 1 0x22 0x3A
// 1 0 0 0x23 0x3B
// 0 1 1 0x24 0x3C
// 0 1 0 0x25 0x3D
// 0 0 1 0x26 0x3E
// 0 0 0 0x27 0x3F

Алексий 01/04/17 14:27

Изглежда, че сте се объркали.
Vityag с документация за микросхемата

0b01001110 ce 0x4E
Така че тук всичко е правилно. И ако трябва да промените адреса, тогава просто трябва да го промените в Дефиниране.

Юрий 14.12.17 21:26

Приятен ден! А можеш ли да намериш и кода на функциите lcdgotoxy и lcdclear за работа с адаптер за PCF8574.

Александър 20.05.18 18:14

Приятен ден! Как извеждате руски текст?

Алексий 20.05.18 23:04

Това е чисто нов дисплей, произведен от MELT. В паметта му е запечатана кирилицата.

Александър 21.05.18 04:55

Приятен ден! Пиша, че имате проект за AtmelStudio 6.2 “ЁPҐBET MҐP!” тогава е нормално да се види
и ако напишете "HELLO SWIT!" вадят всякакви глупости. имам две
Вариантите на дисплеи в едно се изписват на кирилица. друг китаец.

Алексий 21.05.18 09:22

Предпочитам да напиша тестова програма. Преминава през цялата памет с показани символи и техния адрес. И тогава ще разберем какъв е проблемът. Най-важното е, че символната таблица не съвпада с ascii таблицата.

Андрий 03.09.18 08:32

Добър ден!

Можете ли да ми изпратите електрическа схема за Proteus?

Андрий 03.09.18 10:22

Проверявал ли си някой в ​​Proteuse?

Андрий 03.09.18 10:56

Rozíbravsya main_init

Павло 30.05.19 23:35

Tsikava rich, адресите на дисплея са 0x4E, а ако свържете същия дисплей към Arduino, тогава адресите са 0x27

Павло 31.05.19 11:04

Благодаря ви за труда! Очаква се прекъсване на целия интернет от целеви приложения, с изключение на вашите, без да печелите пари. Едно нещо, в архивираната функция на проекта за инициализация на дисплея, забавянето _delay_ не е регистрирано и следователно не работи

Алексий 06/01/19 09:52

Е, това е по-скоро демонстрационен проект. Добре е, че библиотеката на axlib трябва да бъде пренаписана, но като се има предвид, че STM32 и STM8 се сриват с големи скокове, смисълът от AVR вече не е във въздуха.

Павло 06/05/19 12:57

STM не изисква DIP пакети, което улеснява използването на други платки. За моите проекти AVR е изчерпан; един Atmega 8 може да побере много

Алексий 06/05/19 15:20

И така, колко струва Atmega8 и stm8s003)))

Дмитро 07.06.19 00:41

Здравей, Алексия.
Кажете ми, любезно, как е необходимо да се чете от pcf8574 към порта?
Искам да създам външен блок, 8 GPIO през i2c шината - това е.

Дмитро 06/07/19 17:56

Сигурен съм в себе си
Функцията завърта байта - порт порта на микросхемата
uint8_t pcf8574_byte_rcv(uint8_t адрес)
{
uint8_t ask = ACK;
адрес | = 0b01; //ПРОЧЕТИ
uint8_t данни=0;
i2c_start();
ask = i2c_send_byte(addr);
if(!ask) data = i2c_read_byte(NACK);
i2c_stop();

Връщане на данни;
}

Павло 06/07/19 20:37

Колко струва, 150 рубли, за цената на пръчка) и как плащате за STM? LUT е ненадежден, CNC фрезата не работи, какво мога да взема (без да пробвам)

  • Модулът FC-113 е изграден върху микросхемата PCF8574T, която има 8-битов споделен регистър, който „разширява“ входовете и изходите за серийната шина I2C. Малката микросхема е обозначена с DD1.
  • R1 – регулиращ резистор за настройка на контраста на RC на дисплея.
  • Джъмпер J1 се използва за увеличаване на подсветката на дисплея.
  • Изводи 1…16 служат за свързване на модула към изводите на LCD дисплея.
  • Контактните пластини A1…A3 ще трябва да променят I2C адреса. Чрез запояване на кабелните джъмпери можете да промените адреса на устройството. Таблицата показва вида на адреса и джъмпера: “0” показва отворен конектор, “1” показва монтиран джъмпер. Зад връзките има 3 изключени джъмпера и прикачени адреси 0x27.

2 Схема за свързване на RC дисплей към Arduinoзад I2C протокола

Свързването на модула Arduino се извършва стандартно за I2C шината: връзките на SDA модула са свързани към аналоговия порт A4, SCL връзките са свързани към аналоговия порт A5 на Arduino. Модулът се захранва с напрежение +5 V от Arduino. Самият модул се свързва чрез връзки 1…16 със съответните връзки 1…16 на PK дисплея.


3 Библиотека за роботизад I2C протокола

Сега имаме нужда от библиотека за работа с LCD зад интерфейса I2C. Можете да ускорите, например, cym оста (вижте реда „Изтегляне на примерен код и библиотека“).

Завантажения архив LiquidCrystal_I2Cv1-1.rarразархивиран в папка \библиотеки\който се намира в директорията на Arduino IDE.

Библиотеката поддържа набор от стандартни функции за LCD екрани:

функцияВъзлагане
Течен кристал() създава промяна на типа LiquidCrystal и получава параметрите за свързване на дисплея (номера на части);
започвам () Инициализация на LCD дисплея, настройка на параметри (брой редове и символи);
ясно() изчистване на екрана и завъртане на курсора в позиция на кочана;
У дома() завъртете курсора до позицията на кочана;
setCursor() поставяне на курсора на дадена позиция;
пиши() показване на символа на екрана RK;
печат () показване на текст на екрана RK;
курсор () показва курсора, след това. креслото под мястото на напредващия символ;
noCursor() къде е курсорът;
мига () момент за курсора;
noBlink() моментен момент;
noDisplay() Изключете дисплея и запазете цялата информация, която се показва;
дисплей () включване на дисплея и запазване на цялата информация, която се показва;
scrollDisplayLeft() превъртете дисплея 1 позиция наляво;
scrollDisplayRight() Превъртане вместо дисплея с 1 позиция отдясно;
автоматично превъртане () включване на автоматичното превъртане;
noAutoscroll() автоматично превъртане vimicanny;
Отляво надясно() задава текста директно вдясно;
от дясно на ляво() посока на текста отдясно наляво;
createChar() Създавам символа koristuvach за LCD екрана.

4 Скица за показване на тексткъм LCD екран чрез I2C шина

Да видим табелата: Разкачен файл LiquidCrystal_I2C CustomCharsИ малко от него може да се смачка. Наясно сме, че накрая ще има мимолетен символ. Коментарите преди кода коментират всички нюанси на скицата.

#включи // Включете Wire библиотеката #include // Включва библиотеката RK#define printByte(args) write(args); // uint8_t сърце = (0x0,0xa,0x1f,0x1f,0xe,0x4,0x0); // битова маска за символа "сърце" LiquidCrystal_I2C lcd(0x27, 16, 2); // Задаване на адрес 0x27 за 16x2 LCD дисплей void setup() ( lcd.init(); // Инициализация на дисплея RC lcd.backlight(); // Повишено осветление на дисплея lcd.createChar(3, heart); // Създайте символа „сърце“ в 3-тата среда на паметта lcd.home(); // поставете курсора в горния ляв ъгъл, на позиция (0,0) lcd.!"); // друг ред текст lcd.setCursor(0, 1); // преместете курсора на ред 2, знак 1 lcd.print( "i"); // още една бележка за ред 2 lcd.printByte(3); } void loop() (// задаване на оставащия символ lcd.setCursor(13, 1); // Преместете курсора на ред 2, символ 1 lcd.print("\t"); забавяне (500); lcd.setCursor(13, 1); // Преместете курсора на ред 2, символ 1 lcd.print(" "); забавяне (500); }

Преди реч, символи, написани по команда lcd.createChar();, ще бъде лишен от паметта на дисплея след загубата на живот, т.к се запише в ROM 1602 на дисплея.

5 Създаване на властови символиза RC дисплей

По-късно в доклада ще разгледаме хранителното създаване на символи за мощност за RK екрани. Символът на кожата на екрана се състои от 35 точки: 5 пълнителя и 7 къдрици (+1 резервен ред за опора). На ред 6 от скицата, която създадохме, е даден масив от 7 числа: (0x0, 0xa, 0x1f, 0x1f, 0xe, 0x4, 0x0). Конвертируеми 16-цифрени числа в двоична система: {00000, 01010, 11111, 11111, 01110, 00100, 00000} . Тези числа не са нищо повече от биологични маски за кожата със 7 реда символи, където "0" показва светла точка, а "1" показва тъмна точка. Например, символът на сърцето, задачи под формата на маска на прилеп, ще се появи на екрана, както е показано на бебето.

6 Управление на екрана RKчрез I2C шина

Страхотна скица за Arduino. Задачите ще се появят на екрана с мигащ курсор в края.


7 За какво е там? I2C шина

Като бонус, нека да разгледаме времевата диаграма на дисплея на латинските символи "A", "B" и "C" на RK дисплея. Тези символи са в дисплея на ROM и се показват на екрана просто чрез предаване на техните адреси на дисплея. Диаграмата е взета от нивата на дисплея RS, RW, E, D4, D5, D6 и D7 и т.н. Вече след редизайн FC-113 "I2C паралелна шина". Може да се каже, че изхвърляме малките парченца „дълбоко“ в „зализото“.


Времева диаграма на дисплея на латински букви "A", "B" и "C" на LCD дисплей 1602

Диаграмата показва, че символите, които са в ROM на дисплея (страна 11 на листа с данни, показана по-долу), се предават в два байта, първият от които показва номера на колоната на таблицата, а другият номера на реда. В този момент данните „щракат“ по предната част на сигнала на линията д(Активиране) и ред Р.С.(Избор на регистър) е в логическата единица, което означава прехвърляне на данни. Ниската стъпка на линията RS означава прехвърляне на вложките, които измиваме преди прехвърлянето на символа на кожата. Този входен код предава кода на инструкцията за завъртане на каретката до позиция (0, 0) на дисплея PK, което може да се разбере и чрез четене на техническото описание на дисплея.

И още един задник. Тази почасова диаграма показва показването на символа „Сърце“ на PK дисплея.


Пак казвам, първите два импулса АктивирайтеСледвайте инструкциите У дома()(0000 0010 2) - завъртане на каретката до позиция (0; 0), а другите две - показване на цифровия дисплей, който се съхранява в паметта 3 10 (0000 0011 2) символ “Сърце” (инструкции lcd.createChar(3, сърце);скица).

Вероятно един от най-популярните екрани на пазара. Избор на популярния контролер HD44780U. Името на модела показва, че екранът се състои от два реда по 16 знака всеки. Този конкретен модел няма влияние от руския език.

Шината за данни sh2s ви позволява да свържете до 127 устройства по два начина и по едно и също време. Тези I2C реализации са базирани на PCF8574T чипове.

Схема на свързване:

Синьото нещо е променлива опора, която ви позволява да регулирате контраста на екрана.

Evil jumper – показва подсветката на екрана.

Блок с 4 контакта е свързан към arduino по следния начин:

GND - GND
VCC - 5V
SDA - A4 (като Arduino MEGA, след това до D20)
SCL - A5 (кутия Arduino MEGA, след това до D21)

Библиотека

Скица

Дисплеят може да има различен IIC адрес, вместо 0x27 може да се появи 0x3F. За да определите точно адреса, можете бързо да сканирате i2c устройствата със скенер.

#включи #включи // задайте адреса на LCD екрана на 0x27, 16 знака, 2 реда LiquidCrystal_I2C lcd(0x27, 16, 2); void setup()(lcd.init(); //Инициализира екрана //включете подсветката lcd.backlight(); //Задайте позицията, където ще се показва текстът. lcd.setCursor(2, 0); // показване на ред 1 lcd.print("Здравей, свят!"); //друг ред се показва по същия начин lcd.setCursor(1, 1); lcd.print("www.сайт"); ) празен цикъл () ( )

Доставчик