<?xml version="1.0" encoding="UTF-8"?>        <rss version="2.0"
             xmlns:atom="http://www.w3.org/2005/Atom"
             xmlns:dc="http://purl.org/dc/elements/1.1/"
             xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
             xmlns:admin="http://webns.net/mvcb/"
             xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
             xmlns:content="http://purl.org/rss/1.0/modules/content/">
        <channel>
            <title>
									Pico - buzzing a piezo - Raspberry Pi				            </title>
            <link>https://forum.dronebotworkshop.com/raspberry-pi/pico-buzzing-a-piezo/</link>
            <description>Discussion board for Robotics, Arduino, Raspberry Pi and other DIY electronics and modules. Join us today!</description>
            <language>en-US</language>
            <lastBuildDate>Mon, 08 Jun 2026 20:28:18 +0000</lastBuildDate>
            <generator>wpForo</generator>
            <ttl>60</ttl>
							                    <item>
                        <title>Pico - buzzing a piezo</title>
                        <link>https://forum.dronebotworkshop.com/raspberry-pi/pico-buzzing-a-piezo/#post-38988</link>
                        <pubDate>Wed, 22 Mar 2023 17:24:41 +0000</pubDate>
                        <description><![CDATA[I was testing a new main board today and I thought that I’d share the bit of code I was using to make sure my soldering hadn’t fried the piezo buzzer.
 Tom
 
/*
 * Trying to play some mu...]]></description>
                        <content:encoded><![CDATA[<p>I was testing a new main board today and I thought that I’d share the bit of code I was using to make sure my soldering hadn’t fried the piezo buzzer.</p>
<p> Tom</p>
<p> </p>
<pre contenteditable="false"><span style="color: #95a5a6">/*</span>
<span style="color: #95a5a6"> * Trying to play some musical frequencies out of a piezo buzzer</span>
<span style="color: #95a5a6"> *   I tried multiple duty cycles at the various frequencies</span>
<span style="color: #95a5a6"> *   and the volume is too low.  Plastic gear motor noise drowns it out.</span>
<span style="color: #95a5a6"> *</span>
<span style="color: #95a5a6"> *  wrap = frequency and channel level = duty_cycle</span>
<span style="color: #95a5a6"> *</span>
<span style="color: #95a5a6">*/</span>
<span style="color: #5e6d03">#include</span> <span style="color: #434f54">&lt;</span><span style="color: #000000">stdio</span><span style="color: #434f54">.</span><span style="color: #000000">h</span><span style="color: #434f54">&gt;</span>
<span style="color: #5e6d03">#include</span> <span style="color: #005c5f">"pico/stdlib.h"</span>
<span style="color: #5e6d03">#include</span> <span style="color: #005c5f">"hardware/pwm.h"</span>

<span style="color: #5e6d03">#define</span> <span style="color: #000000">BUZZER_PWM</span>  <span style="color: #000000">5</span>   <span style="color: #434f54">// GPIO pin number for piezo buzzer connection</span>

<span style="color: #434f54">// these tones are piercing.... ouch.  Even with a smaller set the B7, C#8 and D8 are loud and piercing.</span>
<span style="color: #00979c">uint32_t</span> <span style="color: #000000">toneFreq</span><span style="color: #000000"></span> <span style="color: #434f54">=</span> <span style="color: #000000">{</span><span style="color: #000000">1175</span><span style="color: #434f54">,</span><span style="color: #000000">1318</span><span style="color: #434f54">,</span><span style="color: #000000">1480</span><span style="color: #434f54">,</span><span style="color: #000000">1568</span><span style="color: #434f54">,</span><span style="color: #000000">1760</span><span style="color: #434f54">,</span><span style="color: #000000">1975</span><span style="color: #434f54">,</span><span style="color: #000000">2217</span><span style="color: #434f54">,</span><span style="color: #000000">2349</span><span style="color: #434f54">,</span><span style="color: #000000">2637</span><span style="color: #434f54">,</span><span style="color: #000000">2960</span><span style="color: #434f54">,</span><span style="color: #000000">3136</span><span style="color: #434f54">,</span><span style="color: #000000">3520</span><span style="color: #434f54">,</span><span style="color: #000000">3951</span><span style="color: #434f54">,</span><span style="color: #000000">4435</span><span style="color: #434f54">,</span><span style="color: #000000">4699</span><span style="color: #000000">}</span><span style="color: #000000">;</span> <span style="color: #434f54">//,5274,5588,5920};</span>
<span style="color: #434f54">// D6 ,E6, F#6, G6, A6, B6, C#7, D7, E7, F#7, G7, A7, B7, C#8, D8</span>

<span style="color: #00979c">uint32_t</span> <span style="color: #000000">pwm_set_freq_duty</span><span style="color: #000000">(</span><span style="color: #000000">uint</span> <span style="color: #000000">slice_num</span><span style="color: #434f54">,</span> <span style="color: #000000">uint</span> <span style="color: #000000">chan</span><span style="color: #434f54">,</span> <span style="color: #00979c">uint32_t</span> <span style="color: #000000">f</span><span style="color: #434f54">,</span> <span style="color: #00979c">int</span> <span style="color: #000000">d</span><span style="color: #000000">)</span>
<span style="color: #000000">{</span> 
  <span style="color: #00979c">uint32_t</span> <span style="color: #d35400">clock</span> <span style="color: #434f54">=</span> <span style="color: #000000">125000000</span><span style="color: #000000">;</span>
  <span style="color: #00979c">uint32_t</span> <span style="color: #000000">divider16</span> <span style="color: #434f54">=</span> <span style="color: #d35400">clock</span> <span style="color: #434f54">/</span> <span style="color: #000000">f</span> <span style="color: #434f54">/</span> <span style="color: #000000">4096</span> <span style="color: #434f54">+</span> <span style="color: #000000">(</span><span style="color: #d35400">clock</span> <span style="color: #434f54">%</span> <span style="color: #000000">(</span><span style="color: #000000">f</span> <span style="color: #434f54">*</span> <span style="color: #000000">4096</span><span style="color: #000000">)</span> <span style="color: #434f54">!=</span> <span style="color: #000000">0</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #5e6d03">if</span> <span style="color: #000000">(</span><span style="color: #000000">divider16</span> <span style="color: #434f54">/</span> <span style="color: #000000">16</span> <span style="color: #434f54">==</span> <span style="color: #000000">0</span><span style="color: #000000">)</span>
    <span style="color: #000000">divider16</span> <span style="color: #434f54">=</span> <span style="color: #000000">16</span><span style="color: #000000">;</span>
  <span style="color: #00979c">uint32_t</span> <span style="color: #000000">wrap</span> <span style="color: #434f54">=</span> <span style="color: #d35400">clock</span> <span style="color: #434f54">*</span> <span style="color: #000000">16</span> <span style="color: #434f54">/</span> <span style="color: #000000">divider16</span> <span style="color: #434f54">/</span> <span style="color: #000000">f</span> <span style="color: #434f54">-</span> <span style="color: #000000">1</span><span style="color: #000000">;</span>
  <span style="color: #000000">pwm_set_clkdiv_int_frac</span><span style="color: #000000">(</span><span style="color: #000000">slice_num</span><span style="color: #434f54">,</span> <span style="color: #000000">divider16</span> <span style="color: #434f54">/</span> <span style="color: #000000">16</span><span style="color: #434f54">,</span> <span style="color: #000000">divider16</span> <span style="color: #434f54">&amp;</span> <span style="color: #000000">0xF</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #000000">pwm_set_wrap</span><span style="color: #000000">(</span><span style="color: #000000">slice_num</span><span style="color: #434f54">,</span> <span style="color: #000000">wrap</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #000000">pwm_set_chan_level</span><span style="color: #000000">(</span><span style="color: #000000">slice_num</span><span style="color: #434f54">,</span> <span style="color: #000000">chan</span><span style="color: #434f54">,</span> <span style="color: #000000">wrap</span> <span style="color: #434f54">*</span> <span style="color: #000000">d</span> <span style="color: #434f54">/</span> <span style="color: #000000">100</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #5e6d03">return</span> <span style="color: #000000">wrap</span><span style="color: #000000">;</span>
<span style="color: #000000">}</span>

<span style="color: #00979c">uint32_t</span> <span style="color: #000000">pwm_get_wrap</span><span style="color: #000000">(</span><span style="color: #000000">uint</span> <span style="color: #000000">slice_num</span><span style="color: #000000">)</span>
<span style="color: #000000">{</span>
  <span style="color: #000000">valid_params_if</span><span style="color: #000000">(</span><span style="color: #000000">PWM</span><span style="color: #434f54">,</span> <span style="color: #000000">slice_num</span> <span style="color: #434f54">&gt;=</span> <span style="color: #000000">0</span> <span style="color: #434f54">&amp;&amp;</span> <span style="color: #000000">slice_num</span> <span style="color: #434f54">&lt;</span> <span style="color: #000000">NUM_PWM_SLICES</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #5e6d03">return</span> <span style="color: #000000">pwm_hw</span><span style="color: #434f54">-</span><span style="color: #434f54">&gt;</span><span style="color: #000000">slice</span><span style="color: #000000"></span><span style="color: #434f54">.</span><span style="color: #000000">top</span><span style="color: #000000">;</span>
<span style="color: #000000">}</span>


<span style="color: #00979c">void</span> <span style="color: #000000">main</span><span style="color: #000000">(</span><span style="color: #000000">)</span> <span style="color: #000000">{</span>
  <span style="color: #000000">stdio_init_all</span><span style="color: #000000">(</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #000000">gpio_set_function</span><span style="color: #000000">(</span><span style="color: #000000">BUZZER_PWM</span><span style="color: #434f54">,</span> <span style="color: #000000">GPIO_FUNC_PWM</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #000000">uint</span> <span style="color: #000000">slice_num</span> <span style="color: #434f54">=</span> <span style="color: #000000">pwm_gpio_to_slice_num</span><span style="color: #000000">(</span><span style="color: #000000">BUZZER_PWM</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #000000">uint</span> <span style="color: #000000">channel</span> <span style="color: #434f54">=</span> <span style="color: #000000">pwm_gpio_to_channel</span><span style="color: #000000">(</span><span style="color: #000000">BUZZER_PWM</span><span style="color: #000000">)</span><span style="color: #000000">;</span>

  <span style="color: #000000">pwm_set_freq_duty</span><span style="color: #000000">(</span><span style="color: #000000">slice_num</span><span style="color: #434f54">,</span> <span style="color: #000000">channel</span><span style="color: #434f54">,</span> <span style="color: #000000">toneFreq</span><span style="color: #000000"></span><span style="color: #434f54">,</span> <span style="color: #000000">50</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #000000">pwm_set_enabled</span><span style="color: #000000">(</span><span style="color: #000000">slice_num</span><span style="color: #434f54">,</span> <span style="color: #00979c">true</span><span style="color: #000000">)</span><span style="color: #000000">;</span>

  <span style="color: #5e6d03">while</span> <span style="color: #000000">(</span><span style="color: #00979c">true</span><span style="color: #000000">)</span> <span style="color: #000000">{</span>
    <span style="color: #5e6d03">for</span> <span style="color: #000000">(</span><span style="color: #00979c">int</span> <span style="color: #000000">x</span> <span style="color: #434f54">=</span> <span style="color: #000000">0</span><span style="color: #000000">;</span> <span style="color: #000000">x</span> <span style="color: #434f54">&lt;=</span> <span style="color: #000000">14</span><span style="color: #000000">;</span> <span style="color: #000000">x</span><span style="color: #434f54">++</span><span style="color: #000000">)</span> <span style="color: #000000">{</span>
      <span style="color: #000000">pwm_set_freq_duty</span><span style="color: #000000">(</span><span style="color: #000000">slice_num</span><span style="color: #434f54">,</span> <span style="color: #000000">channel</span><span style="color: #434f54">,</span> <span style="color: #000000">toneFreq</span><span style="color: #000000"></span><span style="color: #434f54">,</span> <span style="color: #000000">50</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
      <span style="color: #00979c">uint32_t</span> <span style="color: #000000">top</span> <span style="color: #434f54">=</span> <span style="color: #000000">pwm_get_wrap</span><span style="color: #000000">(</span><span style="color: #000000">slice_num</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
      <span style="color: #d35400">printf</span><span style="color: #000000">(</span><span style="color: #005c5f">"value for top is: %d\n"</span><span style="color: #434f54">,</span> <span style="color: #000000">top</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
      <span style="color: #000000">sleep_ms</span><span style="color: #000000">(</span><span style="color: #000000">500</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
    <span style="color: #000000">}</span>
    <span style="color: #000000">sleep_ms</span><span style="color: #000000">(</span><span style="color: #000000">1000</span><span style="color: #000000">)</span><span style="color: #000000">;</span>
  <span style="color: #000000">}</span>
<span style="color: #000000">}</span>

</pre>
<p> </p>
<p> </p>]]></content:encoded>
						                            <category domain="https://forum.dronebotworkshop.com/raspberry-pi/">Raspberry Pi</category>                        <dc:creator>THRandell</dc:creator>
                        <guid isPermaLink="true">https://forum.dronebotworkshop.com/raspberry-pi/pico-buzzing-a-piezo/#post-38988</guid>
                    </item>
							        </channel>
        </rss>
		