<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.element14.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Raspberry Pi</title><link>https://community.element14.com/products/raspberry-pi/</link><description>Join the Raspberry Pi Community, learn about the Pi 5 and the family of the single board computer</description><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/detecting-objects-with-the-raspberry-pi-ai-camera-and-a-raspberry-pi-5----version-1?CommentId=706fad62-871b-4b24-900a-37a89acdcea8</link><pubDate>Sat, 07 Nov 2026 19:13:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:706fad62-871b-4b24-900a-37a89acdcea8</guid><dc:creator>DAB</dc:creator><description>Nice start. I look forward to seeing the images and analysis results.</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/detecting-objects-with-the-raspberry-pi-ai-camera-and-a-raspberry-pi-5----version-1?CommentId=68bedd47-6dea-442c-9b99-32a8dca9a879</link><pubDate>Sat, 07 Nov 2026 16:15:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:68bedd47-6dea-442c-9b99-32a8dca9a879</guid><dc:creator>Qbit</dc:creator><description>Cool Project RobinB13 !</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/detecting-objects-with-the-raspberry-pi-ai-camera-and-a-raspberry-pi-5----version-1?CommentId=44a51ac4-5f70-4f98-81c6-6199b406ef5c</link><pubDate>Sat, 07 Nov 2026 14:10:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:44a51ac4-5f70-4f98-81c6-6199b406ef5c</guid><dc:creator>colporteur</dc:creator><description>Nice project.</description></item><item><title>Blog Post: Detecting Objects with the RASPBERRY Pi AI Camera and a RASPBERRY Pi 5 -- Part 1</title><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/detecting-objects-with-the-raspberry-pi-ai-camera-and-a-raspberry-pi-5----version-1</link><pubDate>Sat, 07 Nov 2026 11:26:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:33b7e721-8d43-412d-9f27-2538f8b975ef</guid><dc:creator>RobinB13</dc:creator><description>As an intern for the element14 community, I carried out this project as part of the tasks I had during my internship. The idea is simple: use a Raspberry Pi 5 and a Raspberry Pi AI Camera to recognize everyday objects, and build the project in four steps so that each one adds a single new feature to the previous one. Here is the progression. First, version 1: I set up the camera and print the objects it detects in the terminal. Second, version 2: I take a picture and save it, together with a copy annotated with the detected objects. Third, version 3: I run detection on a live video stream. Fourth, version 4: I&amp;#39;ll try to make the video stream reachable from another PC. What Hardware and Software I used To get this project going, I used a Raspberry Pi 5 8GB (RAM is optional but try to get one &amp;gt;= 8GB, even with nowadays RAM price inflation &amp;gt;:(...) with its dedicated Active Cooler , and a Raspberry Pi AI Camera , with its sensor called IMX500. What makes this camera special is that it runs its neural network (the model that recognize objects) on the camera itself, not on the Pi&amp;#39;s processor, it receives only the images and the results. You&amp;#39;ll also need some storage, like a microSD card not less than 32GB, to carry out the OS and potential pictures and videos taken (if you get to this step ). To power up all this, the official PSU from Raspberry Pi works perfectly, and to avoid using your beloved monitor and unplug it from your beautiful PC setup, a Touch Display 2 7&amp;quot; will do the job wonderfully. The model used in every version is the file /usr/share/imx500-models/imx500_network_ssd_mobilenetv2_fpnlite_320x320_pp.rpk . From its name, it is an SSD MobileNetV2 FPNLite model with a 320x320 input. The .rpk extension is the packaged format loaded onto the camera ==&amp;gt; I didn’t just pull that out of the hat; you&amp;#39;ll see how I did it in a minute! From the import lines of my files, the Python libraries involved are picamera2 (camera control), libcamera, numpy, Pillow (image saving and drawing, step2) and openCV (cv2, live display, step3). The live window of step3 also needs a desktop session on the Pi. Version 1 - Setup the environment and the camera Goal: Check that the camera works and that it can detect objects, printed as text in the terminal **You can read through that link on how to configure your Raspberry Pi** First of all: it is needed to ask the Pi if any updates are available, and install everything we&amp;#39;ll need onto it: the different python packages mentioned earlier, as well as the imx500 resources. Once those have been installed, a well deserved REBOOT is needed for our Pi. Then to keep it in the momentum and not let it cool down, lets see how we can get the model quoted higher: First, to see if the AI Camera is detected, the command rpicam-hello --list-camera is perfectly well designed, and we search through the imx500 directory(tab key will be your best friend): And we can see at the end of the list our model! Lovely! Then we need to load the model into the camera, start the video stream and decode the results. A python source file is in charge of that, which I named... Detector.py. Not very original I reckon... :P It has a function named read(), that returns one video frame and a list of detections: A detection is a small Detection object holding a label, a confidence conf and a bounding box . The confidence is the model&amp;#39;s certainty, from 0 to 1. Detections with a score at or below the threshold are ignored. The test script hello_detect.py then simply calls read() from Detector.py in a loop and prints in the terminal what it finds using the Objects.txt file (labels list): The defaults are a threshold of 0.55 and a duration of 15 seconds, both adjustable with --threshold and --duration in the main python file named hello_detect.py Now, lets try to launch the main python file to see if anything works: And... it works! As you can see at the end of the output, the camera detected a person standing in front of it. Was it me? Maybe... :P As mentioned earlier, I showcase the arguments I created in hello_detect.py by using --duration, setting the time capture for this demo at 3 seconds. Difficulty encountered / that may happen Those are basics but really time wasting and frustrating: Camera not detected? Take a look at your connections to the Pi (: One that really got me on my nerves is microSD card being on read-only after a re-write. I started on a different Pi, first OS write has been successful on the first try. Once I got the one Pi that I ordered, I told myself that I&amp;#39;ll start from the beginning again! Well... I don&amp;#39;t know how, but when I wanted to re-write on the SAME microSD card, I couldn&amp;#39;t, which took me fairly one hour to understand why... Conclusion And that&amp;#39;s it for the version 1 of this project! I&amp;#39;ve set up the AI Camera, loaded an object-detection model, and confirmed that detections appear in the terminal. It&amp;#39;s a simple first step, but it lays the foundations for the version 2: Taking a picture and saving an annotated copy with the detected objects marked on it .</description><category domain="https://community.element14.com/products/raspberry-pi/tags/raspberry%2bpi">raspberry pi</category><category domain="https://community.element14.com/products/raspberry-pi/tags/ai%2bcamera">ai camera</category></item><item><title>Forum Post: RE: RPi5 - PCN 65, revision 7 PCB</title><link>https://community.element14.com/products/raspberry-pi/f/forum/57410/rpi5---pcn-65-revision-7-pcb/238904</link><pubDate>Thu, 05 Nov 2026 14:33:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:5a86fbbe-5d12-4768-b8b1-cba11ccadc09</guid><dc:creator>spinden</dc:creator><description>wonder if this would allow for getting lower density ram times two to allow for lower overall cost</description></item><item><title>File: Raspberry Pi 5 PCN 65 - Revision 7 PCB</title><link>https://community.element14.com/products/raspberry-pi/m/files/151979</link><pubDate>Wed, 04 Nov 2026 16:26:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:79d2fd5c-3dff-4a8f-8077-90decf9bc555</guid><dc:creator>cstanton</dc:creator><description>Mirror of https://pip-assets.raspberrypi.com/categories/1129-pcn/documents/RP-010685-PC-2-PCN%2065_%20Change%20of%20Raspberry%20Pi%205%20PCB%20to%20Revision%207.pdf</description><category domain="https://community.element14.com/products/raspberry-pi/tags/raspberry%2bpi%2b5">raspberry pi 5</category><category domain="https://community.element14.com/products/raspberry-pi/tags/revision%2b7%2bpcb">revision 7 pcb</category><category domain="https://community.element14.com/products/raspberry-pi/tags/pcn%2b65">pcn 65</category></item><item><title>Forum Post: RPi5 - PCN 65, revision 7 PCB</title><link>https://community.element14.com/products/raspberry-pi/f/forum/57410/rpi5---pcn-65-revision-7-pcb</link><pubDate>Wed, 04 Nov 2026 15:27:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:ea1c6b25-38ee-4422-99c4-32dd4a04e801</guid><dc:creator>geralds</dc:creator><description>Hi all, its just an info: the RPi 5 PCB comes in revision 7: Raspberry Pi 5 PCN 65 - Revision 7 PCB best regards Gerald</description><category domain="https://community.element14.com/products/raspberry-pi/tags/raspberry%2bpi">raspberry pi</category></item><item><title>File: Pico C++ PID controller with ARM DSP++ fixed floating point - low Jitter</title><link>https://community.element14.com/products/raspberry-pi/m/managed-videos/151956</link><pubDate>Mon, 26 Oct 2026 19:14:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:15ddd3f0-97f3-4787-8733-d4e2a20bc7f6</guid><dc:creator>Jan Cumps</dc:creator><description>Templated PID controller, where you can select the underlying data type (and precision, and CPU burden) for element14 blog: https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-low-jitter-pid-controller</description><category domain="https://community.element14.com/products/raspberry-pi/tags/raspberry">raspberry</category><category domain="https://community.element14.com/products/raspberry-pi/tags/pico">pico</category><category domain="https://community.element14.com/products/raspberry-pi/tags/pid">pid</category><category domain="https://community.element14.com/products/raspberry-pi/tags/arm">arm</category><category domain="https://community.element14.com/products/raspberry-pi/tags/c_2B002B00_">c++</category></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-low-jitter-pid-controller?CommentId=868f1e74-f671-4329-9c7d-55ba8fe6ae93</link><pubDate>Mon, 26 Oct 2026 10:18:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:868f1e74-f671-4329-9c7d-55ba8fe6ae93</guid><dc:creator>Jan Cumps</dc:creator><description>When I use a different fixed point library, https://github.com/johnmcfarlane/cnl , I get a faster loop: 496 ns . So it pays off to check out the options. Because fmp and cnl libs both support C++ standard numeric behaviour, exchanging is easy. adapt make file to retrieve the code. use different include adapt your data type declaration: fmp: (640 ns) #include &amp;quot;fixed.hpp&amp;quot; using fp_t = fpm::fixed ; constexpr fp_t operator&amp;quot;&amp;quot;_fp(long double v) noexcept { return fp_t(v); } cnl: (496 ns) #include &amp;quot;cnl/all.h&amp;quot; using fp_t = cnl::scaled_integer &amp;gt;; constexpr fp_t operator&amp;quot;&amp;quot;_fp(long double v) noexcept { return static_cast (v); } If you also provide conversion functions for the library you use, you likely don&amp;#39;t have to change any other code, when switching out libraries template using underlying_type_t = typename std::remove_reference ()))&amp;gt;::type; template constexpr auto to_12bit_uint32_t(T&amp;amp;&amp;amp; val) -&amp;gt; underlying_type_t { return static_cast (cnl::unwrap(std::forward (val)) &amp;gt;&amp;gt; 3); } constexpr auto from_12bit_uint16_t = [](auto raw_bits) { return cnl::from_rep {}(static_cast (raw_bits &amp;lt;&amp;lt; 3)); };</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-low-jitter-pid-controller?CommentId=e8e33958-7a0e-497f-9f50-48a49efba55b</link><pubDate>Sun, 25 Oct 2026 21:59:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:e8e33958-7a0e-497f-9f50-48a49efba55b</guid><dc:creator>Jan Cumps</dc:creator><description>RISC update: So I found a fixed floating point library that works with RISK: https://github.com/MikeLankamp/fpm/blob/master/include/fpm/fixed.hpp Now that I can make the RISC CPU do the calculation in fixed floating point , without any float calculations in the loop, the RP2350 runs a PID loop at 640 ns . That&amp;#39;s 200 ns slower than the ARM core, but 500 ns faster than RISC with a float.</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-low-jitter-pid-controller?CommentId=302b7aea-868e-4cf1-b2b6-6b35d9a112e3</link><pubDate>Sun, 25 Oct 2026 19:09:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:302b7aea-868e-4cf1-b2b6-6b35d9a112e3</guid><dc:creator>Jan Cumps</dc:creator><description>I tried this same example, on the RISC-V cores of the RP2350 The comparison is unfair at the moment because: I don&amp;#39;t have a fixed point library for the RISC family (yet), so I have to use floating point math the RISC cores don&amp;#39;t have an FPU, They can&amp;#39;t use the ARM FPU, so have to do all floating point math in C on the CPU, that doesn&amp;#39;t have floating point instructions. The PID loop time is 11 &amp;#181;s. I&amp;#39;ll try to find q fixed floating point lib for the RISC, either a Q15 or Q31 version. The results should be fairly similar to ARM then.</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/raspberrypi_projects/b/blog/posts/solving-error-unknown-flash-device-an-openocd-upgrade-for-pi-pico-xiao-and-other-rp2040-boards?CommentId=c26fdc88-5c45-4bef-b1ec-17b64a094efe</link><pubDate>Sun, 25 Oct 2026 15:32:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:c26fdc88-5c45-4bef-b1ec-17b64a094efe</guid><dc:creator>shabaz</dc:creator><description>Finally! : ) Great, I&amp;#39;ll add a note at the top of the blog post to indicate that this is now historical.</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/raspberrypi_projects/b/blog/posts/solving-error-unknown-flash-device-an-openocd-upgrade-for-pi-pico-xiao-and-other-rp2040-boards?CommentId=819f0e39-57ea-48b7-bd00-e28e28ddacc3</link><pubDate>Sun, 25 Oct 2026 15:28:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:819f0e39-57ea-48b7-bd00-e28e28ddacc3</guid><dc:creator>Jan Cumps</dc:creator><description>Update: solved. the Open OCD installed by the Raspberry Pi Pico Project extension for VS Code doesn&amp;#39;t need patching anymore.</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-low-jitter-pid-controller?CommentId=16e7b4d1-6e80-4e78-8648-d34ee8ef2b37</link><pubDate>Sun, 25 Oct 2026 11:25:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:16e7b4d1-6e80-4e78-8648-d34ee8ef2b37</guid><dc:creator>Jan Cumps</dc:creator><description>Using DMA to control PWM, instead of calling the PWM APIs, reduced total loop to 460 ns . On a Pico 1 / RP2040 , running at 125 MHz, the loop takes 1140 ns .</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-low-jitter-pid-controller?CommentId=d779295a-fdbd-485e-a619-b609d7051b77</link><pubDate>Sat, 24 Oct 2026 15:22:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:d779295a-fdbd-485e-a619-b609d7051b77</guid><dc:creator>Jan Cumps</dc:creator><description>correction, can&amp;#39;t update: typo: That&amp;#39;s a run each 273 m s. should be: That&amp;#39;s a run each 273 &amp;#181; s. the percentage is correct.</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-low-jitter-pid-controller?CommentId=eab8f2fd-cd83-4293-bb22-7db64b1a0e92</link><pubDate>Sat, 24 Oct 2026 14:51:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:eab8f2fd-cd83-4293-bb22-7db64b1a0e92</guid><dc:creator>Jan Cumps</dc:creator><description>&amp;gt; interesting how you ran the function from RAM for lower latency AI told me to do that! Crazy times. Also, I managed to nip another 100 ns from the loop, by using DMA for the PWM. Instead of calling the PWM pwm_set_chan_level() API, I write the requested duty cycle to a variable, and flag DMA that data is ready. When the PWM starts a new period, It gets that new duty cycle value from DMA. The original loop from previous post, where I do Sample, PID and PWM, was 2.8 &amp;#181;s . Using an ADC timer with trigger, reduced the loop (and CPU time) to 560 ns . Because it doesn&amp;#39;t have to wait for the sample. Using DMA to control PWM, instead of calling the PWM APIs, reduced total loop to 460 ns . Because the PWM API takes more time than storing data in a variable and notifying DMA. All timings with compiler optimisation set to max. Again, I got suggestion from AI on how to use that DMA approach. For an embedded design, this may be of great value. Each time I request the Pico to perform a control loop, the CPU spends 460 ns. To do that. Virtually nothing. All the rest is done without CPU involvement. In this example, I have a 3.663 kHz clock for the PID loop. That&amp;#39;s a run each 273 ms. The PID takes0.17% of the CPU. The rest is free. If you have a temperature control, where you can use PID loop frequencies of 1 Hz or lower, the whole control loop becomes a droplet in the sea of clockticks.</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-low-jitter-pid-controller?CommentId=60b86f7b-f892-4af1-96f1-3e6276060863</link><pubDate>Sat, 24 Oct 2026 14:43:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:60b86f7b-f892-4af1-96f1-3e6276060863</guid><dc:creator>shabaz</dc:creator><description>Hi Jan, Neat project. This seems like a really clean way to drive the PID updates, all clocked from the ADC rate! Also, interesting how you ran the function from RAM for lower latency. I didn&amp;#39;t know that was possible.</description></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-pid-controller-without-floating-point-using-dsp-c-fixed-point-api?CommentId=a49dc8af-2598-4b69-997a-988d4fd072cf</link><pubDate>Sat, 24 Oct 2026 11:39:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:a49dc8af-2598-4b69-997a-988d4fd072cf</guid><dc:creator>Jan Cumps</dc:creator><description>Here is a design based on timer based ADC sample: Pico low jitter PID controller</description></item><item><title>Blog Post: Pico low jitter PID controller</title><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-low-jitter-pid-controller</link><pubDate>Sat, 24 Oct 2026 11:35:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:36643f32-3cec-4e14-b156-2c94a2368691</guid><dc:creator>Jan Cumps</dc:creator><description>In my blog Pico PID controller without floating point using DSP C++ fixed point API , I created a low footprint Pico PID example. In this post, I reduce jitter by making sample clock steady, and let that drive the PID loop execution. I used Google AI in this blog post to help explain jitter aspects, and help to set up ADC timer and trigger code. All narrative is written by me, except where explicitly stated. In a PID control loop, an inconsistent sample time can introduce jitter in the regulation. By letting a clock drive the exact ADC timing, the sample cadence becomes deterministic. This content is AI generated by Google Gemini: PID loop scheduling vs ADC sample scheduling: impact on firmware In the code of the previous post, a Pico timer generated an interrupt. That interrupt was the driver of executing a full PID loop: sample the output let PID calculate ideal PWM duty cycle, to have output match desired output set the PWM In the deterministic sample design, there is no longer a clock that makes the PID tick. The ADC clock ticks the sample time, ADC ready interrupt pushes the regulation ADC clock initiates sample ADC raises interrupt when sample done When the interrupt happens: let PID calculate ideal PWM duty cycle, to have output match desired output set the PWM (see end of this post: I replaced the PWM API call by a CPU-less DMA approach). Real time startup behaviour, set to regulate output to 50%: slomo 4X: https://youtu.be/zgpOERTVS_A Source Code #include &amp;quot;fixed_point.hpp&amp;quot; #include &amp;quot;hardware/adc.h&amp;quot; #include &amp;quot;hardware/gpio.h&amp;quot; #include &amp;quot;hardware/pwm.h&amp;quot; #include &amp;quot;hardware/irq.h&amp;quot; #include &amp;quot;hardware/clocks.h&amp;quot; import pid; using namespace arm_cmsis_dsp; using fp_t = Q15; constexpr Q15 operator&amp;quot;&amp;quot;_fp(long double val) { return operator&amp;quot;&amp;quot;_q15(val); } using pid_controller_t = pid::pid ; // ADC and PWM declarations // Pico SDK types are used here: const uint ADC_PIN = 26; const uint PWM_PIN = 0; const uint PWM_CHANNEL = 0; // frequency of PWM will be 125 MHz (on Pico1, 150 on Pico2) / (PWM_MAX * CKDIV) // i.e. about 30.5 kHz for PWM_MAX = 4095 const uint PWM_MAX = 4095; const float CKDIV = 1; // set CKDIV to 1 for approx 30.5 / 36.62 kHz PWM frequency if PWM_MAX is 4095 const uint32_t pwm_frequency = clock_get_hz(clk_sys) / (PWM_MAX * CKDIV); const uint32_t adc_frequency = pwm_frequency / 10; // 3.663 kHze PID loop rate, 1/10 of PWM frequency const float adc_clock_div = clock_get_hz(clk_adc) / adc_frequency; // PID variables and objects fp_t feedback; constinit fp_t target_command = 0.66_fp; // Example target command in fixed point per-unit (0.0 to 1.0) constinit fp_t output_pid = 0.0_fp; // Initialize output_pid to 0.0 in fixed point per-unit pid_controller_t controller(0.1_fp, 0.01_fp, 0.05_fp); // Example PID gains for voltage control // GPIO pin, to measure duration of a PID loop const uint GPIO_PIN = 22; // happens to be the Pico Eurocard LED void __not_in_flash_func(adc_pid_handler)() { gpio_xor_mask(1u ((adc_fifo_get()) (output_pid.v &amp;gt;&amp;gt; 3)); // set PWM value gpio_xor_mask(1u ((adc_fifo_get()) (controller.compute(target_command, feedback).v &amp;gt;&amp;gt; 3); // set PWM value dma_channel_set_trans_count(dma_chan, 1, true); The samples happen clock steady every 276 &amp;#181;s. Measurements done on a Pico 2 / RP2350 ARM, at the default 150 MHz. I used a GPIO pin to measure both times, toggled in the ADC interrupt handler. It&amp;#39;s not an exact representation of when the sample happens, and when the PID is finished. But I think this is a reasonable way to validate timings. references: Development kit: Pi Pico Eurocard Development Board Previous Pico PID blog: Pico PID controller without floating point using DSP C++ fixed point API PID class GitHub repository VS Code project - with DMA. Configured for Pico 2 / RP3250 ARM . Check the CMake section above to configure for an RP2040. The non-dma source is available as main.cpp.pidtimer : community.element14.com/.../pico_5F00_pid_5F00_template_5F00_dma_5F00_20261024-_2800_2_2900_.zip VS Code project - with DMA. Configured for Pico 2 / RP3250 RISC community.element14.com/.../pico_5F00_pid_5F00_template_5F00_20261025_5F00_riscv.zip . Thank you for reading</description><category domain="https://community.element14.com/products/raspberry-pi/tags/pico2">pico2</category><category domain="https://community.element14.com/products/raspberry-pi/tags/pico">pico</category><category domain="https://community.element14.com/products/raspberry-pi/tags/c_2B002B00_26">c++26</category><category domain="https://community.element14.com/products/raspberry-pi/tags/pico_5F00_eurocard">pico_eurocard</category><category domain="https://community.element14.com/products/raspberry-pi/tags/pico%2bc%2bsdk">pico c sdk</category><category domain="https://community.element14.com/products/raspberry-pi/tags/pid_5F00_controller">pid_controller</category><category domain="https://community.element14.com/products/raspberry-pi/tags/c_2B002B00_">c++</category></item><item><title /><link>https://community.element14.com/products/raspberry-pi/b/blog/posts/pico-pid-controller-without-floating-point-using-dsp-c-fixed-point-api?CommentId=b91dfced-ff24-4a00-9857-aa2970d53335</link><pubDate>Sat, 24 Oct 2026 08:44:00 GMT</pubDate><guid isPermaLink="false">93d5dcb4-84c2-446f-b2cb-99731719e767:b91dfced-ff24-4a00-9857-aa2970d53335</guid><dc:creator>Jan Cumps</dc:creator><description>In this test code, a timer makes the PID loop run, and the loop performs ADC. A better approach is to time the ADC sampling, and let an ADC interrupt kick off the PID as soon as the sample is in. On a Pico, you&amp;#39;d make the ADC run timed, in the background by: adc_set_clkdiv( ); adc_run( ); And you &amp;#39;d kick off the PID cycle by setting up an &amp;quot;ADC finished&amp;quot; interrupt: adc_fifo_setup(); adc_fifo_drain(); irq_set_exclusive_handler(); irq_set_enabled(); adc_irq_set_enabled() And then in the ADC handler, you retrieve the FIFO sample and run PID. uint16_t sample = adc_fifo_get(); // run the pid The main loop () is not involved.</description></item></channel></rss>