【行空板 Python编程学习主控板】ADC测试与简易示波器实现
<div class='showpostmsg'><h1>c4606b7d2a9dac99340ce8eb51dd5c53<br /> </h1>
<h1><b>前言</b></h1>
<p >板子提供了丰富的接口,这一篇我们以ADC为例实现一个简单的示波器的Demo,体验开发板快速的接口开发能力。</p>
<h1 ><b>接线</b></h1>
<p >使用P22的ADC输入,外接滑动变阻器分压实现不同电压输入。注意+和-一定要接滑动变阻器的两端,ADC引脚接分压点。避免+和-引脚短路。</p>
<p > </p>
<p > </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># -*- coding: UTF-8 -*-</p>
<p >#实验效果:打印行空板P22口模拟值</p>
<p >#接线:行空板P22口接一个旋钮模块</p>
<p >import time</p>
<p >from pinpong.board import Board,Pin</p>
<p > </p>
<p >Board().begin() #初始化</p>
<p ># ADC模拟输入引脚支持: P0 P1 P2 P3 P4 P10 P21 P22</p>
<p >#adc22 = ADC(Pin(Pin.P22)) #将Pin传入ADC中实现模拟输入 模拟输入方法1</p>
<p >adc22 = Pin(Pin.P22, Pin.ANALOG) #引脚初始化为电平输出 模拟输入方法2</p>
<p > </p>
<p >while True:</p>
<p > #v = adc22.read() #读取A0口模拟信号数值 0-4095 模拟输入方法1</p>
<p > v = adc22.read_analog() #读取A0口模拟信号数值 0-4095 模拟输入方法2</p>
<p > print("P22=", v)</p>
<p > time. Sleep(0.5)</p>
</div>
<p > </p>
<p > </p>
<p > </p>
<h1 ><b>曲线显示</b></h1>
<p >参考https://wiki.unihiker.com/unihiker_python_lib_3</p>
<p >实现直线的显示。</p>
<div class="parsedown-markdown">
<p>from unihiker import GUI #导入包</p>
<p >gui=GUI() #实例化GUI类</p>
<p >gui.draw_line(x0=10, y0=60, x1= 80, y1=60, width=5, color=(122,222,44), onclick=lambda: print("line clicked"))</p>
<p > </p>
<p >import time</p>
<p >while True:</p>
<p > #增加等待,防止程序退出和卡住</p>
<p > time.sleep(1)</p>
</div>
<p > </p>
<p > </p>
<p > </p>
<h1 ><b>示波器实现</b></h1>
<p >根据以上实现的ADC值采集,和直线的显示,将ADC值显示为曲线,就实现了简单的示波器。</p>
<p > </p>
<p >X作为时间轴横坐标,采集一个点往后移动一个时间单位(采样间隔),以后面的ADC值和前面的ADC值画直线,移动到屏幕X轴最后之后绕到屏幕左边显示。</p>
<p >即持续画直线(x,ADC(i)),(x+1,ADC(i+1))</p>
<p > </p>
<div class="parsedown-markdown">
<p># -*- coding: UTF-8 -*-</p>
<p >#实验效果:打印行空板P22口模拟值</p>
<p >#接线:行空板P22口接一个旋钮模块</p>
<p >import time</p>
<p >from pinpong.board import Board,Pin</p>
<p >from unihiker import GUI #导入包</p>
<p >gui=GUI() #实例化GUI类</p>
<p > </p>
<p >Board().begin() #初始化</p>
<p ># ADC模拟输入引脚支持: P0 P1 P2 P3 P4 P10 P21 P22</p>
<p >#adc22 = ADC(Pin(Pin.P22)) #将Pin传入ADC中实现模拟输入 模拟输入方法1</p>
<p >adc22=Pin(Pin.P22, Pin.ANALOG) #引脚初始化为电平输出 模拟输入方法2</p>
<p >LCDY=320</p>
<p >LCDX=240</p>
<p >X=0 #时间轴,新增一个点往后移1像素</p>
<p >ADC0=0</p>
<p >ADC1=1</p>
<p >while True:</p>
<p > #v = adc22.read() #读取A0口模拟信号数值 0-4095 模拟输入方法1</p>
<p > v = adc22.read_analog() #读取A0口模拟信号数值 0-4095 模拟输入方法2</p>
<p > ADC1 = v*LCDY/4096 #新的数据</p>
<p > print("P22=", v)</p>
<p > gui.draw_line(x0=X, y0=ADC0, x1=X+1, y1=ADC1, width=5, color=(122,222,44), onclick=lambda:print("line clicked"))</p>
<p > ADC0=ADC1</p>
<p > X=X+1</p>
<p > if X>LCDX:</p>
<p >#清除屏幕</p>
<p >gui.clear()</p>
<p > X=0</p>
<p > time.sleep(0.1)</p>
</div>
<p > </p>
<p > </p>
<h1 ><b>总结</b></h1>
<p >借助开发板丰富的接口,和完善的python库,我们很快就实现示波器的Demo。该Demo具备一定的实用性,再完善下界面显示,比如调整时间分辨率,幅值分辨率等,加上模拟前端就可以实现更实用的便携示波器。</p>
<p >这也体现了该开发板,作为学习板,作为二次开发快速原型开发都适用的能力。<br />
</p>
<p > </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]