This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TCA8418:在键盘矩阵模式下、返回两个值、而不是一个值

Guru**** 2387060 points
Other Parts Discussed in Thread: TCA8418
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/interface-group/interface/f/interface-forum/1381814/tca8418-in-keypad-matrix-mode-two-values-are-returned-instead-of-one

器件型号:TCA8418

工具与软件:

我正在使用 Adafruit_TCA8418库

我的配置如下:

Adafruit_TCA8418 keypad;

void setup()
{
  keypad.matrix(5, 10);
  keypad.flush();
}

并将我的代码打印到串行的任何按键或释放事件中。

void loop()
{
  if (keypad.available() > 0)
  {
    int k = keypad.getEvent();
    if (k & 0x80) Serial.print("PRESS\tR: ");
    else Serial.print("RELEASE\tR: ");
    k &= 0x7F;
    k--;
    Serial.print(k / 10);
    Serial.print("\tC: ");
    Serial.print(k % 10);
    Serial.println();
  }
}

除两种情况外、所有按键按压操作均已正确记录-位于矩阵位置的按钮:row0 col9和 row1 col9。  错误输出如下所示:

PRESS	R: 0	C: 9
PRESS	R: 9	C: 6
RELEASE	R: 0	C: 9
RELEASE	R: 9	C: 6

PRESS	R: 1	C: 9
PRESS	R: 9	C: 7
RELEASE	R: 1	C: 9
RELEASE	R: 9	C: 7

除了启用矩阵模式、似乎还有一些其他设置。 也启用了 mayby GPI 模式? 我已经检查了所有寄存器、设置似乎没有问题。

我非常感谢您提供任何提示。 提前感谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 P0gurek:

    我需要多一点时间来审核此申请。  

    此致、

    Tyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不用担心。 谢谢、Petr

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Petr:  

    根据我对问题的理解、按钮位于行0列9和行1列9中。  

    我不明白输出是如何错误的?

    位置 row0 col9中的按钮看起来正常。 按 R:0 C:9、正确释放 R:0 C:9。  

    R:9 C:6如果这是行1列9位置的按钮、则按下并释放看起来错误。  

    数据表中的关键事件表采用十进制数字格式。 将执行的数学运算是十六进制函数、我们在这里是否一致?  

    我们是否能够排除硬件问题与软件问题? 我们是否可以确认5 x 10布局中的其他按钮与位于位置 row0 col9和 row1 col9的按钮之间没有差异? 焊接问题等  

    此致、

    Tyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Tyler:

    感谢 您的及时回复!

    我准备了2块 PCB、它们装配有2个不同的 TCA8418模块(Adafruit TCA8418分线板)。 有5x10触控式开关、除上述2个开关外、所有开关都能按预期工作。 我在 KiCAD 的船上运行了 DRC、并对这2个位置进行了基本的连续性检查。 一切似乎都很好。

    我修改了代码以确保按钮返回正确的十进制数。 我可以确认、除位于位置10和20的按钮外、其余48个按钮均正常。 它们依次返回2个事件。

    PRESS	: 9
    RELEASE	: 9
    PRESS	: 10
    PRESS	: 97
    RELEASE	: 10
    RELEASE	: 97
    PRESS	: 11
    RELEASE	: 11
    ...
    PRESS	: 19
    RELEASE	: 19
    PRESS	: 20
    PRESS	: 98
    RELEASE	: 20
    RELEASE	: 98
    PRESS	: 21
    RELEASE	: 21

    数字97和98有什么含义吗? 是否可能是一些寄存器配置不当的情况?

    此致、

    Petr

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Adafruit 库存在错误、会将一些寄存器设置为不一致的值。 您可能会遇到与此问题相同的问题: 处于"20"位置的钥匙也总是发送一个"98"关键事件。 为什么? 尝试清除 GPI_EM 和 GPIO_INT_EN 寄存器。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Petr:

    这看起来可能是 Adafruit 库中的一个已知错误。

    https://github.com/adafruit/Adafruit_TCA8418/issues/4

    请查看提供的 Clemens 链接。  

    此致、

    Tyler

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢! 就是这样。

    我可以确认清除整个 GPI_EM1寄存器对我很有用。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢! 我将查看它。 谢谢、Petr