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

qinyunti   2022-11-27 17:38 楼主

db98ff962fcb7e96e85cbe796751f2da

 

前言

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

接线

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

image-20221127173401-1.jpeg  

image-20221127173401-2.png  

ADC的采集

参考实现ADC的采集

https://wiki.unihiker.com/pinpong_python_lib#target_16

# -*- coding: UTF-8 -*-

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

#接线:行空板P22口接一个旋钮模块

import time

from pinpong.board import Board,Pin

 

Board().begin()               #初始化

# ADC模拟输入引脚支持: P0 P1 P2 P3 P4 P10 P21 P22

#adc22 = ADC(Pin(Pin.P22)) #将Pin传入ADC中实现模拟输入  模拟输入方法1

adc22 = Pin(Pin.P22, Pin.ANALOG) #引脚初始化为电平输出 模拟输入方法2

 

while True:

  #v = adc22.read()  #读取A0口模拟信号数值 0-4095 模拟输入方法1

  v = adc22.read_analog() #读取A0口模拟信号数值 0-4095 模拟输入方法2

  print("P22=", v)

  time. Sleep(0.5)

 

 

image-20221127173401-3.png  

曲线显示

参考https://wiki.unihiker.com/unihiker_python_lib_3

实现直线的显示。

from unihiker import GUI   #导入包

gui=GUI()  #实例化GUI类

gui.draw_line(x0=10, y0=60, x1= 80, y1=60, width=5, color=(122,222,44), onclick=lambda: print("line clicked"))

 

import time

while True:

    #增加等待,防止程序退出和卡住

    time.sleep(1)

 

image-20221127173401-4.jpeg  

 

示波器实现

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

 

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

即持续画直线(x,ADC(i)),(x+1,ADC(i+1))

 

# -*- coding: UTF-8 -*-

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

#接线:行空板P22口接一个旋钮模块

import time

from pinpong.board import Board,Pin

from unihiker import GUI #导入包

gui=GUI() #实例化GUI类

 

Board().begin() #初始化

# ADC模拟输入引脚支持: P0 P1 P2 P3 P4 P10 P21 P22

#adc22 = ADC(Pin(Pin.P22)) #将Pin传入ADC中实现模拟输入  模拟输入方法1

adc22=Pin(Pin.P22, Pin.ANALOG) #引脚初始化为电平输出 模拟输入方法2

LCDY=320

LCDX=240

X=0 #时间轴,新增一个点往后移1像素

ADC0=0

ADC1=1

while True:

   #v = adc22.read()  #读取A0口模拟信号数值 0-4095 模拟输入方法1

  v = adc22.read_analog() #读取A0口模拟信号数值 0-4095 模拟输入方法2

  ADC1 = v*LCDY/4096 #新的数据

  print("P22=", v)

  gui.draw_line(x0=X, y0=ADC0, x1=X+1, y1=ADC1, width=5, color=(122,222,44), onclick=lambda:print("line clicked"))

  ADC0=ADC1

  X=X+1

  if X>LCDX:

#清除屏幕

gui.clear()

    X=0

  time.sleep(0.1)

 

 

总结

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

这也体现了该开发板,作为学习板,作为二次开发快速原型开发都适用的能力。
 

 

回复评论

暂无评论,赶紧抢沙发吧
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复