KJ - 33000 - 002 操纵杆 I2C 开发套件编程与应用详解

电子说

1.4w人已加入

描述

KJ - 33000 - 002 操纵杆 I2C 开发套件编程与应用详解

在电子设备的设计中,操纵杆是一种常见且重要的输入设备。今天我们就来详细探讨一下 Knowles 公司的 KJ - 33000 - 002 操纵杆 I2C 开发套件,看看它的特点、应用以及如何进行编程。

文件下载:KJ-33000-002.pdf

一、产品概述

1. 产品描述

KJ - 33000 - 002 是一款开发套件,其中安装了 KJ - 3300 数字操纵杆,该操纵杆通过 I2C 接口进行通信。这份应用笔记主要介绍了如何与该操纵杆进行通信。

2. 应用场景

此操纵杆专为手持电信和电子设备而开发。若想了解更多当前应用说明,可参考制造商的网站(www.knowles.com)。大家不妨思考一下,在哪些具体的手持设备中,这种操纵杆能发挥最大的作用呢?

二、I2C 接口特性

1. 通信速率与寻址

I2C 控制器最高可在 400kHz(快速模式)下运行,采用 7 位寻址方式。预编程的 I2C 地址为 0x38,如果 ADDR 线连接到 VDD,设备将响应地址 0x39。

2. 数据读取

从设备发起的读取操作会返回两个字节。第一个字节包含 X 轴的左对齐 4 位值,第二个字节包含 Y 轴的左对齐 4 位值,两个字节的最低 4 位都填充为 0。

3. 写入操作与模式控制

向设备发起写入操作时,根据最低位的值,设备将进入低功耗模式或睡眠模式。最低位为‘1’时对应低功耗模式,为‘0’时对应睡眠模式。

4. 中断线

当 X 或 Y 值发生变化时,开漏中断线会被置为低电平。当两个轴上连续为 0 时,不会产生中断。

三、编程示例

1. 与操纵杆通信

使用 I2C 总线与操纵杆通信时,需要按照以下步骤进行:

  • 发送起始条件。
  • 发送设备地址(根据 ADDR 引脚为 0x38 或 0x39)并指示读取操作。
  • 当处于空闲状态时,从设备读取一个字节(X 位移),并发出确认信号。
  • 在下一个空闲状态时,读取另一个字节(Y 位移)。
  • 发出无确认信号,等待空闲状态并发出停止条件。

以下是示例代码:

IdleI2C();
IdleI2C (); // Wait for an Idle Condition 
StartI2C ();
StartI2C (); // Issue a Start Condition 
IdleI2C (); // Wait for an Idle Condition 
address = 0x38 < < 1 | 0x01; // Joystick Address Plus Read 
IdleI2C();
ack = WriteI2C (address); // Write the address plus read 
ack = WriteI2C (address);
IdleI2C();
IdleI2C (); // Wait for an Idle Condition 
Joystickx = ReadI2C ();
JoystickX = ReadI2C (); // Read Joystick X displacement 
AckI2C (); // Issue an Acknowledge Condition 
AckI2C();
IdleI2C();
IdleI2C (); // Wait for an Idle Condition 
Joysticky = ReadI2C ();
JoystickY = ReadI2C (); // Read Joystick Y displacement 
NotAckI2C();
NotAckI2C (); // Issue the No‐Ack Condition 
IdleI2C();
IdleI2C (); // Wait for an Idle Condition 
StopI2C();
StopI2C (); // Release the Bus

2. 查找表的使用

查找表可用于将位移数据转换为更有意义的值。通过将 JoystickX 和 JoystickY 变量的最高 4 位右移 4 位,每个操纵杆变量现在是 0 到 15 之间的数字(4 位)。可以使用一个简单的 16 字节数组作为查找表,将操纵杆输出的值转换为更相关的数字。例如:

char Xspeed[16] = {0,1,2,3,4,5,6,7,0, -1, -2, -3, -4, -5, -6, -7};

由于最高位表示正或负位移,操纵杆中有两种可能的零值(0b1000 和 0b0000)。数组中的数据将实际位移转换为与操纵杆物理位置对应的数字。查找表还可以将 4 位值扩展为有符号的 8 位值,例如:

char Xspeed[16] = {0,15,31,47,63,79,95,111,0, -15, -31, -47, -63, -79, -95, -111};

通过在数组中索引 JoystickX 值,可以线性扩展操纵杆输出的值。

LookupXSpeed = Xspeed[JoystickX];

3. 低功耗模式

操纵杆有两种低功耗模式:低功耗模式和睡眠模式。要将操纵杆置于低功耗模式,只需向操纵杆写入最低位为 1 的数据;要将其置于睡眠模式,写入的最低位必须为 0。以下是将操纵杆置于睡眠模式的示例代码:

IdleI2C (); // Wait for an Idle Condition 
StartI2C (); // Issue a Start Condition 
IdleI2C (); // Wait for an Idle Condition 
address = 0x38 < < 1 | 0x00; // Joystick Address Plus Write 
ack = WriteI2C (address); // Write the address plus read 
IdleI2C (); // Wait for an Idle Condition 
ack = WriteI2C (0); // Put the joystick into Low Pwr 
NotAckI2C (); // Issue the No‐Ack Condition 
IdleI2C (); // Wait for an Idle Condition 
StopI2C (); // Release the Bus 
IdleI2C();
StartI2C (); 
IdleI2C();
ack = WriteI2C (address); 
IdleI2C();
ack = WriteI2C(0);
NotAckI2C();
IdleI2C ();
StopI2C();

在睡眠模式下,设备的电流消耗将达到最小值。

四、I2C 演示板引脚说明

1. 引脚功能

  • (AV DD):模拟电源,典型值为 3.3V。
  • (Vio):I/O 电源,可为 1.8V 或连接到 (V_{D D})。
  • Test:连接到地。
  • ADDR:接地时地址为 0x38,连接到 (V_{D D}) 时地址为 0x39。
  • SCL:I2C 时钟线。
  • Int:操作时不是必需的,当 X 或 Y 值变化时被置位。
  • SDA:I2C 数据线。
  • (VPP):编程电源,连接到 VDD。
  • (Vss):数字地。
  • (V_{D D}):数字电源,典型值为 3.3V。
  • N/C:无连接。
  • (AVss):模拟地。
  • 角垫:连接到地以获得最佳 RF 性能。

在实际设计中,大家要特别注意这些引脚的连接和使用,避免因引脚连接错误而导致设备无法正常工作。

通过以上对 KJ - 33000 - 002 操纵杆 I2C 开发套件的介绍,相信大家对其有了更深入的了解。在实际应用中,大家可以根据具体需求进行灵活编程和设计,充分发挥该套件的优势。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分