Arduino-да 1602 графикалық дисплеймен жұмыс істеу. Winstar ұсынған LCD WH1602B. I2C шинасы арқылы СКД экранды басқару

Келген болатын Arduino Nano, нан тақтасы мен СКД дисплейі бар жинақ келді. Тақтадағы дисплейде - 1602A, төменде - QAPASS деп жазылған. Мен бірінші құрылғыны мүсіндей бастадым, және, әрине, дисплейде ақпаратты жарық диодты шамдарды жыпылықтатпай, көрсетуді қаладым.

Google көмектесті, бұл кейіпкерлердің дисплейі екенін айтты; Егер сіз оны бұрмаламасаңыз, ASCII таңбалары болуы мүмкін - сандар, латын, кейбір негізгі таңбалар.

Төмендегі материалдар дисплейді іске қосуға көмектесті: ДК принтер портынан таңбалы СКД дискіні жүргізу; Arduino-ны СКД символымен қалай қосуға болады; Pwm Servo Driver Motor Control PDF.

Дисплей өте кең таралған және ол үшін қалқандар ойлап табылған - SPI сияқты және/немесе I2C опциялары бар және Интернет бұл жағдайларға арналған рецепттерге толы. Бірақ менде тек 16x2 түпнұсқа дисплей және оны тіркегім келген Arduino болды.

Дисплейде әрқайсысы 4 биттен тұратын жұмыс және деректерді беру режимі бар, ал шинаның төменгі ретті биттері пайдаланылмайды. Деректер шинасының тек жартысын қосу көптеген жерлерде сипатталған, мен дисплейді қалай қосу керектігін және онымен 8 жолдан астам жұмыс істеуді түсінбедім. Мен оның қалай жұмыс істейтініне өте қуаныштымын.

Дисплейлердің жақсы сипаттамасы осы түрдегіМен оны мына жерден таптым - http://greathard.ucoz.com/44780_rus.pdf. Және мұнда (http://arduino.ru/forum/programmirovanie/lcd-i2c-partizanit#comment-40748) таңба генераторын көрсетудің мысалы берілген.

Байланыс

Менің дисплей дәнекерленбеген контактілермен бірге келді. Мен басынан кабельді дәнекерлеп, 16 сымды дупонмен кесіп тастап, оларды тазаладым. Содан кейін мен китті қазып, тақтаға дәнекерлеуге арналған DuPont тарағын таптым. Сол жерден мен 16 контактіні үзіп, дәнекерледім.
Менің дисплейім келесідей болды (контактілерді дәнекерлеуден бұрын):

Алдымен мен 15 (A) істікшесін +5 В, 16 (K) жерге қостым және артқы жарық жұмыс істейтініне көз жеткіздім. Жалпы алғанда, катодты жерге 220 Ом резистор арқылы қосу дұрыс, содан кейін мен солай істедім.

Содан кейін жерге (1) және қуатты (2) қостым. Arduino-ны USB-ден, тұрақтандырылған 5 В кернеуінен және тұрақсыз 6-12 В кернеуінен қуат алуға болады, ең жоғары кернеу автоматты түрде таңдалады. Енді Arduino USB-ден қуат алады, мен 5 вольтты қайдан алуға болатынын ойладым. 5В сыртқы тұрақтандырылған 5В қосылған Arduino түйреуішінде екені белгілі болды. Дәлірек айтқанда, ол 4,7 В болды, бірақ бұл мен үшін жеткілікті болды.

Қуатты қосқаннан кейін, егер бәрі жақсы болса, онда үстіңгі қатар танысудың тұтас тіктөртбұрыштарымен жанады.

Содан кейін біз контрастты потенциометрді қосамыз (3 V0 түйреуіш). Біз потенциометрдің экстремалды терминалдарының бірін жерге, екіншісін +5 В-қа, ортасын дисплейдің 3 түйреуішіне лақтырамыз. 10K потенциометр ұсынылады. Менде киттен 50K болды, мен оны бірінші қолдандым. Реттеу тек бір шетінде болды, қажетті контрастты өте нәзік ұстау керек болды. Содан кейін мен басқа китте 5К-де ұқсасты тауып, оны орнаттым. Параметр бір шетінен жарты айналымға дейін созылды. Шамасы, сіз одан да кішірек потенциометрді ала аласыз. Схема аз тұтынатын етіп 10K ұсынылуы мүмкін. Иә, маған аздап дәнекерлеу керек болды, мен потенциометрлердің терминалдарына дупондары бар сымдарды дәнекерледім.

Тест эскизі

Біз Arduino Studio мысалдарынан сынақ эскизін аламыз - "C:\Program Files (x86)\Arduino\libraries\LiquidCrystal\ex amples\HelloWorld\HelloWorld.ino", жай ғана контактілерді біздікіне өзгерту керек - LiquidCrystal lcd( 7, 6, 5 , 4, 3, 2);

Негізінде, бұл эскизде нені қайда қосу керектігі туралы сипаттама да бар. Сіз оны сол жерде көрсетілгендей қосуға болады, содан кейін ештеңені өзгертудің қажеті жоқ.

// кітапхана кодын қосыңыз: #include // LiquidCrystal lcd(7, 6, 5, 4, 3, 2) интерфейс түйреуіштерінің нөмірлерімен кітапхананы инициализациялау; void setup() ( // СКД бағандар мен жолдар санын орнату: lcd.begin(16, 2); // СКД-ге хабарды басып шығару. lcd.print("сәлем, әлем!"); ) void loop() ( // курсорды 0-бағанға, 1-жолға орнатыңыз // (ескерту: 1-жол - екінші жол, өйткені санау 0-ден басталады): lcd.setCursor(0, 1); // санын басып шығару Қалпына келтіруден кейінгі секундтар: lcd.print(millis() / 1000); )

Мынадай нәрсе шығады:

Айтпақшы, менің қолыма түскен дисплей артқы жарықсыз жұмыс істемейді. Айтайын дегенім, ол жұмыс істейді, бірақ сіз ештеңені көре алмайсыз.

1602A Контактілерді көрсету

# контакт Аты Қалай қосылуға болады
1 VSS GND
2 VDD +5 В
3 V0 Контраст - потенциометрдің ортаңғы терминалына
4 RS (тіркеу таңдау) D7 Arduino
5 R/W (оқу немесе жазу) GND
6 E (қосу сигналы) D6 Arduino
7-14 D0-D7 D0-D3 - қосылмаған; D4-D7 - Arduino D5-D2 түйреуіштеріне қосылған
15 А Артқы жарық аноды, +5 В қосылған
16 Қ Артқы жарық катоды, 220 Ом резистор арқылы жерге қосылған

Мақалада СКД-ді Arduino-ға қалай дұрыс қосу керектігі туралы айтылады, LCD 1602 және LCD i2c қосу туралы білу қажет барлық нәрсе қамтылған.

HD44780 контроллерінің негізінде жасалған 1602 өлшемді СКД дисплейлері бүгінгі күні кез келген электронды құрылғыларды жасау үшін ең қолжетімді, қарапайым және сұранысқа ие болып қала береді.

Оларды тізеде жиналған қарапайым қондырғыларда да, өнеркәсіптік, мысалы, кофе машиналарында да көруге болатыны таңқаларлық емес. Дәл осы дисплеймен Arduino-ға қатысты ең танымал модульдер мен экрандар жиналады, мысалы, LCD I2C модулі және LCD пернетақта қалқаны.

Келесі қадамдарда біз сізге СКД-ды Arduino-ға қалай қосуға және дисплейде қажетті ақпаратты көрсетуге болатынын суреттермен егжей-тегжейлі айтып береміз.

2-қадам. Arduino үшін LCD 1602

1602 дисплейлері екі түрлі дизайнда келеді:

  • қара әріптері бар сары артқы жарық
  • немесе (бұл жиірек болады) ақ түспен көк артқы жарық.

HD44780 контроллеріндегі дисплейлердің өлшемі айтарлықтай өзгереді, бірақ олар бірдей басқарылады. Ең көп тараған өлшемдер 16-дан 02-ге дейін (яғни, екі жолдағы 16 таңба) немесе 20-дан 04-ке дейін. Таңбалардың өздерінің ажыратымдылығы 5-тен 8-ге дейін.

Көптеген дисплейлер кириллицаға қолдау көрсетпейді (CTK белгісі бар дисплейлерді қоспағанда). Бірақ бұл мәселе ішінара шешіледі және мақалада мұны қалай жасау керектігі егжей-тегжейлі сипатталған.

Дисплейде қосылу үшін 16-PIN қосқышы бар. Тақтаның артқы жағында түйреуіштер белгіленген, ол келесідей:

  • 1 (VSS) – контроллерге арналған теріс қуат көзі.
  • 2 (VDD) – контроллер үшін оң қуат көзі.
  • 3 (VO) – контрастты басқару параметрлері.
  • 4 (RS) – таңдауды тіркеу.
  • 5 (R/W) – оқу және жазу, атап айтқанда, жерге қосылған кезде жазу.
  • 6 (E) – іске қосу (қосу).
  • 7–10 (DB0-DB3) – сегіз разрядты интерфейстің төменгі ретті биттері.
  • 11–14 (DB4-DB7) – интерфейстің ең маңызды биттері
  • 15 (A) – артқы жарықты қоректендіруге арналған оң анод.
  • 16 (K) – артқы жарықты қоректендіруге арналған теріс катод.

3-қадам. СКД дисплейді қосыңыз

Дисплейді қосып, оған ақпаратты бермес бұрын оның функционалдығын тексерген жөн. Алдымен VSS және VDD контроллеріне кернеуді қолданыңыз, артқы жарықты қосыңыз (A, K), содан кейін контрастты реттеңіз.

Мұндай параметрлер үшін 10 кОм потенциометр қолайлы, оның пішіні маңызды емес. Сыртқы аяқтарға +5V және GND беріледі, ал орталықтағы аяқ VO істікшесіне қосылған.

Тізбекке қуат берілгенде, қажетті контрастқа қол жеткізу керек, егер ол дұрыс реттелмесе, экрандағы кескін көрінбейді. Контрастты реттеу үшін потенциометрмен «ойнау» керек. Схема дұрыс жиналғанда және контраст дұрыс реттелсе, экрандағы жоғарғы сызық тіктөртбұрыштармен толтырылуы керек.

Дисплей жұмыс істеуі үшін Arduino IDE ортасына орнатылған арнайы кітапхана LiquidCrystal.h пайдаланылады, мен ол туралы төменде жазамын. Ол 8 биттік және 4 биттік режимде жұмыс істей алады. Бірінші нұсқада ең аз маңызды және маңызды биттер ғана пайдаланылады ( BB0-DB7), екіншісінде – тек кішілері ( BB4-DB7).

Бірақ бұл дисплейде 8-биттік режимді пайдалану дұрыс емес шешім; жылдамдықтың артықшылығы дерлік жоқ, өйткені оның жаңарту жылдамдығы әрқашан секундына 10 реттен аз. Мәтінді көрсету үшін DB7, DB6, DB5, DB4, E және RS түйреуіштерін контроллер түйреуіштеріне жалғау керек. Оларды кез келген Arduino түйреуіштеріне қосуға болады, ең бастысы кодта дұрыс реттілік орнату.

Қажетті таңба контроллердің жадында әлі жоқ болса, оны қолмен анықтауға болады (барлығы жеті таңбаға дейін). Қарастырылып отырған дисплейлердегі ұяшық бес-сегіз пиксельге кеңейтілген. Символ жасау міндеті - аздап бүркеніш жазу және нүктелер жану керек жерлерге нүктелерді қою, ал нөлдерді қосу керек емес жерлерге қою. Жоғарыда қарастырылған қосылым диаграммасы әрқашан жақсы бола бермейді, өйткені Arduino-да кемінде алты сандық шығыс пайдаланылады.

Қадам 4. Айналып өту схемасы

Осыны айналып өтіп, екеуін ғана жеңудің бір нұсқасын қарастырайық. Бізге СКД үшін IIC/I2C үшін қосымша түрлендіргіш модулі қажет. Оның дисплейге қалай дәнекерленгенін және Arduino-ға қалай қосылғанын төмендегі суреттерден көруге болады.

Бірақ бұл қосылым опциясы тек LiquidCrystal_I2C1602V1 арнайы кітапханасымен жұмыс істейді, бірақ оны Интернеттен табуға және орнатуға оңай, содан кейін оны еш қиындықсыз пайдалануға болады.

4-қадам: LiquidCrystal.h кітапханасы

LiquidCrystal.h кітапханасын осы беттегі веб-сайтымыздың Кітапханалар бөлімінен немесе arduino.cc ресми ресурсынан жүктеп алуға болады. Бірақ төмендегі сілтемелерден жүктеп алуға болады:

5-қадам. Эскиз (бағдарлама коды)

Мұрағатты жүктеп алғаннан кейін, Arduino орнату каталогының кітапханалар қалтасындағы LiquidCrystal қалтасын ауыстырыңыз.

Үлгі эскизді мына жерден көре аласыз:

Файл -> Мысалдар -> LiquidCrystal -> HelloWorld_SPI

Немесе, егер сізде ағылшын тіліндегі мәзір болса:

Файл -> Мысалдар -> LiquidCrystal -> HelloWorld_SPI

Осымен келесі сабағымыз аяқталады. Сапалы жобалар тілейміз!

СКД дисплей– Arduino жобаларында жиі қонақ. Бірақ күрделі схемаларда бізде көптеген түйреуіштері бар қалқанды қосу қажеттілігіне байланысты Arduino порттарының жетіспеушілігі мәселесі туындауы мүмкін. Бұл жағдайда шешім болуы мүмкін I2C/IICстандартты дерлік Arduino 1602 қалқанын Uno, Nano немесе Mega тақталарына тек 4 түйреуіш арқылы қосатын адаптер. Бұл мақалада біз СКД экранын I2C интерфейсімен қалай қосуға болатынын, қандай кітапханаларды пайдалануға болатынын, қысқа мысал эскизін жазуды және жиі кездесетін қателерді қарастырамыз.

Сұйық кристалды дисплей LCD 1602болып табылады жақсы таңдауәртүрлі жобаларда таңбалар жолдарын шығару үшін. Бұл арзан, әр түрлі жарықтандыру түстері бар әртүрлі модификациялар бар, Arduino эскиздері үшін дайын кітапханаларды оңай жүктеп алуға болады. Бірақ бұл экранның негізгі кемшілігі дисплейде 16 сандық түйреуіштердің болуы, оның ішінде кемінде 6 қажет.Сондықтан, i2c жоқ бұл СКД экранды пайдалану Arduino Uno немесе Nano тақталары үшін елеулі шектеулер қосады. Егер контактілер жеткіліксіз болса, Arduino Mega тақтасын сатып алуға немесе контактілерді сақтауға, соның ішінде дисплейді i2c арқылы қосуға тура келеді.

СКД 1602 түйреуіштерінің қысқаша сипаттамасы

LCD1602 түйреуіштерін толығырақ қарастырайық:

Әрбір түйреуіштің өз мақсаты бар:

  1. Ground GND;
  2. Қуат көзі 5 В;
  3. Монитордың контрастын орнату;
  4. Команда, деректер;
  5. Мәліметтерді жазу және оқу;
  6. Қосу;

7-14. Деректер желілері;

  1. Қосымша артқы жарық;
  2. Минус артқы жарық.

Дисплей сипаттамалары:

  • Таңбаларды көрсету түрі, символдарды жүктеуге болады;
  • жарықдиодты шамдар;
  • контроллер HD44780;
  • Қоректендіру кернеуі 5В;
  • 16x2 таңба пішімі;
  • Жұмыс температурасының диапазоны -20С-тан +70С-қа дейін, сақтау температурасының диапазоны -30С-тан +80С-қа дейін;
  • Көру бұрышы 180 градус.

i2C жоқ СКД-ның Arduino тақтасына қосылу диаграммасы

Мониторды I2Cсіз Arduino микроконтроллеріне тікелей қосудың стандартты диаграммасы келесідей.

Қосылған контактілердің көптігіне байланысты қажетті элементтерді қосу үшін орын жеткіліксіз болуы мүмкін. I2C пайдалану сымдар санын 4-ке дейін және бос түйреуіштерді 2-ге дейін азайтады.

Arduino үшін СКД экрандар мен қалқандарды қайдан сатып алуға болады

СКД экраны 1602 (және 2004 нұсқасы) өте танымал, сондықтан оны отандық интернет-дүкендерде де, шетелдік сайттардан да оңай табуға болады. Мұнда ең қолжетімді опцияларға сілтемелер берілген:

LCD1602+I2C көк экран модулі, Arduino үйлесімді Қарапайым LCD1602 дисплейі (жасыл артқы жарық) 80 рубльден арзан Arduino үшін I2C HD44780 бар үлкен LCD2004 экраны (көк және жасыл артқы жарық)
IIC адаптері және көк артқы жарығы бар 1602 дисплейі Дәнекерленген I2C модулі бар LCD1602 басқа нұсқасы 1602 қалқанға арналған порт IIC/I2C/TWI/SPI адаптер модулі, Arduino-мен үйлесімді
RGB артқы жарықтандырылған дисплей! LCD 16×2 + пернетақта + Arduino үшін дыбыстық экран Түймелері мен LCD1602 LCD 1602 экраны бар Arduino үшін қалқан 3D принтеріне арналған СКД дисплей (RAMPS 1.4 үшін Smart Controller, Text LCD 20×4), SD және MicroSD картасын оқу модулі

I2C протоколының сипаттамасы

Дисплейді Arduino-ға i2c адаптері арқылы қосуды талқыламас бұрын, i2C протоколының өзі туралы қысқаша сөйлесейік.

I2C/IIC(Inter-Integrated Circuit) - бастапқыда байланыс үшін жасалған протокол интегралдық схемаларішінде электрондық құрылғы. Әзірлеу Philips компаниясына тиесілі. i2c протоколы басқару электроникасындағы блоктарды байланыстыру үшін қажет 8 биттік шинаны және адрестеу жүйесін пайдалануға негізделген, соның арқасында бірнеше құрылғылармен бір сымдар арқылы байланысуға болады. Біз деректер пакеттеріне қажетті элементтің идентификаторын қоса отырып, деректерді бір немесе басқа құрылғыға тасымалдаймыз.

Ең қарапайым тізбек I2C құрамында бір негізгі құрылғы (көбінесе Arduino микроконтроллері) және бірнеше қосалқы (мысалы, СКД дисплей) болуы мүмкін. Әрбір құрылғының 7-ден 127-ге дейінгі диапазондағы мекенжайы бар. Бір тізбекте мекенжайы бірдей екі құрылғы болмауы керек.

Arduino тақтасы аппараттық құралда i2c қолдайды. Осы протоколды пайдаланып құрылғыларды қосу үшін A4 және A5 түйреуіштерін пайдалануға болады.

I2C жұмысының бірнеше артықшылықтары бар:

  • Жұмыс істеу үшін тек 2 жол қажет - SDA (деректер желісі) және SCL (синхрондау желісі).
  • Көптеген жетекші құрылғыларды қосу.
  • Даму уақыты қысқарды.
  • Құрылғылардың барлық жиынтығын басқару үшін тек бір микроконтроллер қажет.
  • Бір шинаға қосылған микросұлбалардың мүмкін саны тек максималды сыйымдылықпен шектеледі.
  • Схемаларға орнатылған кернеуді басатын арнайы сүзгінің арқасында деректер қауіпсіздігінің жоғары дәрежесі.
  • Пайда болған ақауларды диагностикалаудың және ақауларды тез жоюдың қарапайым процедурасы.
  • Автобус Arduino-ның өзінде біріктірілген, сондықтан қосымша автобус интерфейсін әзірлеудің қажеті жоқ.

Кемшіліктері:

  • Желіде сыйымдылық шегі бар - 400 пФ.
  • Автобуста бірнеше түрлі құрылғылар болса, I2C контроллерін бағдарламалау қиын.
  • Құрылғылардың көп санымен, егер олардың біреуі қате төмендесе, ақаулықты оқшаулау қиынға соғады.

LCD 1602 Arduino үшін i2c модулі

Arduino-да i2c дисплейін пайдаланудың ең жылдам және ыңғайлы жолы - кірістірілген протоколды қолдауы бар дайын экранды сатып алу. Бірақ мұндай экрандар өте көп емес және олар арзан емес. Бірақ әртүрлі стандартты экрандардың үлкен саны қазірдің өзінде шығарылды. Сондықтан бүгінгі таңда ең қолжетімді және танымал нұсқа - бұл жеке I2C модулін - адаптерді сатып алу және пайдалану, ол келесідей:

Модульдің бір жағында біз i2c түйреуіштерін көреміз - жер, қуат және деректерді беру үшін 2. Басқа адаптерде біз сыртқы қуат қосқыштарын көреміз. Және, әрине, тақтада модуль стандартты экран түйреуіштеріне дәнекерленген көптеген түйреуіштер бар.


i2c шығыстары Arduino тақтасына қосылу үшін пайдаланылады. Қажет болса, артқы жарықтандыру үшін сыртқы қуатты қосамыз. Кірістірілген қайшы арқылы біз таңдамалы контраст мәндерін J орната аламыз

Нарықта сіз дәнекерленген адаптерлері бар LCD 1602 модульдерін таба аласыз, оларды пайдалану мүмкіндігінше жеңілдетілген. Егер сіз бөлек адаптерді сатып алсаңыз, алдымен оны модульге дәнекерлеуіңіз керек.

LCD экранды I2C арқылы Arduino-ға қосу

Қосылу үшін сізге Arduino тақтасының өзі, дисплей, нан тақтасы, жалғау сымдары және потенциометр қажет.

Арнайы бөлек i2c адаптерін пайдалансаңыз, алдымен оны экран модуліне дәнекерлеу керек. Онда қателесу қиын, сіз осы схеманы ұстануға болады.


i2c қолдауы бар СКД монитор тақтаға төрт сым арқылы қосылған - деректер үшін екі сым, қуат үшін екі сым.

  • GND түйреуіш тақтадағы GND-ге қосылады.
  • VCC істікшелі 5 В-та.
  • SCL A5 істікшесіне қосылады.
  • SDA A істікшесіне қосылған.

Және бәрі! Сым торлары жоқ, олар өте оңай шатасып кетеді. Сонымен қатар, біз i2C протоколын енгізудің барлық күрделілігін кітапханаларға сеніп тапсыра аламыз.

i2c СКД дисплейімен жұмыс істеуге арналған кітапханалар

Arduino және LCD 1602-мен I2C шинасы арқылы өзара әрекеттесу үшін сізге кемінде екі кітапхана қажет:

  • I2C-пен жұмыс істеуге арналған Wire.h кітапханасы стандартқа енгізілген Arduino бағдарламасы IDE.
  • LiquidCrystal_I2C.h кітапханасы, ол I2C шинасы арқылы мониторды басқаруға арналған көптеген пәрмендерді қамтиды және эскизді қарапайым және қысқа етіп жасауға мүмкіндік береді. Кітапхананы қосымша орнату керек Дисплейді қосқаннан кейін LiquidCrystal_I2C.h кітапханасын қосымша орнату керек.

Барлық қажетті кітапханаларды эскизге қосқаннан кейін біз объект жасаймыз және оның барлық функцияларын пайдалана аламыз. Тестілеу үшін келесі стандартты мысал эскизін жүктеп алайық.

#қосу #қосу // Соның ішінде кітапхана //#include // Балама кітапхананы қосу LiquidCrystal_I2C lcd(0x27,16,2); // I2C мекенжайын (ең таралған мән), сондай-ақ экран параметрлерін көрсетіңіз (LCD 1602 жағдайында - әрқайсысы 16 таңбадан тұратын 2 жол //LiquidCrystal_PCF8574 lcd(0x27); // PCF8574 кітапханасының жарамсыз орнату параметрі( ) ( lcd.init (); // Дисплейді инициализациялау lcd.backlight(); // Артқы жарықтандыруды қосу lcd.setCursor(0,0); // Курсорды бірінші жолдың басына орнату lcd.print(" Сәлем"); // Бірінші жолға мәтінді теру lcd.setCursor(0,1); // Курсорды екінші жолдың басына орнатыңыз lcd.print("ArduinoMaster"); // Екінші жолға мәтін теріңіз ) жарамсыз цикл() ( )

LiquidCrystal_I2C кітапханасының функциялары мен әдістерінің сипаттамасы:

  • home() және clear() - бірінші функция курсорды экранның басына қайтаруға мүмкіндік береді, екіншісі дәл солай жасайды, бірақ сонымен бірге мониторда бұрын болғанның бәрін жояды.
  • write(ch) – экранға бір ch таңбасын басып шығаруға мүмкіндік береді.
  • cursor() және noCursor() – экранда курсорды көрсетеді/жасырады.
  • blink() және noBlink() – курсор жыпылықтайды/жыпылықтамайды (оның дисплейі бұрын қосылған болса).
  • display() және noDisplay() – дисплейді қосуға/өшіруге мүмкіндік береді.
  • scrollDisplayLeft() және scrollDisplayRight() – экранды бір таңба солға/оңға айналдырады.
  • autoscroll() және noAutoscroll() – автоматты айналдыру режимін қосуға/өшіруге мүмкіндік береді. Бұл режимде әрбір жаңа символ экранда бұрын жазылғанды ​​ауыстыра отырып, бір орында жазылады.
  • leftToRight() және rightToLeft() – Көрсетілетін мәтіннің бағытын орнату – солдан оңға немесе оңнан солға.
  • createChar(ch, нүктелік сурет) – қара және ақ нүктелерді жасау үшін нүктелік кескіндердің жиымын пайдаланып, ch (0 – 7) коды бар таңбаны жасайды.

i2c дисплейімен жұмыс істеуге арналған балама кітапхана

Кейбір жағдайларда көрсетілген кітапхананы PCF8574 контроллерімен жабдықталған құрылғылармен пайдалану кезінде қателер болуы мүмкін. Бұл жағдайда балама ретінде LiquidCrystal_PCF8574.h кітапханасын ұсынуға болады. Ол LiquidCrystal_I2C кеңейтеді, сондықтан оны пайдалануда қиындықтар болмауы керек.

i2c lcd дисплейін қосу ақаулары

Егер эскизді жүктеп салғаннан кейін дисплейде ешбір хабарды көрмесеңіз, келесі қадамдарды орындап көріңіз.

Біріншіден, монитордың контрастын арттыруға немесе азайтуға болады. Көбінесе таңбалар контраст пен артқы жарық режиміне байланысты көрінбейді.

Егер бұл көмектеспесе, контактілердің дұрыс қосылғанын және артқы жарық қуатының қосылғанын тексеріңіз. Бөлек i2c адаптерін пайдаланған болсаңыз, контактілердің дәнекерлеу сапасын қайтадан тексеріңіз.

Экранда мәтіннің болмауының тағы бір жалпы себебі қате i2c мекенжайы болуы мүмкін. Алдымен эскиздегі құрылғы мекенжайын 0x27 0x20 немесе 0x3F етіп өзгертіп көріңіз. Әртүрлі өндірушілерде бағдарламаланған әртүрлі әдепкі мекенжайлар болуы мүмкін. Егер бұл көмектеспесе, барлық қосылған құрылғыларды сканерлеп, олардың мекенжайын қатаң күш қолдану арқылы анықтайтын i2c сканерінің эскизін іске қосуға болады. i2c сканерінің эскизінің мысалы.

Егер экран әлі жұмыс істемесе, адаптерді ажыратып, СКД-ды әдеттегідей қосып көріңіз.

Қорытынды

Бұл мақалада біз тақтадағы бос түйреуіштерді сақтау қажет болған кезде күрделі Arduino жобаларында СКД экранын пайдаланудың негізгі мәселелерін қарастырдық. Қарапайым және қымбат емес i2c адаптері тек 2 аналогтық түйреуіш алып, 1602 СКД экранын қосуға мүмкіндік береді. Көптеген жағдайларда бұл өте маңызды болуы мүмкін. Ыңғайлылық үшін баға қосымша модульді - түрлендіргіш пен кітапхананы пайдалану қажеттілігі болып табылады. Біздің ойымызша, бұл ыңғайлылық үшін төлейтін жоғары баға емес және біз бұл мүмкіндікті жобаларда пайдалануды ұсынамыз.

Көптеген электронды құрылғылардың құрамдас бөлігі қандай? Әрине, мәліметтерді индикациялау және графикалық шығару құралдары. «Ақылды қораптың» нәтижесін көзбен көруге болатын кезде бұл пайдаланушы үшін әрқашан ыңғайлы және жағымды. Сондықтан бүгін біз мәтін мен сандарды көрсету үшін дисплейді STM32-ге қосамыз. Біздің эксперименттеріміздің кейіпкері Winstar-тың танымал дисплейі болады. Айтпақшы, түсініктемелерде әдістеме негізінде барлық дисплейлер үшін бірдей екендігі туралы маңызды түсініктеме пайда болды. HD44780.Маңызды толықтыру үшін JekaKey-ге рахмет)

Біріншіден, дисплей контроллерге қосылуы керек. Деректер кестесін жүктеп алып, WH1602 түйреуіштерін іздеңіз. Мына жерден қараңыз:

Сіз білетіндей, дисплей WH1602 16 түйреуіш бар. Әрқайсысын бөлек қарастырайық...

Vss, Vdd және K түйреуіштерін жерге және қуатқа қосу керек, яғни кестеде көрсетілгендей, таңқаларлық және талқылауға ештеңе жоқ)

Контрастты реттеу үшін №3 түйреуіш қолданылады - егер біз ол жерде +5 В қолдансақ, біз мүлдем ештеңе көрмейміз, ал егер біз түйреуішті жерге тұйықтап алсақ, екі қатар қара төртбұрышты таң қалдырамыз 😉 Әрине, бұл бізге сәйкес келмейді. , сондықтан контрастты реттеу үшін ол жерге айнымалы кедергісі бар потенциометрді (резисторды) ілу керек. Таңбалардың ең жақсы көрінуі осы дисплей түйреуішіндегі 0,5-0,7 В кернеуімен қамтамасыз етіледі.

RS түйреуіші қазірдің өзінде микроконтроллер арқылы біз басқаратын түйреуіш болып табылады. Бұл түйреуіштегі төмен кернеу деңгейі (0) енді пәрмен орындалатынын білдіреді, жоғары деңгей (1) дисплей жадына жазылатын деректердің енді болатынын білдіреді.

PIN R/W - бұл жерде түсінікті, не деректерді оқимыз (мысалы, бос емес жалаушаны көрсету), бұл жағдайда бұл түйреуіште 1 бар немесе дисплейге команда/деректерді жазамыз, сонда бізде 0 болады.

DB7 – DB0 – деректер шинасы, және бұл бәрін айтады)

E түйреуіш - Enable сигналы деп аталады. Ол осы үшін қажет. Дисплеймен жұмыс істеу үшін - деректерді жазу немесе пәрмен беру - бұл түйреуішке оң импульс беру керек. Яғни, процедура келесідей болады:

  1. RS, R/W, DB7 - DB0 түйреуіштерінде - біздің командаға сәйкес келетін қажетті сигналдар.
  2. Біреуін E түйреуішіне жеткіземіз.
  3. Zhdems (мәліметтер парағы бойынша – кемінде 150 нс)
  4. Біз E түйреуішіне төмен деңгейді (0) қолданамыз.

Дисплейдің артқы жарығын қуаттандыру үшін A/Vee аяғына 4,2 В қою керек.

WH1602 дисплейімен байланыс осылай жүреді.

Біз WH1602 қосуды анықтадық, бірақ мысалға көшпес бұрын, дисплей қандай командаларды жалпы түсінетінін қарастырайық. Мұны істеу үшін біз деректер кестесіне кіріп, қызықты кестені табамыз:

Әрбір нақты пәрмен үшін WH1602 сәйкес түйреуіштерінде болуы керек барлық пәрмендер мен сигналдар осы жерде сипатталған. Мысалы, біз дисплейді тазалағымыз келеді, біз кестеге қараймыз, міне, бізге қажет команда! Дисплейді тазалау!

RS, R/W, DB7, DB6, DB5, DB4, DB3, DB2, DB1 түйреуіштеріне нөлдерді, ал біреуін DB0 түйреуіштеріне қолданамыз. Дайын! Енді не болады? Дұрыс, біреуі E түйреуішінде, содан кейін біраз күтіңіз және E қайтадан нөлге дейін төмендетіңіз. Міне, дисплей тазаланады 😉 Келесі пәрменді орындау алдында әр пәрмен үшін деректер парағында көрсетілген кідірту керек. Бос емес жалаушаны сұрау тиімдірек болады; ол 0-ге қалпына келтірілгенде, жұмысты жалғастыруға болады. Бұл жалауды оқуға арналған арнайы пәрмен де бар, сондықтан мұнымен бәрі түсінікті) Әрі қарай...

Және, шын мәнінде, бәрі теориямен байланысты, сіз бірдеңе жазуға тырыса аласыз. Дисплеймен жұмыс істеуді жеңілдету үшін мен шағын кітапхана жасадым, енді оны қалай пайдалануға болатынын көрейік. Біріншіден, жүктеп алыңыз

Біз 2 файлды аламыз, MT_WH1602.c және MT_WH1602.h. Біз екіншісін жыртып тастаймыз, мұнда түйреуіштер мен пайдаланылған контроллерді таңдау керек.

Айтпақшы, менің дисплейім келесідей қосылған:

RS-PC2
R/W – PB10
E–PB14
DB7–PD2
DB6–PC12
DB5–PA8
DB4–PA10
DB3–PA15
DB2–PD11
DB1–PA3
DB0–PA5

MT_WH1602.h файлын ашыңыз:

#платформаны анықтау (STM32F10x)

Содан кейін дисплей қосылған микроконтроллердің түйреуіштерін таңдаңыз. Алдымен қандай порттарды қолданатынымызды белгілейік. Мен қосылған кезде GPIOA, GPIOB, GPIOC және GPIOD қолданамын, біз жазамыз:

Басқа микроконтроллердің аяқтары үшін де солай.

Орнатуды аяқтадық, жалғастырайық) Мақаланың басында берілген командаларды шақыру үшін MT_WH1602.c файлында келесі функциялар бар (олар командалардың атымен аталған, сондықтан бәрі түсінікті деп ойлаймын) :

void MT_WH1602_ClearDisplay(жарамсыз) ; void MT_WH1602_ReturnHome(void ); void MT_WH1602_EntryModeSet (bool IDaddress, bool shift) ; void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ; void MT_WH1602_CursorOrDisplayShift (bool SCbit, bool RLbit) ; void MT_WH1602_FunctionSet (bool DLbit, bool Nbit, bool Fbit) ; void MT_WH1602_SetCGRAMAddress (uint8_t мекенжайы) ; void MT_WH1602_SetDDRAMAddress (uint8_t мекенжайы) ; bool MT_WH1602_ReadBusy(жарамсыз) ; void MT_WH1602_WriteData(uint8_t деректері) ;

Кейбір командалар үшін функцияға параметрлерді беру керек, мысалы:

void MT_WH1602_DisplayOnOff (bool Dbit, bool Cbit, bool Bbit) ;

Пәрмендер кестесін қарастырайық:

Дисплейді қосу/өшіру пәрмені дисплейді қосу/өшіру ғана емес, сонымен қатар курсорды және курсордың жыпылықтауын белсендіретін/өшіретінін көреміз. Деректер парағында бұл команда биттері D, C және B ретінде белгіленеді және біз оларды функцияға параметр ретінде береміз. Егер бізге дисплей мен курсорды қосу керек болса, бірақ курсордың жыпылықтауын өшіру керек болса, біз команданы келесідей шақырамыз:

MT_WH1602_DisplayOnOff(1, 1, 0);

Жалпы барлығы қарапайым😉

Қысқасы, біз жасаймыз жаңа жоба, WH1602 дисплейімен жұмыс істеуге арналған кітапхананы қосыңыз, бос .c файлын жасаңыз және оны кодпен толтыра бастаңыз:

// Кітапхана файлын қосыңыз#"MT_WH1602.h" қосу /*******************************************************************/ int негізгі(жарамсыз) ( // Инициализация функциясын шақырыңыз, онсыз істей алмаймыз =)() ; // Енді біз бастапқы дисплей конфигурациясын жасауымыз керек // Құжаттама және Интернет мұны істеуді ұсынады;) MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Кідіріс(1000 ) ; MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Кідіріс(1000 ) ; MT_WH1602_FunctionSet(1, 0, 0); MT_WH1602_Кідіріс(1000 ) ; MT_WH1602_FunctionSet(1, 1, 1); MT_WH1602_Кідіріс(1000 ) ; MT_WH1602_DisplayOnOff(1, 0, 0); MT_WH1602_Кідіріс(1000 ) ; MT_WH1602_ClearDisplay() ; MT_WH1602_Кідіріс(2000) ; // Мысалы, мен ойға келген бірінші кешіктіру мәндерін алдым) // Жалпы, дисплей бос емес жалаушасын тексеру керек // Енді сайтымыздың атауы сияқты бір нәрсені көрсетейік MT_WH1602_WriteData(0x6D) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x6F) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x74) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x65) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x68) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x6E) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x69) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x63) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x73) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x2E) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x72) ; MT_WH1602_Кідіріс(100) ; MT_WH1602_WriteData(0x75) ; MT_WH1602_Кідіріс(100) ; ал (1 ) ( __NOP(); ) ) /*******************************************************************/

Дайын, тексерейік)


Көріп отырғаныңыздай, бәрі дұрыс жұмыс істейді)

Айтпақшы, мен осы немесе басқа кейіпкерді көрсету үшін дисплейге не жазу керек деген сұрақты ұмытып кеттім. Міне, деректер парағындағы тақта:

Сонымен, дисплей жадына қандай мән жазу керектігін анықтау үшін белгілі бір символ үшін осы кестеде жоғарғы және сол жақта жазылған сандарды алу керек. Мысалы, «А» таңбасы. Көрейік - бұл таңба 0100 (0x4) бағанына және 0001 (0x1) жолына сәйкес келеді. «А» таңбасын көрсету үшін дисплейге 0x41 мәнін жазу керек екен.

Қазір болды =) Біз WH1602 дисплейінің қосылымы мен жұмысын реттедік, сондықтан жақында кездескенше!

P.S. Кітапханамен жұмыс істегенде мен бос емес жалаушаны оқу функциясын сынамадым, сондықтан кенеттен бірдеңе дұрыс жұмыс істемесе, жазыңыз, біз оны анықтаймыз)

Кейде біз Arduino-дан сыртқы әлемге әртүрлі ақпаратты шығару мәселесіне тап боламыз. Жиі сериялық портты пайдалану мүмкін емес, ыңғайсыз және тиімсіз.

Таңбалар дисплейі ақпаратты көрсетудің ең қарапайым және арзан құралдарының бірі болып табылады, өйткені оның кодталған таңбаларды сақтайтын өзінің микроконтроллері бар. Бұл жүйе осы дисплейлерді пайдалануды жеңілдетеді, бірақ сонымен бірге оларды тек шығару үшін пайдалануды шектейді мәтіндік ақпарат, графикалық дисплейлерден айырмашылығы.

Мысалда біз hd44780 контроллеріндегі ең көп таралған дисплейлердің бірі болып табылатын Winstar wh1602l1 дисплейін қарастырамыз. Бұған қоса, LCD 2004 және басқа ұқсас құрылғыларды қосуға болады.
Алғашқы екі сан бір жолдағы таңбалар санын, ал екіншісі жолдар санын көрсетеді, сондықтан таңдалған дисплейде 16 таңбадан тұратын 2 жол бар.
Бұл қосылу әдісі Arduino микроконтроллерінің кемінде 6 портын алуды қамтиды. Қажет болса, 1602 мәтіндік дисплейін I2C интерфейсі (2 порт) арқылы қосуға болады.

Бізге қажет қосымша элементтерден айнымалы резистор, контрастты басқару үшін. Әйтпесе, барлығы диаграммаға сәйкес, деректер кестесіне және бағдарламадағы таңдалған Arduino шығыстарына сәйкес қосылады.

Дисплейдегі 15 және 16 түйреуіштер артқы жарық үшін жауап береді; жарықтық сенсоры ретінде фоторезисторды Arduino-ға қосқанда оны өшіруге немесе жарықтылықты автоматты түрде реттеуге болады.

Біздің мысалда біз сериялық порттан деректерді оқимыз және оны дисплейде көрсетеміз:

#қосу // LiquidCrystal lcd(13, 11, 5, 4, 3, 2) символдық дисплейлермен жұмыс істеу үшін кітапхананы қосу; // (RS, E, D4, D5, D6, D7) дисплей шығыстарын R/W – GND ретіне сәйкес қосыңыз, өйткені біз дисплейге деректерді жазамыз және void setup() параметрін оқымаймыз ( lcd.begin( 16, 2); // LCD 1602 инициализациясы // lcd.begin(20, 4); // LCD 2004 инициализациясы Serial.begin(9600); // сериялық портты іске қосу ) void loop() ( if (Serial.available) ()) // Егер деректер порттан келсе, онда... ( delay(100); lcd.clear(); // (Serial.available() > 0) кезінде экранды толығымен тазалаңыз. // Егер деректер порттан келсе порт 0-ден үлкен, содан кейін ... ( lcd.write(Serial.read()); // сериялық порттан мәндерді оқып, оларды дисплейде көрсету ) ) )

Сіз кодты қиындата аласыз және Arduino-да DS1307 нақты уақыт сағатын LCD1602-ге шығара аласыз.

Енді кітапханадағы барлық функцияларды толығырақ қарастырайық LiquidCrystal:

Бірінші және ең маңыздысы, бұл кітапхананы пайдалану арқылы сіз дисплейдің жадында осы таңбалар болса да, орыс әріптерін көрсете алмайсыз. Бұл мәселені басқа кітапханалар немесе он алтылық кодты пайдаланып мәндерді жазу арқылы шешуге болады.

lcd.print();- ақпаратты көрсету үшін қолданылатын ең қарапайым және жиі қолданылатын.

lcd. анық(); - дисплейді тазалау үшін қолданылады.

lcd.setCursor(x, ж); - курсорды белгілі бір жерге орналастырады.

X – сызықтағы позицияның өзгеруі

Y – сызықты өзгерту

Мысалы, lcd.setCursor(0, 0); бұл жоғарғы сол жақ ұяшық.

lcd.home(); -курсорды 0, 0 позициясына орналастырады

lcd.home(); = lcd.setCursor(0, 0);

lcd. Дисплей солға айналдырыңыз(); - солға ауысыңыз

lcd. Дисплейді оңға айналдырыңыз(); - оңға жылжытыңыз

Lcd.createChar(Аты, массив); - өз белгіні жасау.

Мысалы, дәреже белгісі келесідей көрінеді:

Celc = (B00111, B00101, B00111, B00000, B00000, B00000, B00000, B00000 );




Жоғарғы