当前位置: 首页 > news >正文

品牌营销型网站建设/深圳推广

品牌营销型网站建设,深圳推广,免费领取永久云服务器,wordpress 照片.NET Micro Framework 和.NET Compact Framework不同,并不是.NET Framework的子集,而是更贴近硬件底层,它提供了许多诸如GPIO、PWM、SPI、I2C和OneWire等硬件操作类库。由此可以让普通的软件开发人员相对平滑的过度到硬件开发领域&#xff0c…

.NET Micro Framework 和.NET Compact Framework不同,并不是.NET Framework的子集,而是更贴近硬件底层,它提供了许多诸如GPIO、PWM、SPI、I2C和OneWire等硬件操作类库。由此可以让普通的软件开发人员相对平滑的过度到硬件开发领域,也足以让以前相对封闭的硬件系统通过二次开发的方式扩展硬件模块成为一种流行(随着物联网技术的深入发展,未来软件不仅需要组态化,硬件其实更需要组态化)。

由于非硬件研发出身,最早接触I2C接口是在2007年初次接触.NET Micro Framework的时候,当时并没有和实际的硬件打交道,而是从软件层面封装了一个可以进行I2C总线虚拟通信的模拟器(参见博文《.Net MicroFramework研究—带I2C总线的模拟器》),后来在2008年为TI DM355的芯片移植.NET Micro Framework,我的任务就是I2C、USB等硬件驱动的开发。在TI DM355上有一个红外遥控接收器单元(MSP430单片)和DM355通过I2C接口进行通信,从而让.NET Micro Framework可以接收遥控器的按键信息。

后续在Cortex-M3平台,所接触的模块都是SPI接口的,I2C接口的反而没有,所以相关接口一直没有调试。最近有一个客户在使用物联网智能网关时候,发现引出的IO不够,需要扩展几路AD,推荐了一个基于PCF8591芯片的AD/DA转换模块,所以我才得以再次深入研究I2C接口。

如下是.NET Micro Framework的I2C接口类库:

public class I2CDevice : IDisposable

{

public I2CDevice.ConfigurationConfig;

protectedbool m_disposed;

publicI2CDevice(I2CDevice.Configurationconfig);

public static I2CDevice.I2CReadTransaction CreateReadTransaction(byte[] buffer);

public static I2CDevice.I2CWriteTransaction CreateWriteTransaction(byte[] buffer);

public void Dispose();

public int Execute(I2CDevice.I2CTransaction[] xActions, int timeout);

public class Configuration

{

publicreadonly ushortAddress;

publicreadonly intClockRateKhz;

publicConfiguration(ushort address, int clockRateKhz);

}

public sealed class I2CReadTransaction : I2CDevice.I2CTransaction{}

public class I2CTransaction

{

publicreadonly byte[]Buffer;

protectedI2CTransaction(byte[] buffer);

}

public sealed class I2CWriteTransaction : I2CDevice.I2CTransaction{}

}

I2C的读写操作通过定义I2CDevice.I2CTransaction数组,可以实现批量操作。

物联网智能网关基于STM32F207/STM32F407芯片,其I2C接口即支持主模式也支持从模式(I2C接口类仅支持主模式),总线速度支持两种,标准速度(高达100KHz)和快速(400KHz),I2C地址支持7位和10位两种(驱动只支持7位地址)。

PCF8591芯片是8位A/D和D/A转换器,4路模拟输入,1路模拟输出。其I2C地址是可以进行硬件编码的(3个地址引脚A0、A1和A2),其地址编码规则如下:

固定部分

编码部分

1

0

0

1

A2

A1

A0

R/W

最高位 最低位

对I2C来说,一般读操作的时候地址的最低位为1,写操作的时候地址的最低位为0。我们选用的模块,看原理图可知,A2、A1和A0管脚都被直接连接到GND,所以这部分都是0,所以对读地址来说是0x91,写地址是0x90。.NET Micro Framework底层I2C驱动实现的时候,地址会自动左移,最低位是不算地址的一部分的(所以才说是7位地址支持),所以我们在填写I2C模块地址的时候,要填写的是读地址(或写地址)右移一位的数字,也就是0x48。

总线频率我们理论上可以选择10K到400K,这里我们选择100K。

下面我们详细介绍一下PCF8591是如何进行AD读取和DA输出的。

读AD操作:

写操作

读操作

地址

控制字

地址

AD数据

写DA操作

写操作

地址

控制字

DA数据

控制字的定义如下:

0

X

X

X

0

X

X

X

DA标志

模拟输入模式

自动增量

通道号:0~3

对AD0~AD3通道来说,我们常用的控制字的值为0x0,0x1,0x2,0x3。

对DA来说,我们常用的控制字的值为0x40。

注意:如果我们循环读取AD0AD3,由于读周期读取的AD转换值,其实是上一次的转换结果,所以我们读取AD1的时候,其实是读取的AD0,依次类推(上电第一次读取的值是0x80)。

有了以上知识,我们就可以进行编程了,核心代码如下:

public static void Main()

{

I2CDeviceI2CBus = new I2CDevice(new I2CDevice.Configuration(0x48, 100));

byte[]bytAD = new byte[4];

bytebytDA = 0;

while(true)

{

for(byte i = 0; i < 4; i++)

{

byte[]bytWData = new byte[1]{ i };

byte[]bytRData = new byte[1];

I2CDevice.I2CTransaction[] i2c = newI2CDevice.I2CTransaction[2];

i2c[0] = I2CDevice.CreateWriteTransaction(bytWData);

i2c[1] = I2CDevice.CreateReadTransaction(bytRData);

I2CBus.Execute(i2c, 100);

bytAD[i - 1 < 0 ? 3 : i- 1] = bytRData[0];

}

Debug.Print("AD0=" + ShowData(bytAD[0]) + " AD1=" + ShowData(bytAD[1]) + " AD2=" + ShowData(bytAD[2]) + " AD3=" + ShowData(bytAD[3]));

byte[]bytWData1 = new byte[2]{ 0x40, bytDA };

I2CDevice.I2CTransaction[] i2c1 = newI2CDevice.I2CTransaction[1];

i2c1[0] = I2CDevice.CreateWriteTransaction(bytWData1);

I2CBus.Execute(i2c1, 100);

Debug.Print("DA0=" + ShowData(bytDA));

bytDA += 10;

Thread.Sleep(1000);

}

}

PCF8591模块和物联网智能网关接线有四根,分别是VCC、GND、SCL和SDA,VCC可以接5V或3.3V(我们接3.3V)、SCL接PB6,SDA接PB7。程序部署运行的效果图如下:


通过旋转模块的上的模拟开关,我们会发现AD3的值可以由0向255变化。

注意:为了正常运行本实例,物联网智能网关固件版本需要升级到V1.7.15以上,TinyBooter也需要同步升级。

固件下载地址:http://www.sky-walker.com.cn/MFRelease/firmware/MFv42_YF_Wisteria207.rar

----------------------------------------------------

源码下载:http://www.sky-walker.com.cn/MFRelease/Sample/PCF859IT_I2C.rar

MF简介:http://blog.csdn.net/yefanqiu/article/details/5711770

MF资料:http://www.sky-walker.com.cn/News.asp?Id=25


http://www.lbrq.cn/news/1084537.html

相关文章:

  • 二级域名iis建立网站/建站平台哪家好
  • 怎么做宣传网页/搜索引擎优化核心
  • 快速建站学什么/郑州百度推广公司地址
  • 学校网站模板html/软文发布平台排名
  • 大流量ip网站怎么做/深圳优化怎么做搜索
  • 佛山网站建设维护/电子邮件营销
  • 设计资源网站大推荐/seo推广平台
  • 怎样改网站英文域名/流量神器
  • 婚纱网站建设规划书/百度一下你就知道下
  • 公司做自己的网站平台台/大连网站建设费用
  • 学做网站论坛vip视频/百度打广告多少钱一个月
  • 门户网站创建/推广方法
  • 中国建设监督网站/百度入口的链接
  • 新手怎样做网站推广/中国移动有免费的视频app
  • 深圳.网站建设/西安百度推广代运营
  • 怎么给幼儿园做网站/网站优化推广平台
  • 软件公司简介内容怎么写/上海seo顾问推推蛙
  • 网站运营者网址/南宁整合推广公司
  • wordpress 导航站/推广教程
  • 族谱网站开发/网站关键词排名优化工具
  • 舟山网站建设哪家好/网站竞价推广
  • 内容营销的形式有哪些/郑州百度seo
  • 做旅游网站的工作流程图/广告推广投放平台
  • 网站开发的方法和步骤/查权重网站
  • 建网站容易吗/一个免费的网站
  • 网站首页做一点开有动画/东莞网络推广优化排名
  • 免费网站推广咱们做/seo怎么提升关键词的排名
  • 国内大型电子网站建设/最近几天发生的新闻大事
  • 什么是网站模板设计/百度一下知道首页
  • 微信登录建设银行网站/百度关键词查询工具免费
  • DDD之整体设计流程(2)
  • Java 数学工具类 Math
  • MCU 中的 PWM(脉冲宽度调制)是什么?
  • 项目如何按时交付?重点关注的几点
  • 分享一个脚本,从mysql导出数据csv到hdfs临时目录
  • 【Unity笔记】Unity Camera.cullingMask 使用指南:Layer 精准控制、XR 多视图与性能提升