所有关于电路
项目

夸克D2000 I2C接口:添加一个光传感器和液晶

2017年1月12日通过雷蒙德热那亚

熟悉使用I2C夸克D2000开发板接口环境光传感器和液晶。

熟悉使用I2C夸克D2000开发板接口环境光传感器和液晶。

以前,我们提出了一个夸克D2000发展局的概述。随后,我们研究了董事会的GPIO和beplay体育下载不了PWM的使用。

在这个项目中,我们将探讨使用I2C D2000板的beplay体育下载不了接口环境光传感器和一个齿轮(chip-on-glass) LCD。

自从我们上次报告,董事会的一个新版本的软件接口已经发布(ISSM_2016.1.067)和一些文档已经更新。一定要让下面的参考资料链接:

本文软件文件的所有程序可以通过点击下面的链接栏下载:

D2000_Part_3p1c_Code.zip

基本的I2C编程

说明最基本的使用D2000董事会I2C接口,我们可以比较的过程,与无处不在的Arduino Uno一起使用。我们将接口BH1750FVI环境光传感器,使用如下所示的模块,每个董事会。

BH1750模块

BH1750环境光传感器模块(左面板)和连接连接(右面板)

这个便宜的模块已经存在了一段时间,可以从几个来源(例如,1,2)。它的选择作为一个例子,因为编程使用板是短而简单的。连接模块也简单(见上图的右边面板),它可以用于3.3 v和5 v系统。

首先,连接董事会UNO和运行包括程序、BH1750.ino。您应该看到勒克斯值滚动的连续监测。看程序清单,请注意,我们第一个# include wire.h 在安装和使用声明wire.begin () ()。然后,我们调用这个函数initBH1750(),从设置()。最后,我们在循环读取传感器的值()。

初始化传感器initBH1750()我们使用语句:

(1)Wire.beginTransmission (BH1750addr);

(2)Wire.write (BHmodedata);

然后,(3)Wire.endTransmission ()

语句;1)设置传感器传输的地址使用变量BH1750addr, 2)提示写变量的初始化代码BHmodedata传感器,以及3)写数据的传感器。

在循环()部分,我们阅读传感器使用语句:

(1)线。requestFrom (BH1750addr BYTES2READ);

(2)BHlxdata[0] =(字节)Wire.read ();BHlxdata[1] =(字节)Wire.read ();

这些语句;1)发送一个请求到设备读取两个字节的数据(勒克斯值),和2)从传感器读取两个字节并将它们存储在变量。然后程序将读取的字节转换为勒克斯值和输出值的连续监测。

BH1750。c是D2000董事会的类似的项目。在连接传感器模块之后,您可以编译和运行这个程序,首先创建一个新项目的D2000董事会(确保您指定QMSI 1.1)在系统工作室使用现有的模板(“Hello World”没问题)。重命名它,然后复制粘贴BH1750。c /现有代码(c),您已经准备好构建和运行程序。所有的包括D2000项目将以同样的方式工作。

为了了解D2000 I2C如何工作,我们可以比较两个项目。

第一,而不是包括线。h,我们将包括qm_i2c.h。这个头文件和相关的c文件包含I2C程序的源代码。这是一个非常不错的主意熟悉这两个文件,如果你想使用和理解I2C在黑板上。你会发现他们在您的安装目录\ IntelSWTools \ ISSM_2016.1.067 \固件\ bsp \ 1.1 \驱动程序和固件IntelSWTools \ ISSM_2016.1.067 \ \ bsp \ 1.1 \ \包括司机

函数wireBegin()包含必要的设置调用使用I2C和下面列出的代码。

/ *实现I2C 0 * / clk_periph_enable (CLK_PERIPH_CLK | CLK_PERIPH_I2C_M0_REGISTER);/ *设置IO别针SDA和sci * / qm_pmux_select (QM_PIN_ID_6 QM_PMUX_FN_2);qm_pmux_select (QM_PIN_ID_7 QM_PMUX_FN_2);/ * * / I2Ccfg I2C配置。address_mode = QM_I2C_7_BIT;I2Ccfg。模式= QM_I2C_MASTER;I2Ccfg。速度= QM_I2C_SPEED_STD;/ *设置配置通过结构和返回如果失败* / (qm_i2c_set_config (QM_I2C_0 &I2Ccfg)) {QM_PUTS(“错误:I2C_0配置\ n”); return (errno); } else { return (0); }

首先,我们让I2C的时钟。接下来,我们选择所需的功能的I / O引脚将用于SDA和sci I2C线。在这方面,你可以下载一个方便的插图识别每个委员会的I / O引脚和多路复用功能。

全局变量部分中,我们定义了一个结构线:qm_i2c_config_t I2Ccfg。

我们的下一步是使用这种结构的I2C配置参数。具体来说,我们将寻址模式设置为7位,角色的主人,和速度的标准。最后,我们将这个配置通过调用系统函数,qm_i2c_set_config()与我们的配置结构作为参数。

上面的代码行中使用定义在qm_i2c.h出现。例如;QM_I2C_SPEED_STD设置速度为100 Kbps,而QM_I2C_SPEED_FAST速度设置为400 Kbps,和QM_I2C_SPEED_FAST_PLUS集1 Mbps的速度。

我们initBH1750()函数读取传感器的值。的积分分量函数调用系统函数qm_i2c_master_write ()。

uint8_t BHmodedata [1] = {0 x10};/ * BH1750初始化代码1勒克斯分辨率* /如果(qm_i2c_master_write (QM_I2C_0、BH1750addr BHmodedata, sizeof (BHmodedata),真的,&I2Cstatus)){返回(errno);/ *错误代码(errn) * /}

我们定义一个数组(BHmodedata[]),我们想要发送的数据,我们调用函数与参数:

  • I2C号码(只有一个I2C接口在黑板上)
  • 传感器模块的地址(BH1750addr中定义全局变量部分)
  • 一个指向数据的指针数组(BHmodedata)
  • 发送的字节数(sizeof (BHmodedata))
  • 停止位规范(真实=发送一个停止位)
  • 一个变量的地址来接收状态(&I2Cstatus -中定义全局变量部分)

再一次,看到qm_i2c的系统文件。h的更详细的信息调用和参数。

其余的程序将读取的字节转换为勒克斯值和输出值通过串口系统工作室(参见开始指南说明建立FTDI串行电缆)。

添加一个I2C液晶

C0220商业液晶

纽黑文NHD-C0220BiZ-FSW-FBW-3V3M液晶

在使用串行输出的FTDI电缆方便,一个简单的液晶是许多独立项目的必要性。一旦我们熟悉基本的I2C编程,我们可以添加一个LCD并没有太大的困难。

我选择了一个纽黑文NHD-C0220BiZ-FSW-FBW-3V3M可以从这些来源(1,2]。

单位是3.3伏,Chip-on-Glass(齿轮)LCD脆2 x 20显示。I2C地址是0 x3c(右移0 x78)。你一定会想要的数据表的显示模式以及控制器的数据表,这是一个ST7036i。

除了显示,只有少数D2000要求其他组件接口和下面的示意图(根据示意图C022BiZ数据表)显示了整个电路。

完成接口C0220BiZ D2000的示意图。点击放大

几点关于示意图是值得注意的。我用10 k引体向上SDA和sci线电阻和纽黑文建议的价值(例如,看到在这里)。

我还用跳线与连接器上拉电阻这一块做空可以定位包括(连接器)或(连接器)排除在I2C行——方便如果你已经安装了上拉电阻。

C1和C2的值在C022BiZ推荐数据表并通常的旁路电容器C3。GPIO5连接到复位销(RST、活性低)LCD,允许软件重置液晶。

组件 描述
BOM的LCD接口
R1, R2 10 kΩ电阻器
C1, C2 1.0µf电容器
C3 1。µf电容器
j - 1, J2 2-pole跳w /连接器

注意,LCD接口针之间的间距是2.0毫米,而销孔的间距常见的案板和perfboard是2.54毫米(0.100英寸)。有几种方法解决差异和我选择的方式是使用一个适配器板如下图所示。

适配器安装LCD

适配器安装LCD

适配器设计XBee产品但它有我们需要的能力。首先,切板中间。这将给你两个板适合我们的目的。然后,你也可以焊接液晶领导和一个共同的2.54 mm间距头直接向董事会。后者头是案板友好。适配器是可用的在这里还有类似的样子这一个,也看起来会工作。

自液晶只有8针和适配器提供10针,可以使用额外的两个洞从阳极和阴极针运行导致背光的LCD。

一旦液晶有线连接到D2000,是时候测试出来。包括程序,C0220BiZdemo。c会做到这一点。后显示一个简单的欢迎消息,它将循环通过字符集。是有用的检查所有连接和连接正确。

液晶图书馆

促进使用液晶,我决定编写一个小型图书馆,适用于一般使用在各种各样的项目。这段代码包含在C0220BiZ_Lib软件下载。h和C0220BiZ_Lib.c。您可以检查这些文件在每个细节的库函数,下面简要描述。

  • 空白LCD_reset C0220BiZ(空白)——硬件复位

  • int LCD_init(空白)——初始化C0220BiZ

  • int LCD_clr(空白)——清除C022BiZ屏幕

  • int LCD_home(空白)——DDRAM地址设置为0 x00

  • int LCD_display (uint8_t arg) - - -打开或关闭显示器

  • int LCD_cursor (uint8_t arg) - - -打开或关闭游标和眨眼

  • int LCD_write (const void *消息)——写字符串(零终止)当前DDRAM位置

  • int LCD_writexy (uint8_t x, y uint8_t const void *消息)——写字符串(空终止)x(列)和y(线)

  • int LCD_writedat (uint8_t基准面)——写一个字节DDRAM(当前位置)

  • int LCD_writedatxy (uint8_t x, y uint8_t uint8_t基准面),写一个字节在x(列)和y(线)

  • int LCD_gotoxy (uint8_t x, y uint8_t) - DDRAM地址设置为x(列)和y(线)

  • int LCD_contrast (uint8_t arg)——设置对比,0(低)- 15(高)

  • int LCD_ICC (uint8_t addr, uint8_t * chrcode uint8_t长度)——编写自定义字符数据CGRAM, addr = CGRAM字符地址鹿,chrcode = 8字节字符代码数组长度=数量的字节数组(通常8)

包括图书馆项目,只需复制C0220BiZ_Lib。h和C0220BiZ_Lib。c到项目文件夹。随后,用直线,C0220BiZ_Lib # include”。在你的主h”。c,将可见的功能使用。

包括程序,LCDdemo。c,演示了库函数。随着库文件,检查该代码将进一步解释的使用功能。图书馆是有点简陋,当然可以扩展和装饰。

液晶的自定义角色能力的一个例子,从LCDdemo.c

封闭的思想

在这个项目中,我们介绍了使用I2C接口夸克D2000发展委员会。我们使用的简单的例子BH1750环境光传感器,对比其使用的熟悉的Arduino的世界。从那里,我们可以轻松接口液晶和开发库例程的使用。

如果你来自Arduino的世界里,你可能,首先,发现使用I2C D2000董事会完全不同。一点经验,然而,你可能会看到,至少在一个基本水平,基本的程序不是很不同。事实上,你可能会发现D2000的例程提供更大的灵活性。

在这个项目的第2部分中,我们将结束我们的探索D2000董事会I2C接口,并添加一个颜色传感器和一个程序来识别物体的颜色。我们还将涉及使用异步I2C通过回顾BH1750环境光传感器。