      {"id":651,"date":"2021-06-20T13:38:59","date_gmt":"2021-06-20T11:38:59","guid":{"rendered":"https:\/\/www.konnekting.de\/?page_id=651"},"modified":"2022-05-21T19:39:39","modified_gmt":"2022-05-21T17:39:39","slug":"lektion-6-eeprom-co","status":"publish","type":"page","link":"https:\/\/www.konnekting.de\/en\/konnekting-lernen\/lektion-6-eeprom-co\/","title":{"rendered":"Lektion 6: EEPROM &#038; Co."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">In diesem Kapitel m\u00f6chten wir dir die Kleinigkeiten rund um die Konnekting-Bibliothek n\u00e4her bringen. Hier werden auch Fragen aus dem Forum aufgegriffen und die L\u00f6sungen n\u00e4her erl\u00e4utert.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p><\/p><\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"eeprom\">EEPROM<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"externes-eeprom\">Externes EEPROM<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Wie in der letzten Lektion bereits erw\u00e4hnt, nutzt Konnekting ein EEPROM, um Gruppenadressen und Parameter zu speichern. Da der SAMD21G18 kein internes EEPROM besitzt, muss ein externes EEPROM her. Dazu eignet sich z.B. ein 24AA256 (32 K x 8). Wenn deine Applikation viele Daten nichtfl\u00fcchtig speichert, dann solltest du pr\u00fcfen, ob du damit auskommst. Der DemoSketch bringt die EEPROM_24AA256.h mit den Funktionen f\u00fcr den Zugriff mit. Du musst nur noch die Funktionspointer an Konnekting \u00fcbergeben<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n    Wire.begin();\n    Konnekting.setMemoryReadFunc(&amp;readMemory);\n    Konnekting.setMemoryWriteFunc(&amp;writeMemory);\n    Konnekting.setMemoryUpdateFunc(&amp;updateMemory);\n    Konnekting.setMemoryCommitFunc(&amp;commitMemory);\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">und danach dann Konnekting initialisieren.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"flash-als-eeprom\">Flash als EEPROM<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Konnekting greift haupts\u00e4chlich lesend auf das EEPROM zu. Wenn deine Applikation nur wenige Schreibzugriffe durchf\u00fchrt, dann kannst du auch den internen Flash-Speicher als EEPROM-Ersatz nutzen. Dazu gibt es die KonnektingFlashStorage-Bibliothek. Diese wird zun\u00e4chst eingebunden und ein Speicherbereich festgelegt:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n\/\/ internes Flash als EEPROM\n#include &lt;FlashAsEEPROM.h&gt;\nFlash(my_eeprom_storage, 2048);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Nun ben\u00f6tigt man noch die vier Funktionen f\u00fcr den Zugriff:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\nbyte readMemory(int index) {\n\treturn EEPROM.read(index);\n}\n\nvoid writeMemory(int index, byte val) {\n\tEEPROM.write(index,val);\n}\n\nvoid updateMemory(int index, byte val) {\n\tEEPROM.update(index,val);\n}\n\nvoid commitMemory() {\n\tEEPROM.commit();\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Im Setup muss das EEPROM initialisiert werden:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n\t\/\/ tell the EEPROM implementation which flash to use\n\tEEPROM.setStorage(&amp;my_eeprom_storage);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Danach geht es dann wie beim externen EEPROM weiter.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>ACHTUNG! Der Flash-Speicher wird beim Neuprogrammieren der Firmware \u00fcberschrieben. Das Ger\u00e4t muss nach dem Flashen neu parametriert werden.<\/p><\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"eeprom-in-der-applikation\">EEPROM in der Applikation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Damit deine Applikation wei\u00df, wo sie ihre Daten speichern kann, stellt Konnekting eine Funktion bereit, die den Beginn des freien EEPROM-Speichers zur\u00fcckgibt. Lesen der ersten Speicherstelle f\u00fcr die Applikation sieht so aus:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\na = EEPROM.read(Konnekting.getMemoryUserSpaceStart());\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"prog-button-und-prog-led\">Prog-Button und Prog-LED<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bislang haben wir immer mit einem Button an einem Interruptanschluss gearbeitet, um das Ger\u00e4t in den Programmiermodus zu versetzen. Hat man aber bereits viele Taster auf der Frontplatte und wenig Platz f\u00fcr einen weiteren, den man dazu auch noch selten ben\u00f6tigt, dann kann man auch die vorhandenen Taster nutzen. Das Gleiche gilt f\u00fcr die LED, die den Programmiermodus anzeigt. Dazu schreibst du zun\u00e4chst eine Funktion, die die entsprechende Anzeige ein- oder ausschaltet:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\nvoid progLed(bool state)\n{\n    \/\/hier steht dein Programmtext zum Anzeigen des Prog-Status\n    \/\/z.B. digitalWrite(PROG_LED_PIN, state);\n    \/\/kann aber auch eine LCD-Anzeige o.\u00e4. sein\n}\n\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Die Initialisierung von Konnekting sieht dann so aus:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n    Konnekting.init(KNX_SERIAL,\n                    &amp;progLed,\n                    MANUFACTURER_ID,\n                    DEVICE_ID,\n                    REVISION);\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Du \u00fcbergibst Konnekting also einfach die Funktion f\u00fcr die Statusanzeige. Um den Progstatus umzuschalten, musst du die daf\u00fcr vorgesehene Tastenprozedur in deiner Tastaturroutine auswerten und dann die Funktion<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\n\t    Konnekting.toggleProgState();\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">aufrufen. Voila.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/www.konnekting.de\/konnekting-lernen\/lektion-5-nun-mit-konnekting\/\" data-type=\"page\" data-id=\"607\">&lt;&#8211; Lektion 5: Nun mit Konnekting<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Kapitel m\u00f6chten wir dir die Kleinigkeiten rund um die Konnekting-Bibliothek n\u00e4her bringen. Hier werden auch Fragen aus dem Forum aufgegriffen und die L\u00f6sungen n\u00e4her erl\u00e4utert. EEPROM Externes EEPROM Wie in der letzten Lektion bereits erw\u00e4hnt, nutzt Konnekting ein EEPROM, um Gruppenadressen und Parameter zu speichern. Da der SAMD21G18 kein internes EEPROM besitzt, muss &hellip; <a href=\"https:\/\/www.konnekting.de\/en\/konnekting-lernen\/lektion-6-eeprom-co\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Lektion 6: EEPROM &#038; Co.&#8221;<\/span><\/a><\/p>\n","protected":false},"author":5,"featured_media":0,"parent":163,"menu_order":6,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-651","page","type-page","status-publish","hentry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"en","enabled_languages":["de","en"],"languages":{"de":{"title":true,"content":true,"excerpt":false},"en":{"title":false,"content":false,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages\/651","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/comments?post=651"}],"version-history":[{"count":10,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages\/651\/revisions"}],"predecessor-version":[{"id":730,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages\/651\/revisions\/730"}],"up":[{"embeddable":true,"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/pages\/163"}],"wp:attachment":[{"href":"https:\/\/www.konnekting.de\/en\/wp-json\/wp\/v2\/media?parent=651"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}