6411|3

11

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

micropython Timer I2C教程 [复制链接]

Timer
micropython中使用定时器也是轻松简单的。要使用定时器,先需要导入Timer.  from machine importTimer
基本用法:
定义Timer
tim=Timer(n)
  定时器3被保留供内部使用.计时器5控制伺服驱动器,和定时器6用于定时ADC / DAC读/写。建议使用其他计时器在你的程序.
  tim=Timer(1, freq=100)
tim=Timer(4, freq=200, callback=f)
  设置频率  tim.freq(100)
  定义回调函数(中断)  tim.callback(f)
  禁用回调函数    tim.callback(None)
Timer库介绍
timer.counter([value])
  获取或设置定时计数器
timer.freq([value]  
获取或(如果设置改变预分频器和周期)设定的频率计时器.
timer.init(*, freq, prescaler, period)  初始化计时器。初始化必须是有频率(Hz)或预分频器tim.init(freq=100)            tim.init(prescaler=83, period=999)     关键字参数freq 指定的时间周期的频率
              Prescaler—预分频,[0-0xffff],定时器频率是系统时钟除
(prescaler + 1)。定时器2-7和12-14最高频率是84MHz,定时器1、8-11是168MHz
              Period—周期值(ARR)。定时器1/3/4/6-15 [0-0xffff],定时器25[0-0x3fffffff]
在我的电脑查看端口号,用右键单击->我的电脑->管理->设备管理器->端口.端口号是COM9.



此内容由EEWORLD论坛网友Chocho原创,如需转载或用于商业用途需征得作者同意并注明出处
                              
然后打开运行micropython的终端putty.选择端口号(COM9)、connection type
Serial.
其他设置如下.
Open后按几下enter键,我们就可以在putty终端中输入micropython语言了.
按住Ctrl+E可以进入paste mode,在此模式下单击右键就可以粘贴程序,粘贴成
功后按Ctrl+D完成粘贴,micropython会执行粘贴的程序
Timer的实列:
定时周期输出1
from machine import Timer
tim = Timer(-1)
def func(t):
              print (1)
tim.init(period=2000, mode=Timer.PERIODIC, callback=func)
定时一次性输出2
from machine import Timer
tim = Timer(-1)
def func(t):
              print(2)
tim.init(period=2000, mode=Timer.ONE_SHOT, callback=func)
呼吸灯
from machine import Pin,Timer,PWM
pwm = PWM(Pin(14),100)
polar = 0
duty = 0
def setLed(t):
          global duty,polar
       if(polar == 0):
                 duty+=16
                 if(duty >= 1008):
                         polar = 1
          else:
                 duty -= 16
                 if(duty <= 0):
                         polar = 0
          pwm.duty(duty)        
          tim = Timer(1)
          tim.init(period=10,mode=Timer.PERIODIC, callback=setLed)
try:
          while True:
                 pass
except:
          tim.deinit()
           pwm.deinit()
I2C
I2C 是设备之间的两线通信协议。在物理层它只需要两个信号线: SCL SDA,分别是时钟和数据线.
esp8266DFR0117之间I2C通信程序:
   
   
from machine import Pin, I2C            
    i2c =I2C(scl=Pin(5), sda=Pin(4), freq=100000)
b=bytearray(4)
b[0]=97
b[1]=98
b[2]=99
i2c.writeto_mem(0x50,0,b)
i2c.readfrom_mem(0x50,0,4)
   
I2C.init(scl, sda, *, freq=400000)
初始化 I2C:
scl 代表 SCL 引脚
sda 代表 SDA 引脚
freq 代表 SCL 时钟速率
标准总线操作
I2C 主模式读写操作:
    I2C.readfrom(addr, nbytes)   
         从指定地址设备读取数据,返回读取对象
    I2C.readfrom_into(addr, buf)
         从指定地址设备读取数据到缓冲区,读取的数量是 buf 的长度
    I2C.writeto(addr, buf, )
         写入数据到设备.
原始 I2C 操作
     下面方法执行原始的 I2C 主操作,它们可以组合产生各种 I2C 事务。提供
   这些方法是可以更好的控制总线,否则使用标准方法就足够了.
  I2C.start()
   
在总线上发送 start ( SCL 是高时 SDA 变低).
  I2C.stop()
   
发送停止位 ( SCL 是高时 SCL 变高).
  I2C.readinto(buf)
   
从总线上读取数据并存放到 buf,读取的数量是 buf 的长度。接收到倒数
第二个数据时发送 ACK 信号,接收到全部数据后发送 NACK 信号.
  I2C.write(buf)
   
写入缓冲区数据到总线。每发送一个字节后将检查是否收到 ACK,如果没
有收到将引发 OSError 异常.
这里我们用esp8266DFR0117来做一个简单的I2C通信,如果需要DFR0117这个板子可以在这里购买:http://www.dfrobot.com.cn/goods-151.html . 这个板子的具体的详细资料在这里:http://wiki.dfrobot.com.cn/index.php/(SKU:DFR0117)EEPROM%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E6%A8%A1%E5%9D%97 .
然后我们从它的示列代码中找到它的I2C的地址,这里我就不做过多的介绍,打开上面的网页,在它的代码中找到地址是:0x50. 然后我们把DFR0117GND VCC   SDASCL对应的和esp8266GND VCC SDA SCL连接在一起,最后把esp8266连接到PC.
在我的电脑查看端口号,用右键单击->我的电脑->管理->设备管理器->端口.端口号是COM9.
然后打开运行micropython的终端putty.选择端口号(COM9)、connection typeSerial.
其他的一些设置如下,设置好过后单击Open
Open后按几下enter键,我们就可以在putty终端中输入micropython语言了
输入我们的程序. 执行的结果如下,这样两个设备间的I2C通信就完成了.

此帖出自编程基础论坛

最新回复

b=bytearray(4) b[0]=97 b[1]=98 b[2]=99 这些是什么意思,有什么用呀   详情 回复 发表于 2020-12-26 14:06
点赞 关注
 

回复
举报

1万

帖子

25

TA的资源

版主

沙发
 
帖子中的代码需要用代码工具,不然格式就错乱了。
此帖出自编程基础论坛
 
 
 

回复

11

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
dcexpert 发表于 2017-2-24 21:49
帖子中的代码需要用代码工具,不然格式就错乱了。

好的 谢谢提醒
此帖出自编程基础论坛
 
 
 

回复

189

帖子

0

TA的资源

一粒金砂(中级)

4
 

b=bytearray(4)

b[0]=97

b[1]=98

b[2]=99

这些是什么意思,有什么用呀

此帖出自编程基础论坛
 
个人签名单片机软件/硬件交流群:127034610
 
 

回复
您需要登录后才可以回帖 登录 | 注册

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表