{"id":4543,"date":"2025-05-17T11:02:47","date_gmt":"2025-05-17T09:02:47","guid":{"rendered":"https:\/\/www.rommelkist.nl\/elec\/?p=4543"},"modified":"2025-05-23T16:47:28","modified_gmt":"2025-05-23T14:47:28","slug":"ch32v003-testen","status":"publish","type":"post","link":"https:\/\/www.rommelkist.nl\/elec\/elektronica\/ch32v003-testen\/","title":{"rendered":"CH32v003 &#8211; deel 3 &#8211; Testjes"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Vooruitlopend op de komst van de losse CH32v003 chippies eerst nog een paar testjes met het programmeren van het &#8220;ontwikkelbordje&#8221; (de F4P6 variant). <br>De pinnen 3V3, Gnd en SWDIO van de WCH-LinkE verbonden met de pinheader op de CH32v003, respectievelijk VDD, Gnd en SWD en het programmeren vanuit de Arduino IDE verloopt als een trein!<br><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Testen van I2C<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ik had ergens gelezen dat je de analoog-digitaal-converter (ADC) pas kon gebruiken nadat je &#8216;m geactiveerd hebt. Standaard staat ie blijkbaar uitgeschakeld. Ik vroeg me af of dat dan ook geldt voor I2C. Volgens de datasheet zit er maar \u00e9\u00e9n II2C bus op. Toch zie ik op de 20-pins variant ook het volgende:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SDA &#8211; PC1 (vet gedrukt) en PC6, PD8 (cursief gedrukt)<\/li>\n\n\n\n<li>SCL &#8211; PC2 (vet gedrukt) en PC5 &amp; PD1 (cursief gedrukt)<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/05\/image-26.png\"><img loading=\"lazy\" decoding=\"async\" width=\"784\" height=\"807\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/05\/image-26.png\" alt=\"\" class=\"wp-image-4545\" style=\"width:500px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-26.png 784w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-26-291x300.png 291w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-26-768x791.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-26-425x437.png 425w\" sizes=\"auto, (max-width: 784px) 100vw, 784px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ik gok maar even op de combinatie van de pinnen PC1 en PC2, wat overeenkomt met D3 en D4 in de Arduino-code. Eerste testje hieronder.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/\/ CH32V003 testprogramma aansturen OLED-scherm\n\/\/\n\n#include &lt;Wire.h&gt;\n#include &quot;SSD1306Ascii.h&quot;\n#include &quot;SSD1306AsciiWire.h&quot;\n\n#define I2C_ADDRESS 0x3C\nSSD1306AsciiWire oled;\n\nvoid setup() {\n  Wire.begin(3,4);\t\t\t\t\t\t\t\/\/ SDA = PC1 = D3, SCL = PC2 = D4\n  oled.begin(&amp;Adafruit128x64, I2C_ADDRESS);\n  oled.set400kHz();  \n  oled.setFont(Adafruit5x7);  \n  oled.clear(); \n\n  oled.print(&quot;CH32V003_OLED_test1.ino&quot;);\n  delay(2000);\n  oled.clear();\n}\n\nvoid loop() {\n  oled.print(&quot;Test aan&quot;);\n  delay(2000);\n  oled.clear();\n\n  oled.print(&quot;Test uit&quot;);\n  delay(2000);  \n  oled.clear();\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Geen beeld! Maar het blijkt eenvoudiger dan gedacht: geen pinnummers opgeven bij Wire.begin, dus &#8230;<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nWire.begin()\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">&#8230; en dan werkt het gewoon! Blijkbaar zijn PC1 en PC2 standaard al gedefinieerd en moet je het niet nogmaals aangeven.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Testen van de ADC<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Vervolgens verder met de ADC. Zoals hierboven al gezegd had ik al ergens gezien dat de ADC niet vanzelf zal gaan werken. Onderstaande programma bewees dat!<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/\/ CH32V003 testprogramma ADC\n\/\/\n\n#include &lt;Wire.h&gt;\n#include &quot;SSD1306Ascii.h&quot;\n#include &quot;SSD1306AsciiWire.h&quot;\n\nint analogPin = A2;\n\/\/#define analogPin PIN_A2         \/\/Dit kan ook\nint analogValue;\n\n#define I2C_ADDRESS 0x3C\nSSD1306AsciiWire oled;\n\nvoid setup() {\n  Wire.begin();\n  oled.begin(&amp;Adafruit128x64, I2C_ADDRESS);\n  oled.set400kHz();  \n  oled.setFont(Adafruit5x7);  \n  oled.clear(); \n\n  oled.print(&quot;CH32V003_ADC_test1.ino&quot;);\n  delay(2000);\n  oled.clear();\n}\n\nvoid loop() {\n  analogValue = analogRead(analogPin);\n\n  oled.print(&quot;ADC-waarde is &quot;);\n  oled.print(analogValue); \n  delay(1000); \n  oled.clear();\n}\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Want een 1K potmeter aangesloten op A0 (PA2) gaf alleen maar &#8220;0&#8221; als waarde. Maar ook op A1, A2, en A4 het zelfde resultaat. Hoe zet je die ADC aan?? Beetje rondzoeken en dan blijkt dat je de ADC kunt &#8220;aanzetten&#8221; door in het bestand &#8220;<em><strong>variant_CH32V003F4.h<\/strong><\/em>&#8221; van de CH332-library voor de regel:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n\/\/#define ADC_MODULE_ENABLE\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">de dubbele slashes weg te halen. Ik vond het bestand (onder Windows 11) hier:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/05\/image-27.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"39\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/05\/image-27-1024x39.png\" alt=\"\" class=\"wp-image-4557\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-27-1024x39.png 1024w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-27-300x11.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-27-768x29.png 768w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-27-1536x58.png 1536w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-27-425x16.png 425w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-27.png 1539w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: arduino; title: ; notranslate\" title=\"\">\n\/* ENABLE Peripherals *\/\n\/\/#define                         ADC_MODULE_ENABLED\n#define                         UART_MODULE_ENABLED\n\/\/ #define                         SPI_MODULE_ENABLED\n#define                         I2C_MODULE_ENABLED\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">De UART en I2C stonden al enabled, de SPI en de ADC stonden standaard dus uit. Aangezien het document &#8220;<em><strong>variant_CH32V003F4.h<\/strong><\/em>&#8221; heet en werkt voor de CH32v003F4P6 vraag ik me af of het ook zal werken voor de chippes die onderweg zijn: de J4M6 en de A4M6. We zullen het merken!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Waar je wel tegenaan loopt is de beperkte hoeveelheid geheugen. Bovenstaand programma levert voor analogValue een waarde van 0 (bij 0V) tot 1023 (bij 3,3V). Om in het scherm het voltage te printen moet de volgende berekening gemaakt worden: <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Voltage = (3,3 : 1023) x analogValue<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>3,3 is het maximale voltage<\/li>\n\n\n\n<li>1023 is de maximale waarde van analogValue<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Bijvoorbeeld: wanneer analogValue = 564, dan is het voltage 1,82 Volt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">En om dat te kunnen doen moet je met floats werken en dat kost veel geheugen: te veel voor de CH32V003! Daardoor dus foutmeldingen tijdens de compilatie. Aangezien de andere varianten net zoveel geheugen hebben, zal het daarmee evenmin werken en dat is natuurlijk jammer.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Er valt nog wat geheugen vrij te spelen door UART_MODULE_ENABLED&#8221; uit te schakelen. Bovenstaande programma verbruikt ca. 10% minder flash geheugen (12216 bytes, i.p.v. 13804 bytes) en 6% minder SRAM (624 bytes i.p.v. 748 bytes).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Met UART aangezet:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Sketch uses 12216 bytes (74%) of program storage space. Maximum is 16384 bytes.<br>Global variables use 624 bytes (30%) of dynamic memory, leaving 1424 bytes for local variables. Maximum is 2048 bytes.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Met UART uitgeschakeld:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Sketch uses 13804 bytes (84%) of program storage space. Maximum is 16384 bytes.<br>Global variables use 748 bytes (36%) of dynamic memory, leaving 1300 bytes for local variables. Maximum is 2048 bytes.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Tegen deze beperking ben ik eigenlijk tot nog toe met de Arduino en de ESP32 C3 (heeft een overmaat aan geheugen!) niet aangelopen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/05\/image-28.png\"><img loading=\"lazy\" decoding=\"async\" width=\"558\" height=\"123\" src=\"https:\/\/www.rommelkist.nl\/elec\/wp-content\/uploads\/2025\/05\/image-28.png\" alt=\"\" class=\"wp-image-4563\" style=\"width:500px\" srcset=\"https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-28.png 558w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-28-300x66.png 300w, https:\/\/www.rommelkist.nl\/wp-content\/uploads\/2025\/05\/image-28-425x94.png 425w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><\/a><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Met deze beperking zal ik rekening moeten houden bij de keuze welke processor in te zetten.<br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vooruitlopend op de komst van de losse CH32v003 chippies eerst nog een paar testjes met het programmeren van het &#8220;ontwikkelbordje&#8221; (de F4P6 variant). De pinnen 3V3, Gnd en SWDIO van de WCH-LinkE verbonden met de pinheader op de CH32v003, respectievelijk VDD, Gnd en SWD en het programmeren vanuit de Arduino IDE verloopt als een trein! Testen van I2C Ik had ergens gelezen dat je de analoog-digitaal-converter (ADC) pas kon gebruiken nadat je &#8216;m geactiveerd hebt. Standaard staat ie blijkbaar uitgeschakeld. Ik vroeg me af of dat dan ook geldt voor I2C. Volgens de datasheet zit er maar \u00e9\u00e9n II2C bus op.<span class=\"more-link\"><a href=\"https:\/\/www.rommelkist.nl\/elec\/elektronica\/ch32v003-testen\/\">Read More &rarr;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_crdt_document":"","footnotes":""},"categories":[3],"tags":[182,30],"class_list":["entry","author-admin","post-4543","post","type-post","status-publish","format-standard","category-elektronica","tag-ch32v003","tag-oled"],"_links":{"self":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/4543","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/comments?post=4543"}],"version-history":[{"count":0,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/posts\/4543\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/media?parent=4543"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/categories?post=4543"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.rommelkist.nl\/elec\/wp-json\/wp\/v2\/tags?post=4543"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}