电子说
在电子设备的设计中,操纵杆是一种常见且重要的输入设备。今天我们就来详细探讨一下 Knowles 公司的 KJ - 33000 - 002 操纵杆 I2C 开发套件,看看它的特点、应用以及如何进行编程。
文件下载:KJ-33000-002.pdf
KJ - 33000 - 002 是一款开发套件,其中安装了 KJ - 3300 数字操纵杆,该操纵杆通过 I2C 接口进行通信。这份应用笔记主要介绍了如何与该操纵杆进行通信。
此操纵杆专为手持电信和电子设备而开发。若想了解更多当前应用说明,可参考制造商的网站(www.knowles.com)。大家不妨思考一下,在哪些具体的手持设备中,这种操纵杆能发挥最大的作用呢?
I2C 控制器最高可在 400kHz(快速模式)下运行,采用 7 位寻址方式。预编程的 I2C 地址为 0x38,如果 ADDR 线连接到 VDD,设备将响应地址 0x39。
从设备发起的读取操作会返回两个字节。第一个字节包含 X 轴的左对齐 4 位值,第二个字节包含 Y 轴的左对齐 4 位值,两个字节的最低 4 位都填充为 0。
向设备发起写入操作时,根据最低位的值,设备将进入低功耗模式或睡眠模式。最低位为‘1’时对应低功耗模式,为‘0’时对应睡眠模式。
当 X 或 Y 值发生变化时,开漏中断线会被置为低电平。当两个轴上连续为 0 时,不会产生中断。
使用 I2C 总线与操纵杆通信时,需要按照以下步骤进行:
以下是示例代码:
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
查找表可用于将位移数据转换为更有意义的值。通过将 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];
操纵杆有两种低功耗模式:低功耗模式和睡眠模式。要将操纵杆置于低功耗模式,只需向操纵杆写入最低位为 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();
在睡眠模式下,设备的电流消耗将达到最小值。
在实际设计中,大家要特别注意这些引脚的连接和使用,避免因引脚连接错误而导致设备无法正常工作。
通过以上对 KJ - 33000 - 002 操纵杆 I2C 开发套件的介绍,相信大家对其有了更深入的了解。在实际应用中,大家可以根据具体需求进行灵活编程和设计,充分发挥该套件的优势。
全部0条评论
快来发表一下你的评论吧 !