qinyunti 发表于 2022-11-27 17:38

【行空板 Python编程学习主控板】ADC测试与简易示波器实现

<div class='showpostmsg'><h1>c4606b7d2a9dac99340ce8eb51dd5c53<br />
&nbsp;</h1>

<h1><b>前言</b></h1>

<p >板子提供了丰富的接口,这一篇我们以ADC为例实现一个简单的示波器的Demo,体验开发板快速的接口开发能力。</p>

<h1 ><b>接线</b></h1>

<p >使用P22的ADC输入,外接滑动变阻器分压实现不同电压输入。注意+和-一定要接滑动变阻器的两端,ADC引脚接分压点。避免+和-引脚短路。</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<h1 ><b>ADC的采集</b></h1>

<p >参考实现ADC的采集</p>

<p ><a href="https://wiki.unihiker.com/pinpong_python_lib#target_16"><u>https://wiki.unihiker.com/pinpong_python_lib#target_16</u></a></p>

<div class="parsedown-markdown">
<p>#&nbsp;-*-&nbsp;coding:&nbsp;UTF-8&nbsp;-*-</p>

<p >#实验效果:打印行空板P22口模拟值</p>

<p >#接线:行空板P22口接一个旋钮模块</p>

<p >import&nbsp;time</p>

<p >from&nbsp;pinpong.board&nbsp;import&nbsp;Board,Pin</p>

<p >&nbsp;</p>

<p >Board().begin()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#初始化</p>

<p >#&nbsp;ADC模拟输入引脚支持:&nbsp;P0&nbsp;P1&nbsp;P2&nbsp;P3&nbsp;P4&nbsp;P10&nbsp;P21&nbsp;P22</p>

<p >#adc22&nbsp;=&nbsp;ADC(Pin(Pin.P22))&nbsp;#将Pin传入ADC中实现模拟输入&nbsp;&nbsp;模拟输入方法1</p>

<p >adc22&nbsp;=&nbsp;Pin(Pin.P22,&nbsp;Pin.ANALOG)&nbsp;#引脚初始化为电平输出&nbsp;模拟输入方法2</p>

<p >&nbsp;</p>

<p >while&nbsp;True:</p>

<p >&nbsp;&nbsp;#v&nbsp;=&nbsp;adc22.read()&nbsp;&nbsp;#读取A0口模拟信号数值&nbsp;0-4095&nbsp;模拟输入方法1</p>

<p >&nbsp;&nbsp;v&nbsp;=&nbsp;adc22.read_analog()&nbsp;#读取A0口模拟信号数值&nbsp;0-4095&nbsp;模拟输入方法2</p>

<p >&nbsp;&nbsp;print(&quot;P22=&quot;,&nbsp;v)</p>

<p >&nbsp; time. Sleep(0.5)</p>
</div>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<h1 ><b>曲线显示</b></h1>

<p >参考https://wiki.unihiker.com/unihiker_python_lib_3</p>

<p >实现直线的显示。</p>

<div class="parsedown-markdown">
<p>from&nbsp;unihiker&nbsp;import&nbsp;GUI&nbsp;&nbsp;&nbsp;#导入包</p>

<p >gui=GUI()&nbsp;&nbsp;#实例化GUI类</p>

<p >gui.draw_line(x0=10,&nbsp;y0=60,&nbsp;x1=&nbsp;80,&nbsp;y1=60,&nbsp;width=5,&nbsp;color=(122,222,44),&nbsp;onclick=lambda:&nbsp;print(&quot;line&nbsp;clicked&quot;))</p>

<p >&nbsp;</p>

<p >import&nbsp;time</p>

<p >while&nbsp;True:</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#增加等待,防止程序退出和卡住</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;time.sleep(1)</p>
</div>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<h1 ><b>示波器实现</b></h1>

<p >根据以上实现的ADC值采集,和直线的显示,将ADC值显示为曲线,就实现了简单的示波器。</p>

<p >&nbsp;</p>

<p >X作为时间轴横坐标,采集一个点往后移动一个时间单位(采样间隔),以后面的ADC值和前面的ADC值画直线,移动到屏幕X轴最后之后绕到屏幕左边显示。</p>

<p >即持续画直线(x,ADC(i)),(x+1,ADC(i+1))</p>

<p >&nbsp;</p>

<div class="parsedown-markdown">
<p>#&nbsp;-*-&nbsp;coding:&nbsp;UTF-8&nbsp;-*-</p>

<p >#实验效果:打印行空板P22口模拟值</p>

<p >#接线:行空板P22口接一个旋钮模块</p>

<p >import&nbsp;time</p>

<p >from&nbsp;pinpong.board&nbsp;import&nbsp;Board,Pin</p>

<p >from&nbsp;unihiker&nbsp;import&nbsp;GUI&nbsp;#导入包</p>

<p >gui=GUI()&nbsp;#实例化GUI类</p>

<p >&nbsp;</p>

<p >Board().begin()&nbsp;#初始化</p>

<p >#&nbsp;ADC模拟输入引脚支持:&nbsp;P0&nbsp;P1&nbsp;P2&nbsp;P3&nbsp;P4&nbsp;P10&nbsp;P21&nbsp;P22</p>

<p >#adc22&nbsp;=&nbsp;ADC(Pin(Pin.P22))&nbsp;#将Pin传入ADC中实现模拟输入&nbsp;&nbsp;模拟输入方法1</p>

<p >adc22=Pin(Pin.P22,&nbsp;Pin.ANALOG)&nbsp;#引脚初始化为电平输出&nbsp;模拟输入方法2</p>

<p >LCDY=320</p>

<p >LCDX=240</p>

<p >X=0&nbsp;#时间轴,新增一个点往后移1像素</p>

<p >ADC0=0</p>

<p >ADC1=1</p>

<p >while&nbsp;True:</p>

<p >&nbsp;&nbsp;&nbsp;#v&nbsp;=&nbsp;adc22.read()&nbsp;&nbsp;#读取A0口模拟信号数值&nbsp;0-4095&nbsp;模拟输入方法1</p>

<p >&nbsp;&nbsp;v&nbsp;=&nbsp;adc22.read_analog()&nbsp;#读取A0口模拟信号数值&nbsp;0-4095&nbsp;模拟输入方法2</p>

<p >&nbsp;&nbsp;ADC1&nbsp;=&nbsp;v*LCDY/4096&nbsp;#新的数据</p>

<p >&nbsp;&nbsp;print(&quot;P22=&quot;,&nbsp;v)</p>

<p >&nbsp;&nbsp;gui.draw_line(x0=X,&nbsp;y0=ADC0,&nbsp;x1=X+1,&nbsp;y1=ADC1,&nbsp;width=5,&nbsp;color=(122,222,44),&nbsp;onclick=lambda:print(&quot;line&nbsp;clicked&quot;))</p>

<p >&nbsp;&nbsp;ADC0=ADC1</p>

<p >&nbsp;&nbsp;X=X+1</p>

<p >&nbsp;&nbsp;if&nbsp;X&gt;LCDX:</p>

<p >#清除屏幕</p>

<p >gui.clear()</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;X=0</p>

<p >&nbsp;&nbsp;time.sleep(0.1)</p>
</div>

<p >&nbsp;</p>

<p >&nbsp;</p>

<h1 ><b>总结</b></h1>

<p >借助开发板丰富的接口,和完善的python库,我们很快就实现示波器的Demo。该Demo具备一定的实用性,再完善下界面显示,比如调整时间分辨率,幅值分辨率等,加上模拟前端就可以实现更实用的便携示波器。</p>

<p >这也体现了该开发板,作为学习板,作为二次开发快速原型开发都适用的能力。<br />
&nbsp;</p>

<p >&nbsp;</p>
</div><script>                                        var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;"   style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
                                       
                                        if(parseInt(discuz_uid)==0){
                                                                                                (function($){
                                                        var postHeight = getTextHeight(400);
                                                        $(".showpostmsg").html($(".showpostmsg").html());
                                                        $(".showpostmsg").after(loginstr);
                                                        $(".showpostmsg").css({height:postHeight,overflow:"hidden"});
                                                })(jQuery);
                                        }                </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script>
页: [1]
查看完整版本: 【行空板 Python编程学习主控板】ADC测试与简易示波器实现