<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[PPS module and touchscreen]]></title><description><![CDATA[<p dir="auto">I try to use a PPS 13.2 module with a CoreS3-SE and want to adjust its output voltage via touchscreen. I use C++ in platformIO. I can get the PPS to work properly and I can get the touchscreen to work, but I can't do both together. I tried many different ways. For reference I tried this simplified code:</p>
<pre><code>#include &lt;M5Unified.h&gt;
#include "M5ModulePPS.h"

M5GFX display;
M5ModulePPS pps;

void setup() {
  M5.begin();
  // Button zeichnen
  M5.Display.fillScreen(TFT_BLACK);
  M5.Display.fillRoundRect(60, 80, 200, 120, 15, TFT_BLUE);


  while (!pps.begin(&amp;Wire, M5.In_I2C.getSDA(), M5.In_I2C.getSCL(), MODULE_POWER_ADDR, 1000000U));

  pps.setOutputVoltage(1.0);
  pps.setOutputCurrent(0.5);
  pps.setPowerEnable(true);
}

void loop() {
  uint32_t ms = millis();
  static uint32_t last_ms = ms;
  static float OutputVoltage = 1.0;

  M5.update();
  if (M5.Touch.getCount() &gt; 0) {
    auto t = M5.Touch.getDetail();
    if (t.x&gt;=60 &amp;&amp; t.x&lt;=260 &amp;&amp; t.y&gt;=80 &amp;&amp; t.y&lt;=200) {
      M5.Display.fillScreen(TFT_BLACK);
      M5.Display.fillRoundRect(60, 80, 200, 120, 15, TFT_RED);
      pps.setOutputVoltage(0);
    }
  }
  if(ms-last_ms&gt;1000)
  {
    OutputVoltage += 0.1;
    pps.setOutputVoltage(OutputVoltage);
    last_ms = ms;
  }
}
</code></pre>
<p dir="auto">The touch works (although laggy), but the PPS doesn't update its output voltage. If I remove the line M5.update(); the PPS works but obviously the touch doesn't. The PPS program in the M5Burner works (although also laggy) so it should be possible somehow.</p>
]]></description><link>https://community.m5stack.com/topic/7915/pps-module-and-touchscreen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 13 May 2026 04:15:45 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/7915.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Nov 2025 09:30:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to PPS module and touchscreen on Tue, 02 Dec 2025 07:02:14 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/felmue" aria-label="Profile: felmue">@<bdi>felmue</bdi></a> That did it! Thanks a lot!</p>
]]></description><link>https://community.m5stack.com/post/30261</link><guid isPermaLink="true">https://community.m5stack.com/post/30261</guid><dc:creator><![CDATA[BruderTom]]></dc:creator><pubDate>Tue, 02 Dec 2025 07:02:14 GMT</pubDate></item><item><title><![CDATA[Reply to PPS module and touchscreen on Thu, 27 Nov 2025 21:00:56 GMT]]></title><description><![CDATA[<p dir="auto">Hello <a class="plugin-mentions-user plugin-mentions-a" href="/user/brudertom" aria-label="Profile: BruderTom">@<bdi>BruderTom</bdi></a></p>
<p dir="auto">the issue seems to be an I2C conflict. Internal I2C already uses Wire<strong>1</strong>; the PPS code initializes a second I2C instance (Wire) with the same GPIOs for SDA and SCL. The result is: both I2C instances (Wire and Wire<strong>1</strong>) fight against each other.</p>
<p dir="auto">Try replacing below line so the correct Wire<strong>1</strong> instance is used for PPS as well:</p>
<pre><code>//  while (!pps.begin(&amp;Wire, M5.In_I2C.getSDA(), M5.In_I2C.getSCL(), MODULE_POWER_ADDR, 1000000U));
  while (!pps.begin((M5.In_I2C.getPort() == I2C_NUM_1) ? &amp;Wire1 : &amp;Wire, M5.In_I2C.getSDA(), M5.In_I2C.getSCL(), MODULE_POWER_ADDR, 1000000U));
</code></pre>
<p dir="auto">Thanks<br />
Felix</p>
]]></description><link>https://community.m5stack.com/post/30247</link><guid isPermaLink="true">https://community.m5stack.com/post/30247</guid><dc:creator><![CDATA[felmue]]></dc:creator><pubDate>Thu, 27 Nov 2025 21:00:56 GMT</pubDate></item></channel></rss>