{"id":2110,"date":"2018-02-21T01:32:40","date_gmt":"2018-02-21T00:32:40","guid":{"rendered":"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=2110"},"modified":"2018-03-03T18:36:09","modified_gmt":"2018-03-03T17:36:09","slug":"99-lcd-text-i2c-library-stm32f407","status":"publish","type":"page","link":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=2110","title":{"rendered":"99-LCD-Text-I2C-Library (STM32F407)"},"content":{"rendered":"<p><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-previous\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=798\" title=\"98-FPGA-Library (STM32F4) [HAL]\"><span class=\"meta-nav\">\u2190<\/span> 98-FPGA-Library (STM32F4) [HAL]<\/a><\/div><\/div><!-- #nav-below --><div id=\"nav-below\" class=\"navigation\"><div class=\"nav-next\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=560\" title=\"STM32F4-DIY\">STM32F4-DIY <span class=\"meta-nav\">&rarr;<\/span><\/a><\/div><\/div><!-- #nav-below --><\/p>\n<p>Diese Library dient zum Ansteuern eines Text LC-Display mit <strong>HD44780<\/strong> Treiber, welches seriell \u00fcber <strong>I2C<\/strong>\u00a0und einem <strong>PCF8574<\/strong> mit dem Mikrocontroller verbunden ist. Dabei sind die I2C Adresse, die Anzahl Zeilen und die Anzahl Zeichen je Zeile konfigurierbar.<\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_front.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2057 size-medium\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_front-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_front-300x225.jpg 300w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_front-768x576.jpg 768w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_front.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><br \/>\n<a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_back.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2056 size-medium\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_back-300x225.jpg\" alt=\"\" width=\"300\" height=\"225\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_back-300x225.jpg 300w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_back-768x576.jpg 768w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/LCD_16x02_back.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>G\u00fcnstige Displays haben z.B. 16&#215;2 oder 20&#215;4 Zeichen und k\u00f6nnen z.B. hier erworben werden:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.banggood.com\/IIC-I2C-1602-Blue-Backlight-LCD-Display-Module-For-Arduino-p-950726.html\" target=\"_blank\" rel=\"noopener nofollow\">16\u00d72 Character Blue Backlight LCD Display (2.81 \u20ac)<\/a><\/li>\n<li><a href=\"https:\/\/www.banggood.com\/IIC-I2C-2004-204-20-x-4-Character-LCD-Display-Module-Blue-p-908616.html\" target=\"_blank\" rel=\"noopener nofollow\">20\u00d74 Character Blue Backligt LCD Display (5.58 \u20ac)<\/a><\/li>\n<\/ul>\n<p>Der PCF8574 ist ein via I2C-Bus angeschlossener 8-Bit I\/O Port-Expander.\u00a0Ein seriell an den Baustein gesendeter Wert wird auf dessen Pins parallel ausgegeben. Ein typisches Datenblatt findet ihr z.B.\u00a0<a href=\"https:\/\/www.nxp.com\/docs\/en\/data-sheet\/PCF8574_PCF8574A.pdf\" target=\"_blank\" rel=\"noopener\">hier<\/a>. Daraus ersichtlich ist auch die I2C Adressbelegung, welche bei einigen Modulen \u00fcber L\u00f6tbr\u00fccken ver\u00e4ndert werden kann. Hinweis zu den Angaben der ersten drei Spalten A2, A1 und A0: der Wert VSS bedeutet, dass eine L\u00f6tbr\u00fccke vorhanden ist, der Wert VDD\u00a0 bedeutet keine L\u00f6tbr\u00fccke:<\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/PCF8574-address-maps.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2070 size-medium\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/PCF8574-address-maps-300x139.jpg\" alt=\"\" width=\"300\" height=\"139\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/PCF8574-address-maps-300x139.jpg 300w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/PCF8574-address-maps.jpg 534w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Mein verwendetes Modul ist im Auslieferungszustand auf die <strong>I2C Adresse 0x7E<\/strong>\u00a0eingestellt (keine L\u00f6tbr\u00fccken). Durch L\u00f6tbr\u00fccken an A0 bis A2 k\u00f6nnen bei Bedarf auch andere Adressen (0x77 bis 0x7E) eingestellt werden. Es gibt wohl auch Module, bei denen die\u00a0I2C Adresse von 0x20 bis 0x27, oder von 0x38 bis 0x3F einzustellen ist, oder auch von 0x47 bis 0x4E geht. Hinweis: In meiner Library habe ich eine <strong>PortScan Funktion<\/strong> eingebunden, damit bei unbekannter I2C Adresse diese automatisch erkannt und verwendet werden kann;)<\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/PCF8574.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2071 size-medium\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/PCF8574-300x105.jpg\" alt=\"\" width=\"300\" height=\"105\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/PCF8574-300x105.jpg 300w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/PCF8574.jpg 600w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Oberhalb der L\u00f6tbr\u00fccken (A0 bis A2) ist am I2C Modul ein Drehregler, mit dem der Kontrast geregelt werden kann. Achtung: Oft ist der Kontrast im Auslieferungszustand sehr weit runter geschraubt. Daher sollte man den Kontrast zu beginn mit dem Drehregler ganz nach rechts an den Anschlag drehen. Sp\u00e4ter, wenn die Ansteuerung funktioniert, dann k\u00f6nnt ihr den Kontrast entsprechend korrigieren.<\/p>\n<p>Zur Ansteuerung werden neben der Versorgungsspannung (<strong>5V<\/strong> und <strong>GND<\/strong>) nur zwei Leitungen ben\u00f6tigt (<strong>SCL<\/strong>, <strong>SDA<\/strong>).\u00a0Hier im Beispiel wurde I2C3 benutzt.<\/p>\n<p><strong>Benutzte Pins :<\/strong><\/p>\n<pre>GND an GND\r\nVCC an +5V\r\nSDA an PC9\r\nSCL an PA8<\/pre>\n<p>Als Grundlage der I2C Kommunikation habe ich das <strong><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=235\">I2C LoLevel Library<\/a><\/strong>\u00a0verwendet, wobei ich alle drei Module (I2C1, I2C2 und I2C3) eingebunden habe.<\/p>\n<p>Programmtechnisch muss nach wie vor die\u00a0Protokollverwaltung des HD44780 umgesetzt werden, denn wie bereits erw\u00e4hnt ist der PCF8574 &#8222;nur&#8220; ein I2C I\/O Expander.<\/p>\n<p>Hier habe ich zwei Skizzen f\u00fcr euch, welche die Anbindung schematisch verdeutlichen:<\/p>\n<p><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/I2C-LCD-Text-Schema.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2074 size-medium\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/I2C-LCD-Text-Schema-225x300.jpg\" alt=\"\" width=\"225\" height=\"300\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/I2C-LCD-Text-Schema-225x300.jpg 225w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/I2C-LCD-Text-Schema.jpg 480w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/a>\u00a0\u00a0<a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/I2C_1602_Blue_Backlight_LCD_Display_Module_Schematic_Diagram.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-2141 size-medium\" src=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/I2C_1602_Blue_Backlight_LCD_Display_Module_Schematic_Diagram-300x269.jpg\" alt=\"\" width=\"300\" height=\"269\" srcset=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/I2C_1602_Blue_Backlight_LCD_Display_Module_Schematic_Diagram-300x269.jpg 300w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/I2C_1602_Blue_Backlight_LCD_Display_Module_Schematic_Diagram-768x688.jpg 768w, https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/02\/I2C_1602_Blue_Backlight_LCD_Display_Module_Schematic_Diagram-1024x917.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>Deshalb sind die Funktionen dieser Library sehr \u00e4hnlich der Funktionen aus der <strong><a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=387\">LCD_2x16-Library<\/a><\/strong>. Allerdings wollte ich etwas flexibler sein, was die Konfiguration der Pinbelegung und Display-Einstellung betrifft. Deshalb erfolgt die Konfiguration eines LCD Displays \u00fcber eine Struktur mit folgenden Attributen:<\/p>\n<pre lang=\"c\" line=\"1\">\/\/--------------------------------------------------------------\r\n\/\/ Struktur eines LCD Displays\r\n\/\/--------------------------------------------------------------\r\ntypedef struct {\r\n\tTI2C_t i2c;\t\t\/\/ I2C Modul (1=I2C1, 2=I2C2 oder 3=I2C3)\r\n\tuint8_t slave_adr;\t\/\/ I2C Adresse (z.B. 0x27)\r\n\tuint8_t maxx;\t\t\/\/ Max. Anzahl Zeichen je Zeile (1..20)\r\n\tuint8_t maxy;\t\t\/\/ Max Anzahl Zeilen (1..4)\r\n\tuint8_t backlight;\t\/\/ LCD Hintergrundbeleuchtung (0=Aus, 1=Ein)\r\n}LCD_TEXT_DISPLAY_t;\r\n<\/pre>\n<p><strong>Voraussetzungen :<\/strong><\/p>\n<pre>CMSIS_BOOT, M4_CMSIS_CORE\r\nstm32_ub_i2c1.c (ab Version 1.3)\r\nstm32_ub_i2c2.c (ab Version 1.3)\r\nstm32_ub_i2c3.c (ab Version 1.3)\r\nprintf.c (ab Version 07.11.2013)\r\n<\/pre>\n<p><strong>Funktionen :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">void UB_I2C_Init(LCD_TEXT_DISPLAY_t *lcd);\r\nvoid UB_LCD_TEXT_I2C_Delay(uint32_t delay);\r\nvoid UB_LCD_TEXT_I2C_Init(LCD_TEXT_DISPLAY_t *lcd);\r\nvoid UB_LCD_TEXT_I2C_Clear(LCD_TEXT_DISPLAY_t *lcd);\r\nvoid UB_LCD_TEXT_I2C_SetMode(LCD_TEXT_DISPLAY_t *lcd, TLCD_TEXT_I2C_MODE_t mode);\r\nvoid UB_LCD_TEXT_I2C_String(LCD_TEXT_DISPLAY_t *lcd, uint8_t x, uint8_t y, char *ptr);\r\nvoid UB_LCD_TEXT_I2C_WriteCG(LCD_TEXT_DISPLAY_t *lcd, uint8_t nr, uint8_t *pixeldata);\r\nvoid UB_LCD_TEXT_I2C_PrintCG(LCD_TEXT_DISPLAY_t *lcd, uint8_t x, uint8_t y, uint8_t nr);\r\nvoid UB_LCD_TEXT_I2C_Backlight_On(LCD_TEXT_DISPLAY_t *lcd);\r\nvoid UB_LCD_TEXT_I2C_Backlight_Off(LCD_TEXT_DISPLAY_t *lcd);\r\nvoid UB_LCD_TEXT_I2C_Backlight_Toggle(LCD_TEXT_DISPLAY_t *lcd);\r\nuint8_t UB_LCD_TEXT_I2C_PortScan(LCD_TEXT_DISPLAY_t *lcd, uint8_t start, uint8_t ende);\r\n<\/pre>\n<p><strong>Beispiel :<\/strong><\/p>\n<pre lang=\"c\" line=\"1\">\r\n\/\/--------------------------------------------------------------\r\n\/\/ File     : main.c\r\n\/\/ Datum    : 24.02.2018\r\n\/\/ Version  : 1.01\r\n\/\/ Autor    : Manfred Becker (MB)\r\n\/\/ EMail    : -\r\n\/\/ Web      : http:\/\/mikrocontroller.bplaced.net\/\r\n\/\/ CPU      : STM32F407 (Discovery-Board)\r\n\/\/ IDE      : CooCox CoIDE 1.7.8\r\n\/\/ GCC      : 4.7 2012q4\r\n\/\/ Module   : CMSIS_BOOT, M4_CMSIS_CORE\r\n\/\/          : stm32_ub_i2c1.c (ab Version 1.3)\r\n\/\/          : stm32_ub_i2c2.c (ab Version 1.3)\r\n\/\/          : stm32_ub_i2c3.c (ab Version 1.3)\r\n\/\/          : stm32_ub_lcd_text_i2c.c (ab Version 1.0)\r\n\/\/          : printf.c (ab Version 07.11.2013)\r\n\/\/ Funktion : Demo der LCD Text Anbindung ueber I2C-LoLevel-Library\r\n\/\/ Hinweis  : Diese zwei Files muessen auf 8MHz stehen\r\n\/\/              \"cmsis_boot\/stm32f4xx.h\"\r\n\/\/              \"cmsis_boot\/system_stm32f4xx.c\"\r\n\/\/--------------------------------------------------------------\r\n\r\n#include \"main.h\"\r\n#include \"stm32_ub_lcd_text_i2c.h\"\r\n#include \"stdio.h\" \/\/ fuer sprintf() Funktion\r\n\r\nint main(void)\r\n{\r\n\tLCD_TEXT_DISPLAY_t myLCD = { \r\n\tTI2C3,\t\/\/ I2C Modul (1=I2C1, 2=I2C2 oder 3=I2C3)\r\n\t0,\t\t\/\/ I2C Adresse des LCD Displays. Falls unbekannt dann auf 0 setzen und PortScan laufen lassen.\r\n\t16,\t\t\/\/ Anzahl Zeichen je Zeile\r\n\t2, \t\t\/\/ Anzahl Zeilen\r\n\t1\t\t\/\/ LCD Hintergrundbeleuchtung (0=Aus, 1=Ein)\r\n\t};\r\n\r\n\tSystemInit(); \/\/ Quarz Einstellungen aktivieren\r\n\r\n\t\/\/ Init der I2C1-Schnittstelle\r\n\tUB_I2C_Init(&myLCD);\r\n\r\n\t\/\/ I2C Port Scan starten?\r\n\tif (myLCD.slave_adr==0x00)\r\n\t{\r\n\t\tuint8_t n;\r\n\r\n\r\n\t\t\/\/ I2C Port Scan starten von 0x01 bis 0x7F\r\n\t\tif ((myLCD.slave_adr = UB_LCD_TEXT_I2C_PortScan(&myLCD, 0x01, 0x7F)) != 0x00)\r\n\t\t{\r\n\t\t\tchar txt[16];\r\n\t\t\tsprintf(txt,\"I2C-Adr: 0x%02x\", myLCD.slave_adr);\r\n\r\n\t\t\t\/\/ Init vom LC-Display\r\n\t\t\tUB_LCD_TEXT_I2C_Init(&myLCD);\r\n\r\n\t\t\t\/\/ Text auf Zeile-1 ausgeben\r\n\t\t\tUB_LCD_TEXT_I2C_String(&myLCD,0,0,txt);\r\n\t\t\tUB_LCD_TEXT_I2C_Delay(150);\r\n\t\t\tfor (n=0; n < 11; n++)\r\n\t\t\t{\r\n\t\t\t\tUB_LCD_TEXT_I2C_Backlight_Toggle(&#038;myLCD);\r\n\t\t\t\tUB_LCD_TEXT_I2C_Delay(50);\r\n\t\t\t}\r\n\t\t\tUB_LCD_TEXT_I2C_Backlight_On(&#038;myLCD);\r\n\t\t\tUB_LCD_TEXT_I2C_Delay(3000);\r\n\t\t}\r\n\t\telse\r\n\t\t{\r\n\t\t\t\/\/ToDo: Fehlerbehandlung\r\n\t\t}\r\n\t}\r\n\r\n\t\/\/ Init vom LC-Display\r\n\tUB_LCD_TEXT_I2C_Init(&#038;myLCD);\r\n\r\n\t\/\/ Text auf Zeile-1 ausgeben\r\n\tUB_LCD_TEXT_I2C_String(&#038;myLCD,0,0,\"Hello STM32F407-\");\r\n\t\r\n\t\/\/ Text auf Zeile-2 ausgeben\r\n\tUB_LCD_TEXT_I2C_String(&#038;myLCD,0,1,\"Mikrocontroller!\");\r\n\tUB_LCD_TEXT_I2C_Delay(2000);\r\n\r\n\t\/\/ 4-Zeilen LCD Display?\r\n\tif (myLCD.maxy>=4)\r\n\t{\r\n\t\t\/\/ Clear\r\n\t\tUB_LCD_TEXT_I2C_Clear(&myLCD);\r\n\t\tUB_LCD_TEXT_I2C_SetMode(&myLCD, TLCD_TEXT_I2C_BLINK); \/\/ Display=EIN, Cursor=EIN, Blinken=EIN\r\n\r\n\t\t\/\/ Text auf Zeile-1 bis 4 ausgeben\r\n\t\tUB_LCD_TEXT_I2C_String(&myLCD,0,0,\"1\");\r\n\t\tUB_LCD_TEXT_I2C_String(&myLCD,5,1,\"5\");\r\n\t\tUB_LCD_TEXT_I2C_String(&myLCD,10,2,\"10\");\r\n\t\tUB_LCD_TEXT_I2C_String(&myLCD,15,3,\"15\");\r\n\t\tUB_LCD_TEXT_I2C_Delay(2000);\r\n\r\n\t\tUB_LCD_TEXT_I2C_SetMode(&myLCD, TLCD_TEXT_I2C_ON); \/\/ Display=EIN, Cursor=AUS, Blinken=Aus\r\n\t}\r\n\t\r\n\r\n\t\/\/ Clear\r\n\tUB_LCD_TEXT_I2C_Clear(&myLCD);\r\n\r\n\t\/\/ Definition eines Sonderzeichens in 8 Bytes\r\n\tuint8_t buf[8];\r\n\tbuf[0]=0b01000000;\r\n\tbuf[1]=0b01100000;\r\n\tbuf[2]=0b01110000;\r\n\tbuf[3]=0b01111000;\r\n\tbuf[4]=0b01111100;\r\n\tbuf[5]=0b01111110;\r\n\tbuf[6]=0b01111111;\r\n\tbuf[7]=0b00000000;\r\n\r\n\tUB_LCD_TEXT_I2C_WriteCG(&myLCD, 0, buf); \/\/ Speichern eines Sonderzeichens im CG-RAM vom Display\r\n\r\n\tuint8_t x,y,n;\r\n\tchar* ch;\r\n\r\n\tfor (y=0; y < myLCD.maxy; y++)\r\n\t\tfor (x=0; x < myLCD.maxx; x++)\r\n\t\t\tUB_LCD_TEXT_I2C_PrintCG(&#038;myLCD, x, y, 0); \/\/ Ausgabe des Sonderzeichens bei Pos. x,y\r\n\r\n\tUB_LCD_TEXT_I2C_Delay(2000);\r\n\r\n\twhile(1)\r\n\t{\r\n\t\t\/\/ Testfunktion im Dauerlauf\r\n\t\tUB_LCD_TEXT_I2C_Clear(&#038;myLCD);\r\n\t\tUB_LCD_TEXT_I2C_String(&#038;myLCD,0,0,\"LCD Txt I2C Test\");\r\n\t\tUB_LCD_TEXT_I2C_String(&#038;myLCD,0,1,\"Please wait.....\");\r\n\t\tUB_LCD_TEXT_I2C_Delay(2000);\r\n\r\n\t\tx=0; y=0;\r\n\t\tfor (n=0; n < 256; n++)\r\n\t\t{\r\n\t\t\tch=(char)n;\r\n\t\t\tUB_LCD_TEXT_I2C_String(&#038;myLCD,x,y,&#038;ch);\r\n\t\t\tif ((++x)>=myLCD.maxx)\r\n\t\t\t{\r\n\t\t\t\tx=0;\r\n\t\t\t\tif ((++y)>=myLCD.maxy)\r\n\t\t\t\t{\r\n\t\t\t\t\ty=0;\r\n\t\t\t\t\tUB_LCD_TEXT_I2C_Delay(500);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n}\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p><strong>Downloads:\u00a0<\/strong><\/p>\n<div class=\"sdm_download_item \"><div class=\"sdm_download_item_top\"><div class=\"sdm_download_thumbnail\"><img decoding=\"async\" class=\"sdm_download_thumbnail_image\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/03\/CoIDE-Library-Thumbnail.jpg\" alt = \"STM32F407_stm32_ub_lcd_text_i2c\" \/><\/div><div class=\"sdm_download_title\">STM32F407_stm32_ub_lcd_text_i2c<\/div><\/div><div style=\"clear:both;\"><\/div><div class=\"sdm_download_description\"><p>Hier die Library 99-LCD-Text-I2C-Library (STM32F407) zum Download.<\/p>\n<p>&nbsp;<\/p>\n<\/div><div class=\"sdm_download_link\"><span class=\"sdm_download_button\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?sdm_process_download=1&download_id=2155\" class=\"sdm_download green\" title=\"STM32F407_stm32_ub_lcd_text_i2c\" target=\"_self\">Jetzt herunterladen!<\/a><\/span><span class=\"sdm_download_item_count\"><span class=\"sdm_item_count_number\">876<\/span><span class=\"sdm_item_count_string\"> Downloads<\/span><\/span><\/div><\/div><div class=\"sdm_clear_float\"><\/div>\n<div class=\"sdm_download_item \"><div class=\"sdm_download_item_top\"><div class=\"sdm_download_thumbnail\"><img decoding=\"async\" class=\"sdm_download_thumbnail_image\" src=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/wp-content\/uploads\/2018\/03\/CoIDE-Demo-Thumbnail.jpg\" alt = \"STM32F407_Demo_99_LCD_Text_I2C\" \/><\/div><div class=\"sdm_download_title\">STM32F407_Demo_99_LCD_Text_I2C<\/div><\/div><div style=\"clear:both;\"><\/div><div class=\"sdm_download_description\"><p>Hier der komplette CooCox-Projektordner zum\u00a0<strong>Download :<\/strong><\/p>\n<\/div><div class=\"sdm_download_link\"><span class=\"sdm_download_button\"><a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?sdm_process_download=1&download_id=2162\" class=\"sdm_download green\" title=\"STM32F407_Demo_99_LCD_Text_I2C\" target=\"_self\">Jetzt herunterladen!<\/a><\/span><span class=\"sdm_download_item_count\"><span class=\"sdm_item_count_number\">726<\/span><span class=\"sdm_item_count_string\"> Downloads<\/span><\/span><\/div><\/div><div class=\"sdm_clear_float\"><\/div>\n<p>Viel Spass damit,<br \/>\nManfred<\/p>\n<p>PS: Dieses Library gibt&#8217;s auch f\u00fcr den <a href=\"http:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=2067\">STM32F429 Disco<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Diese Library dient zum Ansteuern eines Text LC-Display mit HD44780 Treiber, welches seriell \u00fcber I2C\u00a0und einem PCF8574 mit dem Mikrocontroller verbunden ist. Dabei sind die I2C Adresse, die Anzahl Zeilen und die Anzahl Zeichen je Zeile konfigurierbar. G\u00fcnstige Displays haben &hellip; <a href=\"https:\/\/mikrocontroller.bplaced.net\/wordpress\/?page_id=2110\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":144,"menu_order":99,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[128],"tags":[295,98,139,9,296,294,7,41],"class_list":["post-2110","page","type-page","status-publish","hentry","category-stm32f4","tag-hd44780","tag-i2c","tag-lcd","tag-library","tag-pcf8574","tag-stm32","tag-stm32f4","tag-text-lcd"],"_links":{"self":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/2110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2110"}],"version-history":[{"count":15,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/2110\/revisions"}],"predecessor-version":[{"id":2174,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/2110\/revisions\/2174"}],"up":[{"embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=\/wp\/v2\/pages\/144"}],"wp:attachment":[{"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mikrocontroller.bplaced.net\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}