• 自制pyBoard的I2C实验,应用MicroPython
  • 利用STM32F405RG制作pyBoard实验板
  • pyBoard 基于MicroPython开发STM32FXX单片机
  • pyBoard Mini从安装到简单测试

文章目录

  • 01 pyBoard实验板
    • 1. pyBoard帮助信息
    • 2.SD存储卡
      • (1)是否可以在Flash U盘上生成文件?
        • a.列表文件
        • b.打开文件
        • c.读写文件
  • 02 MCP3008
    • 1.MCP3008资料
      • (1)管脚定义
      • (2)通讯协议
    • 2.制作MCP3008测试板
      • (1)测试板设计[^53406]
      • (2)快速制版PCB
    • 3.测试MCP3008
      • (1)面包板上的测试
      • (2)连接关系
    • 4.pyBoard SPI接口
      • (1)测量CLK、DOUT
      • (2)使用LED设置cs
        • a)测试代码
        • b)测试clk,cs
    • 5.读取MCP3008
      • (1)连接电路板
      • (2)测试代码
  • 03 使用Timer中断读取ADC
    • 1.利用Timer Callback采集ADC
      • (1)程序代码
      • (2)设置Thonny Shell的输出
      • (3)读取Thonny数据进行显示
        • a.读取代码
        • b.显示结果
        • c.数据分析
        • d.采集数据进行平均
  • ▌结论

01 pyBoard实验板


1. pyBoard帮助信息

  • MicroPython帮助信息
>>> help()
Welcome to MicroPython!For online help please visit http://micropython.org/help/.Quick overview of commands for the board:pyb.info()    -- print some general informationpyb.delay(n)  -- wait for n millisecondspyb.millis()  -- get number of milliseconds since hard resetpyb.Switch()  -- create a switch objectSwitch methods: (), callback(f)pyb.LED(n)    -- create an LED object for LED n (n=1,2,3,4)LED methods: on(), off(), toggle(), intensity(<n>)pyb.Pin(pin)  -- get a pin, eg pyb.Pin('X1')pyb.Pin(pin, m, [p]) -- get a pin and configure it for IO mode m, pull mode pPin methods: init(..), value([v]), high(), low()pyb.ExtInt(pin, m, p, callback) -- create an external interrupt objectpyb.ADC(pin)  -- make an analog object from a pinADC methods: read(), read_timed(buf, freq)pyb.DAC(port) -- make a DAC objectDAC methods: triangle(freq), write(n), write_timed(buf, freq)pyb.RTC()     -- make an RTC object; methods: datetime([val])pyb.rng()     -- get a 30-bit hardware random numberpyb.Servo(n)  -- create Servo object for servo n (n=1,2,3,4)Servo methods: calibration(..), angle([x, [t]]), speed([x, [t]])pyb.Accel()   -- create an Accelerometer objectAccelerometer methods: x(), y(), z(), tilt(), filtered_xyz()Pins are numbered X1-X12, X17-X22, Y1-Y12, or by their MCU name
Pin IO modes are: pyb.Pin.IN, pyb.Pin.OUT_PP, pyb.Pin.OUT_OD
Pin pull modes are: pyb.Pin.PULL_NONE, pyb.Pin.PULL_UP, pyb.Pin.PULL_DOWN
Additional serial bus objects: pyb.I2C(n), pyb.SPI(n), pyb.UART(n)Control commands:CTRL-A        -- on a blank line, enter raw REPL modeCTRL-B        -- on a blank line, enter normal REPL modeCTRL-C        -- interrupt a running programCTRL-D        -- on a blank line, do a soft reset of the boardCTRL-E        -- on a blank line, enter paste modeFor further help on a specific object, type help(obj)
For a list of available modules, type help('modules')

2.SD存储卡

在淘宝购买到 TF卡 512MB (¥9.9 512M小容量 SD存储卡)插在pyBoard的TFMini卡座上。将USB接入PC机之后,便可以在微机上产生一个可以动存储(F:),它的容量大约为479MB。

▲ 使用TF卡产生移动硬盘

(1)是否可以在Flash U盘上生成文件?

将13个文件拷贝到byBoard的磁盘上。测试在byBoard MCU上访问这些文件。

▲ 将13个文件拷贝到F:磁盘

a.列表文件
import os
print(os.listdir())

[’>\r\x16\tq4.MP3’, ‘GIF1.gif’, ‘GIF2.gif’, ‘GIF3.gif’, ‘GIF4.gif’, ‘1.jpg’, ‘2.jpg’, ‘3.jpg’, ‘figure1.jpg’, ‘\u0467\t\x02\x10\x05~1.XLS’, ‘>\r\x16\tq1.MP3’, ‘>\r\x16\tq2.MP3’, ‘>\r\x16\tq3.MP3’, ‘testfile.py’]

b.打开文件
  • CODE
import osfilename = r'testfile.py'with open(filename) as f:for l in f.readlines():print(l.strip('\r\n'))
  • Result:
>>> %Run -c $EDITOR_CONTENT
import os
filename = r'testfile.py'
with open(filename) as f:for l in f.readlines():print(l)
c.读写文件
  • Code:
import osfilename = 'test.txt'with open(filename, 'w') as f:for i in range(10):f.write('Line :%d\n'%i)with open(filename, 'r') as f:for l in f.readlines():print(l.strip('\n'))
  • Result:
>>> %Run -c $EDITOR_CONTENT
Line :0
Line :1
Line :2
Line :3
Line :4
Line :5
Line :6
Line :7
Line :8
Line :9
  • 在程序运行之后,从PC的byBoard对应的U盘中看不到对应的text.txt文件。重新插拔一下byBoard在对应的U盘内出现对应的TEXT文件。

对于文件写入“\n”结尾打开之后,使用Notepad打开文件出现所有的行都在一行之内。 如果使用“\r\n”结尾,则使用notepad打开之后每一行都分开了。

▲ 打开text.txt 内容

▲ 使用write('Line%d\r\n')之后的文本文件

那么问题来了:如果能够在byBoard进行文件读写的时候,能够在byBoard的U盘内能够及时出现所需要访问的文件呢?

02 MCP3008


全新 MCP3008-I/SL SOP16 SPI串行接口IC 模数转换器芯片 贴片IC (¥:5)芯片,原来是针对 树莓派 Mode 4 增加其中ADC。下面对于它进行初步实验。下面通过对MCP3008 的测试,主要来测试一下byBoard的SPI接口。

1.MCP3008资料

(1)管脚定义

MCP3008 Datasheet 给出了MCP3008的管脚定义以及控制命令相关的协议。

▲ MCP3008 内部框图预估管脚定义

(2)通讯协议

▲ 通讯协议

▲ 控制命令功能定义

2.制作MCP3008测试板

(1)测试板设计1

(2)快速制版PCB

▲ 快速制版的测试电路板

PIN1 PIN2 PIN3 PIN4 PIN5 PIN6 PIN7 PIN8 PIN9 PIN10 PIN11 PIN12
VDD GND CLK DOUT DIN CS CH0 CH1 CH2 CH3 CH4 CH5

3.测试MCP3008

(1)面包板上的测试

▲ pyBoard管脚定义

在Xn管脚存在的是SPI(1)。

▲ Xn管脚上的SPI接口

(2)连接关系

X5 X6 X7 X8
SS SCK MISO MOSI
PIN6 PIN3 PIN4 PIN5
CS CLK DOUT DIN

4.pyBoard SPI接口

(1)测量CLK、DOUT

▲ 测量SPI信号

▲ Polarity=0,Phase=0

▲ Polarity=0,Phase=1

▲ Polarity=1,Phase=0

▲ Polarity=1,Phase=1

根据前面MCP3008通信协议,对于pyBoard的SPI的通信模式设置为:

  • Polarity = 1
  • Phase = 1

(2)使用LED设置cs

a)测试代码
from pyb                    import SPI
import time
from pyb                    import Pin
spi = SPI(1, SPI.MASTER, baudrate=200000, polarity=0, phase=1)
print('Begin to test SPI.')
cs = Pin('X5', Pin.OUT_PP)
cs.high()
while True:cs.low()spi.send('U')cs.high()time.sleep(.01)
b)测试clk,cs

▲ CLK,CS波形

5.读取MCP3008

(1)连接电路板

在面包板上连接MCP3008与pyBoard。

▲ 使用面包板测试MCP3008

(2)测试代码

from pyb                    import SPI
import time
from pyb                    import Pinspi = SPI(1, SPI.MASTER, baudrate=100000, polarity=0, phase=1)def MCP3008read(ch):buf = bytearray([0xc0+ch*8, 0,0])buf = spi.send_recv(buf, buf)num = buf[0] * 0x200 + buf[1] * 2 + (buf[2] & 0x80) / 0x80return numprint('Begin to test SPI.')cs = Pin('X5', Pin.OUT_PP)
cs.high()while True:cs.low()buf = MCP3008read(0)cs.high()print(buf)time.sleep(.25)

▲ 读写Clock与DIN

▲ 采集一个恒定的电压

from pyb                    import SPI
import time
from pyb                    import Pin
spi = SPI(1, SPI.MASTER, baudrate=100000, polarity=0, phase=1)
def MCP3008read(ch):cs.low()buf = bytearray([0xc0+ch*8, 0,0])buf = spi.send_recv(buf, buf)num = buf[0] * 0x200 + buf[1] * 2 + (buf[2] & 0x80) / 0x80cs.high()return num
print('Begin to test SPI.')
cs = Pin('X5', Pin.OUT_PP)
cs.high()
data = []
for i in range(256):data.append(MCP3008read(0))time.sleep(.001)
print(data)

▲ 采集一个正弦波

▲ 采集2Hz正弦波

03 使用Timer中断读取ADC


1.利用Timer Callback采集ADC

(1)程序代码

from pyb                    import SPI
import time
from pyb                    import Pin
from pyb                    import Timer
from pyb                    import LED
from pyb                    import ADCadc = ADC(Pin('X1'))
print(adc.read())adcdim = [0] * 256
count = 0print(adcdim)def toggleled():global adcdim, countif count < 256:adcdim[count] = adc.read()count += 1tim = Timer(1, freq=100)
tim.callback(lambda t:toggleled())print("Begin to sample ADC...")
while True:if count >= 256:breakelse: print(count)time.sleep(.5)print(adcdim)

(2)设置Thonny Shell的输出

根据 安装 Thonny 软件环境开发PI Pico 对于Thonny的Shell输出进行设置,使其对于更长的输出字符串能够显示。

▲ 设置Thonny的Shell输出最大长度为10000

(3)读取Thonny数据进行显示

a.读取代码
tspsendwindowkey('Thonny', 's', alt=1)
tspsendwindowkey('Thonny', 'ac', control=1)
str = [int(s) for s in clipboard.paste().split('[')[-1].split(']')[0].split(',')]
printf(str)
plt.plot(str)
plt.xlabel("Sample")
plt.ylabel("Value")
plt.grid(True)
plt.tight_layout()
plt.show()
b.显示结果

▲ 显示采集到的正弦波波形

c.数据分析

从上述读取的信息来看,数据中存在着很多的噪声。下面通过采集到的有电位器所得到的直流电压进行采集,可以看到其中的噪声来自于单独采集到的数据噪声。

▲ 采集到的数据噪声

d.采集数据进行平均

连续采集若干数据进行平均,可以大大缓解造成的干扰。

▲ 连续采集8个进行平均值后的数据

from pyb                    import SPI
import time
from pyb                    import Pin
from pyb                    import Timer
from pyb                    import LED
from pyb                    import ADC
adc = ADC(Pin('X1'))
print(adc.read())
adcdim = [0] * 256
count = 0
print(adcdim)
def toggleled():global adcdim, countif count < 256:num = 0num1 = adc.read()num2 = adc.read()num3 = adc.read()num4 = adc.read()num5 = adc.read()num6 = adc.read()num7 = adc.read()num8 = adc.read()adcdim[count] = (num1+num2+num3+num4+num5+num6+num7+num8)count += 1
tim = Timer(1, freq=100)
tim.callback(lambda t:toggleled())
print("Begin to sample ADC...")
while True:if count >= 256:breakelse: print(count)time.sleep(.5)
print(adcdim)

▌结论


对于pyBoard的SPI进行了测试,并对于MCP3008的功能进行测试。


  1. 测试MCP3008的AD文件:AD\Test\2021\TestComponent\MCP3008.SchDoc * ↩︎

基于pyBoard的进一步的一些测试实验,MC3008相关推荐

  1. 20165219王彦博《基于Cortex-M4的虚拟机制作与测试》课程设计个人报告

    20165219王彦博<基于Cortex-M4的虚拟机制作与测试>课程设计个人报告 一.个人贡献 参与课设题目讨论及完成全过程: 资料收集: 负责环境搭建,代码运行下载: 撰写小组结题报告 ...

  2. 基于virtuoso IC 618的LDO仿真实验

    前言: 这里是我的LDO仿真记录帖. 往后各种结构的LDO仿真记录就存放在这个帖子里了. 不定期更新. 基于virtuoso IC 618的LDO仿真实验 目录 序    LDO学习 0.1 仿真参数 ...

  3. input自适应_【正点原子FPGA连载】第十一章基于OV5640的自适应二值化实验-领航者ZYNQ之HLS 开发指南...

    1)摘自[正点原子]领航者ZYNQ之HLS 开发指南 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手 ...

  4. 软件可用性测试mantis,学生选课系统-软件可用性测试实验.doc

    学生选课系统-软件可用性测试实验 实验报告 课程名称:软件测试方法和技术 学生姓名: 学号: 院系:计算机 班级:1202 组别:1 任课教师:张建东 指导老师:张建东 目录 一.实验目的: 实验组成 ...

  5. 电力系统matlab实验报告,基于matlab语言计算电力系统暂态稳定仿真程序实验报告.docx...

    基于matlab语言计算电力系统暂态稳定仿真程序实验报告 BeijingJiaotongUniversity 电力系统分析 暂态稳定分析实验 学院:电气工程学院 班级:xxxxxxxx 学号:xxxx ...

  6. 网络渗透测试实验三 XSS和SQL

    网络渗透测试实验三 XSS和SQL注入 实验目的:了解什么是XSS:思考防御XSS攻击的方法:了解SQL注入的基本原理:掌握PHP脚本访问MySQL数据库的基本方法:掌握程序设计中避免出现SQL注入漏 ...

  7. matlab编写转台程序,基于Matlab三轴惯导测试转台结构分析.doc

    基于Matlab三轴惯导测试转台结构分析 基于Matlab三轴惯导测试转台结构分析 摘 要:三轴惯导测试转台作为惯导测试设备,其精度直接影响惯导设备的精度,而中框回转精度在三轴精度相对较差.影响其中框 ...

  8. 【正点原子FPGA连载】第三十六章 基于OV5640的PL以太网视频传输实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0

    1)实验平台:正点原子领航者ZYNQ开发板 2)平台购买地址:https://item.taobao.com/item.htm?&id=606160108761 3)全套实验源码+手册+视频下 ...

  9. 让机器学习手把手指导你的下一步实验-基于贝叶斯优化的序贯实验

    在企业的日常研发工作中, 工程师可能会面对众多潜在影响因子及这些因子间的复杂组合而无所适从,不知道如何通过实验构建这些因子与最终响应间的数学模型.类似困扰常出现在锂电池行业对于电解液配方的研究.医药行 ...

最新文章

  1. 怎样用python画雪花_python使用turtle库与random库绘制雪花
  2. Android getWindow().setFlags方法
  3. 第八节: Quartz.Net五大构件之SimpleThreadPool及其四种配置方案
  4. 中大型计算机代表型号,目前个人计算机主要机型.doc
  5. Kafka核心源码解析 - SocketServer源码解析
  6. VisualStudio2019 DLL生成并使用教程(C++)最详细Demo教程
  7. flash将文本呈现为html,flash中的静态文本、动态文本、输入文本
  8. 微信浏览器中唤醒App
  9. 量子计算机怎么编程,如何在量子计算机上编程——QPU编程
  10. NFT交易平台2.0来了,源代码,智能合约整套
  11. java jnlp 运行_java怎么运行jnlp文件 jnlp文件怎么打开
  12. Pycharm踩坑(一) FileNotFoundError: [Errno 2] No such file or directory: ‘../data/users.txt‘ 目录结构
  13. Ubuntu快捷键 终端快捷键
  14. overflow属性的用法
  15. 量化交易 多因子打分法策略
  16. 简单聊聊SOA和微服务
  17. android服务框架下载,GG服务框架安装器
  18. 【C语言进阶】⑦字符串函数详解
  19. win7系统不能保存文档到服务器,win7系统正确配置服务器
  20. 【STM32WLE5之LoRa# 系列1、易智联LM401 评估板简介】

热门文章

  1. 【css】垂直居中的几种写法
  2. 安卓v7支持包下的ListView替代品————RecyclerView
  3. Vim Vundle 插件管理器
  4. 浅谈JDBC与ODBC的区别与应用
  5. 系统提供的按钮和图标
  6. py 的 第 20 天
  7. MSDN-9月杂志推荐
  8. 写入时复制(Copy-on-write)机制
  9. CNN回应中方谴责 否认冒犯中国人
  10. 感光电路板制作(转收藏)