{"id":1132,"date":"2018-03-06T14:48:21","date_gmt":"2018-03-06T14:48:21","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=1132"},"modified":"2018-03-09T10:44:05","modified_gmt":"2018-03-09T10:44:05","slug":"sterowanie-serwem-za-pomoca-joysticka-3-2","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=1132","title":{"rendered":"Ekranik LCD 16&#215;2 oraz komunikacja I2C"},"content":{"rendered":"<p>Kontynuujemy projekt zabawki mierz\u0105cej refleks (tak\u017ce pami\u0119\u0107 &#8211; &#8222;memory&#8221;). Potrzebujemy sposobu komunikacji z u\u017cytkownikiem (innego ni\u017c pod\u0142\u0105czony komputer PC do Arduino) &#8211; wyb\u00f3r pad\u0142 na ekranik LCD 16&#215;2.<\/p>\n<h1>LCD 16&#215;2<\/h1>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1134\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/lcd_photo-Arduinowww.png\" alt=\"\" width=\"600\" height=\"317\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/lcd_photo-Arduinowww.png 600w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/lcd_photo-Arduinowww-300x159.png 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/p>\n<p>Uk\u0142ad ten to szesna\u015bcie znak\u00f3w w dw\u00f3ch wierszach &#8211; st\u0105d nazwa 16&#215;2. S\u0105 tak\u017ce inne, obejrzyjcie dla przyk\u0142adu magazyny <a href=\"https:\/\/botland.com.pl\/392-wyswietlacze-alfanumeryczne\">botland.com.pl<\/a><\/p>\n<p>Schemat pod\u0142\u0105czenia \u0142adnie opisany jest na oficjalnych stronach Arduino &#8211; <a href=\"https:\/\/www.arduino.cc\/en\/Tutorial\/HelloWorld\">zapraszam do lektury.<\/a>&nbsp;Nasze uk\u0142ady po z\u0142o\u017ceniu wygl\u0105da\u0142y tak:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1133\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4460-e1520416345796-1024x576.jpg\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4460-e1520416345796-1024x576.jpg 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4460-e1520416345796-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4460-e1520416345796-768x432.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Program polega na u\u017cyciu&nbsp;<strong>wbudowanej bibliotyki<\/strong> LiquidCrystal.h &#8212; poni\u017cej program:<\/p>\n<pre class=\"lang:arduino decode:true\" title=\"Uruchomienie wy\u015bwietlacza\">\/\/LCD16x2 sterowany przez Arduino\r\n\r\n#include &lt;LiquidCrystalC.h&gt; \/\/ dolaczenie pobranej biblioteki dla LCD\r\n\r\nLiquidCrystal lcd(, 2, 11, 12, 4, 5, 6, 7);\r\n\r\nvoid setup(){\r\n  lcd.begin(16,2);   \/\/ Inicjalizacja LCD 2x16\r\n  \r\n  lcd.setCursor(0,0); \/\/ Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)\r\n  lcd.print(\"pomidor!\");\r\n  delay(500);\r\n  lcd.setCursor(0,1); \/\/Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna)\r\n  lcd.print(\"LCD 16x2\");\r\n}\r\nvoid loop() {\r\n}<\/pre>\n<p>Warte podkre\u015blenia jest tutaj fakt wykorzystania a\u017c<strong> 6-ciu cyfrowych pin\u00f3w<\/strong> do obs\u0142ugi tego wy\u015bwietlacza. <strong>To du\u017co!<\/strong>&nbsp;Nie ma sprawy, gdy tylko &#8222;bawimy&#8221; si\u0119 modu\u0142em ekraniku, ale gdy ju\u017c co\u015b budujemy, pod\u0142\u0105czamy LED-y czy przyciski &#8211; to w\u00f3wczas spotykamy si\u0119 z deficytem pin\u00f3w w Arduino UNO. Ale s\u0105 lepsze sposoby na pod\u0142\u0105czenie takiego wy\u015bwietlacza.<\/p>\n<h1>Komunikacja I2C (IIC, TWI)<\/h1>\n<p>To bardzo popularny interface komunikacyjny, obs\u0142uguj\u0105cy za pomoc\u0105 <strong>tylko 2 linii<\/strong> a\u017c 127 urz\u0105dze\u0144! tymi pinami s\u0105 SDA (w Arduino pin A4) oraz SDC (w Arduino pin A5). Oznacza to, \u017ce gdy pod\u0142\u0105czamy <em>co\u015b<\/em> na I2C to \u0142\u0105czamy to <em>co\u015b<\/em>&nbsp;dwoma przewodami z Arduino, pod\u0142\u0105czaj\u0105c do wej\u015b\u0107 A4 i A5 &#8211; jednocze\u015bnie \u201etracimy\u201d te piny (A4 i A5) &#8211; nie mo\u017cemy z nich korzysta\u0107. Trudno \u2013 co\u015b za co\u015b. Zreszt\u0105, to nic nowego \u2013 podobnie jest z komunikacj\u0105 UART \u2013 Serial.begin(xxx) \u2013 \u201ezabiera\u201d nam cyfrowe piny #o (TX) i #1 (RX). Przy czym UART to tylko komunikacja z jednym urz\u0105dzeniem \u2013 a tutaj 2 piny i mo\u017cliwo\u015b\u0107 obs\u0142ugi do 127 urz\u0105dze\u0144!<\/p>\n<h1>Modu\u0142 hd44780 (i2c)<\/h1>\n<p>Jako przyk\u0142ad komunikacji I2C u\u017cyli\u015bmy wy\u015bwietlacza LCD 16\u00d72 z dodatkowym sterownikiem&nbsp;<strong>hd44780<\/strong>. Taki sterownik <a href=\"https:\/\/botland.com.pl\/konwertery-pozostale\/2352-konwerter-i2c-dla-wyswietlacza-lcd-hd44780.html\">jest tani<\/a> a bardzo u\u017cyteczny.&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-697 size-medium\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/Konwerter_I2C_do_wywietlacza_LCD_HD44780-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/Konwerter_I2C_do_wywietlacza_LCD_HD44780-300x300.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/Konwerter_I2C_do_wywietlacza_LCD_HD44780-150x150.jpg 150w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/05\/Konwerter_I2C_do_wywietlacza_LCD_HD44780.jpg 585w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/p>\n<p>Ca\u0142e pod\u0142\u0105czenie polega na po\u0142\u0105czeniu VCC i GND ze steronika do VCC i GND z Arduino, oraz pin\u00f3w SDA, SDC ze sternika &#8211; do SDA i SDC w Arduino. Przy okazji dowiedzieli\u015bmy si\u0119, \u017ce piny A4 i A5 w Arduino maj\u0105 swoje &#8222;klony&#8221; w szeregu pin\u00f3w cyfrowych, powy\u017cej #13, GDN, ARFE.<\/p>\n<p>Musimy u\u017cy\u0107 nowej biblioteki do obs\u0142ugi tego modu\u0142u &#8211; ja zdecydowa\u0142em si\u0119 na <strong>LiquidCrystal_I2C.h<\/strong> autorstwa&nbsp;<strong>Franka de Brabandera<\/strong>. Nie jest standardowo zainstalowana wi\u0119c trzeba j\u0105 <strong>samodzielnie doinstalowa\u0107<\/strong>. Przyk\u0142adowy program:<\/p>\n<pre class=\"lang:arduino decode:true\" title=\"Uruchomienie wy\u015bwietlacza\">\/\/LCD16x2 sterowany przez I2C Arduino\r\n\r\ninclude &lt;Wire.h&gt;   \/\/ standardowa biblioteka Arduino\r\n#include &lt;LiquidCrystal_I2C.h&gt; \/\/ dolaczenie pobranej biblioteki I2C dla LCD\r\n\r\nLiquidCrystal_I2C lcd(0x27, 16, 2);\r\n\/\/LiquidCrystal_I2C lcd(0x3f, 16, 2);\r\n\r\n\r\nvoid setup(){\r\n  lcd.init();\r\n  lcd.begin(16,2);   \/\/ Inicjalizacja LCD 2x16\r\n  \r\n  lcd.backlight(); \/\/ zalaczenie podwietlenia \r\n  lcd.setCursor(0,0); \/\/ Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)\r\n  lcd.print(\"pomidor!\");\r\n  delay(500);\r\n  lcd.setCursor(0,1); \/\/Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna)\r\n  lcd.print(\"LCD 16x2 I2C -- hd44780\");\r\n}\r\nvoid loop() {\r\n}<\/pre>\n<h1>i2cScanner<\/h1>\n<p>To bardzo u\u017cyteczny program (a\u017c mnie dziw bierze, \u017ce nie jest standardowo dodany do Arduino IDE!) wi\u0119c trzeba go r\u0119cznie&nbsp;<a href=\"https:\/\/playground.arduino.cc\/Main\/I2cScanner\">zgra\u0107 z internetu<\/a>&nbsp;i uruchomi\u0107. Dzi\u0119ki niemu poznajemy adres swojego urz\u0105dzenia &#8211; bo skoro magistrala i2c obs\u0142uguje a\u017c do 127 urz\u0105dze\u0144, to jak je rozpoznaje? kt\u00f3re urz\u0105dzenie jest kt\u00f3re? a je\u015bli chcemy mie\u0107 2, 3 lub 4 wy\u015bwietlacze LCD w jednym projekcie? W\u0142a\u015bnie po to s\u0105 adresy!<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1143\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/i2c_scanner_output.png\" alt=\"\" width=\"260\" height=\"193\"><\/p>\n<p>W naszej pracowni wyst\u0119puj\u0105 dwa rodzaje urz\u0105dze\u0144 &#8211; o adresach 0x27 oraz o 0x3f. Koniecznie sprawd\u017a u siebie! W naszym przyk\u0142adowym kodzie adres zapisany jest w linii 6 (kolejna linia przygotowuje na inny adresik).<\/p>\n<h1>Pomiar pr\u0105du<\/h1>\n<p>Warto zdawa\u0107 sobie spraw\u0119 z u\u017cycia pr\u0105du &#8211; jak wida\u0107 z poni\u017cszych zdj\u0119\u0107 wykonali\u015bmy pomiar i odnotowali\u015bmy r\u00f3\u017cnic\u0119 w poborze pr\u0105du w zale\u017cno\u015bci od trybu dzia\u0142ania ekraniku LCD &#8211; bez pod\u015bwietlenia (oko\u0142o 6 mA) oraz z pod\u015bwietleniem (oko\u0142o 26 mA).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1137\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4463-e1520416859532-1024x576.jpg\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4463-e1520416859532-1024x576.jpg 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4463-e1520416859532-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4463-e1520416859532-768x432.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>A tutaj pomiar pr\u0105du z w\u0142\u0105czonym pod\u015bwietleniem:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-1139\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4465-e1520416888628-1024x576.jpg\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4465-e1520416888628-1024x576.jpg 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4465-e1520416888628-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/03\/DSC_4465-e1520416888628-768x432.jpg 768w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Projektuj\u0105c sw\u00f3j uk\u0142ad warto bra\u0107 pod uwag\u0119 &#8222;pr\u0105do\u017cerno\u015b\u0107&#8221; ka\u017cdego urz\u0105dzenia. Ale to na przysz\u0142o\u015b\u0107. My prze\u0107wiczyli\u015bmy mierzenie pr\u0105du \ud83d\ude09<\/p>\n<p style=\"text-align: right;\">(c) KG 2018<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kontynuujemy projekt zabawki mierz\u0105cej refleks (tak\u017ce pami\u0119\u0107 &#8211; &#8222;memory&#8221;). Potrzebujemy sposobu komunikacji z u\u017cytkownikiem (innego ni\u017c pod\u0142\u0105czony komputer PC do Arduino) &#8211; wyb\u00f3r pad\u0142 na ekranik LCD 16&#215;2. LCD 16&#215;2 Uk\u0142ad ten to szesna\u015bcie znak\u00f3w w dw\u00f3ch wierszach &#8211; st\u0105d nazwa 16&#215;2. S\u0105 tak\u017ce inne, obejrzyjcie dla przyk\u0142adu magazyny botland.com.pl Schemat pod\u0142\u0105czenia \u0142adnie opisany jest [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":1133,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[141,25,28,217,26,177,213,138],"class_list":{"0":"post-1132","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-fibot","8":"tag-hd44780","9":"tag-i2c","10":"tag-iic","11":"tag-komunikacja","12":"tag-lcd","13":"tag-millis","14":"tag-refleks","15":"tag-twi","17":"post-with-thumbnail","18":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/1132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1132"}],"version-history":[{"count":7,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/1132\/revisions"}],"predecessor-version":[{"id":1145,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/1132\/revisions\/1145"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/1133"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}