Contact me: hankecnc@gmail.com

默认情况下,键盘的选通针是否保持低电平? #22

推推 grbl 3年前 (2023-02-08) 322次浏览
打开
kfmut 打开了这个问题 2021 年 7 月 19 日 · 14条评论
打开

默认情况下,键盘的选通针是否保持低电平?#22

kfmut 打开了这个问题 2021 年 7 月 19 日 · 14条评论

评论

默认情况下,键盘的选通针是否保持低电平? #22

你好,

我有时间检查键盘插件,但立即遇到了闪光灯引脚保持低位的问题。通过相当古老的讨论terjeio/grblHAL#202,我的印象是默认情况下应该保持高位。我正在 blackpill 开发板上试验 stm32f411:

$I
[VER:1.1f.20210629:]
[OPT:VNSL2,35,1024,3,0]
[NEWOPT:ENUMS,RT+,TC]
[FIRMWARE:grblHAL]
[NVS STORAGE:*EEPROM]
[DRIVER:STM32F411]
[DRIVER VERSION:210705]
[BOARD:Custom BlackPill STMF411]
[PLUGIN:KEYPAD v1.00]

带选通针的自定义映射基本定义为:

#if KEYPAD_ENABLE
	#define KEYPAD_PORT		GPIOB
	#define KEYPAD_STROBE_PIN	7
	#define KEYPAD_STROBE_BIT	(1<<KEYPAD_STROBE_PIN)
#endif

我的设置的完整标题:
my_machine.txt
my_machine_map.txt

也许我设置了错误的映射,因为$pins命令没有列出键盘选通针?或者它不应该?顺便说一下,主轴 PWM 引脚也丢失了。

$pins
[PIN:PB6,Reset]
[PIN:PB4,Feed hold]
[PIN:PB3,Cycle start]
[PIN:PA15,Probe]
[PIN:PB12,X limit min]
[PIN:PB13,Y limit min]
[PIN:PB14,Y limit min 2]
[PIN:PB15,Z limit min]
[PIN:PA1,X step]
[PIN:PA3,Y step]
[PIN:PA5,Z step]
[PIN:PB0,Y step]
[PIN:PA2,X dir]
[PIN:PA4,Y dir]
[PIN:PA6,Z dir]
[PIN:PB1,Y dir]
[PIN:PB10,Steppers enable]
[PIN:PA9,Spindle on]
[PIN:PA10,Spindle direction]
[PIN:PA7,Flood]

如果未供电的 arduino nano 连接到 I2C SDA/SCL/GND 引脚,为什么 grblHAL 可能无法读取 I2C 内存芯片?error:7 - An EEPROM read failed. Auto-restoring affected EEPROM to default values. SDA/SCL 引脚上存在上拉电阻 (3.3kOhm)。如果我断开 nano 一切正常,如果 nano 在 blackpill 之前供电一切也正常。

默认情况下,键盘的选通针是否保持低电平? #22
贡献者

也许我把映射设置错了,因为 $pins 命令没有列出键盘选通针?或者它不应该?

不,是我的错。改变:

STM32F4xx/Src/driver.c

第 114 至 116 行 3a539e6

#ifdef KEYINTR_PIN _
{ 。id = Input_KeypadStrobe, . 端口= KEYINTR_PORT, . pin = KEYINTR_PIN, . = PinGroup_Keypad },
#结尾

 

#ifdef KEYPAD_STROBE_PIN
    { .id = Input_KeypadStrobe,   .port = KEYPAD_PORT,        .pin = KEYPAD_STROBE_PIN,    .group = PinGroup_Keypad },
#endif

希望这能让它起死回生。请注意,GPIO 中断处理对于 STM32 处理器来说有点特殊,因此可能必须更改/复制键盘选通引脚的处理程序代码。我没有编码和测试所有可能的端口和引脚组合,仅针对当前的引脚映射。

顺便说一下,主轴 PWM 引脚也丢失了。

可能还有其他非普通 GPIO 引脚,新的 $pins 命令正在开发中,请耐心等待。我有很多驱动程序可以添加到其中。

如果未供电的 arduino nano 连接到 I2C SDA/SCL/GND 引脚,为什么 grblHAL 可能无法读取 I2C 内存芯片?

没动力的nano挂大巴?两个引脚上的电压应为 3.3V 或总线卡住。

默认情况下,键盘的选通针是否保持低电平? #22
作者

@terjeio

结果不太好:-D 尝试在 PB7 和 PB15(用于 generic_map.h)上使用闪光灯,如果这些引脚拉低 MCU 或 grblHAL 锁,则对 ioSender 命令没有反应。在这些引脚上添加了外部上拉电阻,结果相同。也许我应该尝试 PB0,我认为它被用于某些映射文件?

可能还有其他非普通 GPIO 引脚,新的 $pins 命令正在开发中,请耐心等待。我有很多驱动程序可以添加到其中。

抱歉,不知道它是 WIP,在问题或讨论的某个地方捡到它。但是修改driver.c后Keypad strobepin出现了:$pins

$pins
[PIN:PB6,Reset]
[PIN:PB4,Feed hold]
[PIN:PB3,Cycle start]
[PIN:PA15,Probe]
[PIN:PB15,Keypad strobe] <<<<<
[PIN:PB12,X limit min]
[PIN:PB13,Y limit min]
[PIN:PB14,Y limit min 2]
[PIN:PB7,Z limit min]
[PIN:PA1,X step]
[PIN:PA3,Y step]
[PIN:PA5,Z step]
[PIN:PB0,Y step]
[PIN:PA2,X dir]
[PIN:PA4,Y dir]
[PIN:PA6,Z dir]
[PIN:PB1,Y dir]
[PIN:PB10,Steppers enable]
[PIN:PA9,Spindle on]
[PIN:PA10,Spindle direction]
[PIN:PA7,Flood]

没动力的nano挂大巴?两个引脚上的电压应为 3.3V 或总线卡住。

是的,看起来像通过 GPIO 引脚上的钳位二极管,Nano 正试图为自身供电,因此 SDA/SCL 引脚被降至 +1.6V。谢谢你的提示!

默认情况下,键盘的选通针是否保持低电平? #22
贡献者

也许我应该尝试 PB0,我认为它被用于某些映射文件?

您必须检查 driver.c 中的中断处理程序以找出支持哪些引脚,似乎引脚 0、引脚 9-5 和引脚 10-15 来自快速检查。

当将频销拉动时,触发了I2C读取的低读数,键盘控制器应通过传输包含键代码的字节来做出响应。可以?还是公交车又被困了?请注意,我没有为传输添加任何超时,因此这可以解释挂起。

在下一个版本中,我将添加对使用键盘插件的 UART 通信作为选项的支持,这将更容易编程,但取决于是否有可用的免费 UART 端口。最近比较忙,所以最快这个月晚些时候发布。

默认情况下,键盘的选通针是否保持低电平? #22
作者

@terjeio

您必须检查 driver.c 中的中断处理程序以找出支持哪些引脚,似乎引脚 0、引脚 9-5 和引脚 10-15 来自快速检查。

我会试着调查一下。谢谢你!

当将频销拉动时,触发了I2C读取的低读数,键盘控制器应通过传输包含键代码的字节来做出响应。可以?还是公交车又被困了?请注意,我没有为传输添加任何超时,因此这可以解释挂起。

嗯,可能就是这样。我试图将从属设备上的 I2C 地址更改为 0x50(EEPROM),它确实从 grblHAL 收到数据请求,但如果它设置为 0x49,则没有数据请求出现,但我的测试草图目前非常愚蠢。我想我会尝试搜索 I2C 总线嗅探器草图,看看发生了什么。

在下一个版本中,我将添加对使用键盘插件的 UART 通信作为选项的支持,这将更容易编程,但取决于是否有可用的免费 UART 端口。最近比较忙,所以最快这个月晚些时候发布。

哇,这真的很有趣!我猜我购买 BlackPill 而不是一些 NUCLEO 开发板来进行我的测试不是很明智,它太有限了:-)

默认情况下,键盘的选通针是否保持低电平? #22
作者
kfmut 评论了 2021 年 7 月 23 日  

@terjeio

keypad_keyclick_handlerEXTI0_IRQHandler在引脚 0、10、15(和)的中断处理程序中被调用EXTI15_10_IRQHandler,试图将选通信号映射到 PB15、PB0 和 PA0(Blackpill 上的用户键)。拉低 PB15 引脚导致挂起,PA0/PB0 拉低它们没有任何响应。从未在从属设备上收到任何 i2c 请求,甚至尝试使用由 +3V3 Blackpill 供电的 arduino pro mini 来避免电平转换的任何问题。

默认情况下,键盘的选通针是否保持低电平? #22
贡献者

几天后我“恢复业务”时,我会检查一下。

默认情况下,键盘的选通针是否保持低电平? #22
作者

@terjeio

那太好了,谢谢!

默认情况下,键盘的选通针是否保持低电平? #22
贡献者

PA0/PB0 有一个小错别字,KEYPAD_ENABLEDKEYPAD_ENABLE哪个是正确的。当这个问题得到纠正时,我基于 MSP430 的键盘可以工作(我使用的是 BOARD_MORPHO_CNC 映射,其中 PB0 映射到选通信号)。

我将很快(今天晚些时候?)提交允许 UART 输入的更新,keypad_enqueue_keycode()使用键码调用以触发操作,发送0x850x18取消它(如果它是慢跑)。

默认情况下,键盘的选通针是否保持低电平? #22
作者

@terjeio

PA0/PB0 有一个小错字,KEYPAD_ENABLED 与 KEYPAD_ENABLE 是正确的。当这个问题得到纠正时,我基于 MSP430 的键盘可以工作(我使用的是 BOARD_MORPHO_CNC 映射,其中 PB0 映射到选通信号)。

是的,它在工作,有点奇怪但在工作,我猜这是映射到用户密钥的反跳问题,我正在使用它:-)谢谢!

我将很快(今天晚些时候?)提交允许 UART 输入的更新,使用键码调用 keypad_enqueue_keycode() 以触发操作,发送 0x85 或 0x18 以取消它(如果是慢跑移动)。

对不起,我不明白后面关于打电话的部分keypad_enqueue_keycode

默认情况下,键盘的选通针是否保持低电平? #22
作者

@terjeio

您好,很抱歉又打扰您了。

我已经将 TI 的 txs0104e 逻辑电平转换器添加到 i2c 总线和我的 BOB 上的键盘选通线,但我仍然无法解决键盘选通引脚奇怪行为的问题。grblHAL 总是从 i2c-slave 设备请求键码,在引脚拉低和引脚拉高时。

是否有可能在此引脚状态请求中,grblHAL 始终将引脚拉低?

STM32F4xx/Src/driver.c

1994 年至 1995 年的行 c3332e5

# elif defined(KEYPAD_ENABLE) && KEYPAD_STROBE_BIT & (1<<0)
keypad_keyclick_handler ( DIGITAL_IN (KEYPAD_PORT, KEYPAD_STROBE_BIT) == 0 );

 

所以在这段代码中,I2C_GetKeycode总是只调用函数?

https://github.com/grblHAL/Plugin_I2C_keypad/blob/4d3f3d54f86b340fdda788ce383509faa874f7c9/keypad.c#L337-L349

我试图将处理程序更改为此

#elif defined(KEYPAD_ENABLE) && KEYPAD_STROBE_BIT & (1<<0)
        keypad_keyclick_handler(DIGITAL_IN(KEYPAD_PORT, KEYPAD_STROBE_BIT));
ISR_CODE void keypad_keyclick_handler (uint8_t keydown)
{
    size_t bufSize = 50;
    char * buf = ( char * )malloc( bufSize );
    memset( buf, 0, bufSize );
    snprintf(buf, bufSize, "keypad_keyclick_handler >%hhu<", 1 );
    //report_message( buf, Message_Plain );
    free( buf );

    keyreleased = !(keydown == 0 );

    if(keydown == 0){
        report_message("keypad i2c request", Message_Plain);
        I2C_GetKeycode(KEYPAD_I2CADDR, i2c_enqueue_keycode);
        }
    else{
        report_message("keypad key release", Message_Plain);
        if(jogging) {
            report_message("keypad stop jogging", Message_Plain);
            jogging = false;
            protocol_enqueue_realtime_command(CMD_JOG_CANCEL);
            keybuf.tail = keybuf.head; // flush keycode buffer
            }
        }
}

我从来没有看到过那些keypad key release消息,只有keypad i2c request一些。猜猜这很简单,但我没有看到。

默认情况下,键盘的选通针是否保持低电平? #22
贡献者

猜猜这很简单,但我没有看到。

这是我的重构错误 – 对此感到抱歉。错误在这一行:
keypad_keyclick_handler(DIGITAL_IN(KEYPAD_PORT, KEYPAD_STROBE_BIT) == 0);
它应该是这样的:
keypad_keyclick_handler(DIGITAL_IN(KEYPAD_PORT, KEYPAD_STROBE_PIN) == 0);

默认情况下,键盘的选通针是否保持低电平? #22
作者

@terjeio

谢谢!我已经在我的路由器上用一个简单的来回例程对其进行了几个小时的测试,它按预期工作。

我是否正确理解,为了让它 100% 正确工作,键盘的慢跑距离应该设置为一些大的数字,慢跑的软限制($40 参数)应该关闭,硬限制是必须的吗?如果点动距离设置为 10mm 之类的东西,我需要按键盘上的点动键几次才能移动超过 10mm?

默认情况下,键盘的选通针是否保持低电平? #22
贡献者

我是否正确理解,为了让它 100% 正确工作,键盘的慢跑距离应该设置为一些大的数字,慢跑的软限制($40 参数)应该关闭,硬限制是必须的吗?

您可以打开 $40 并设置长距离,然后实际点动距离将被限制在机器工作空间内。但只有当最大行程设置正确($13x)并且机器归位时。

如果点动距离设置为 10mm 之类的东西,我需要按键盘上的点动键几次才能移动超过 10mm?

是的,但即使是长点动距离,配置的点动也会在按键释放时缩短。只要按下点动按钮,选通线就应该保持低电平,这与选通线应该是脉冲的其他按钮不同。

默认情况下,键盘的选通针是否保持低电平? #22
作者

@terjeio

您可以打开 $40 并设置长距离,然后实际点动距离将被限制在机器工作空间内。但只有当最大行程设置正确($13x)并且机器归位时。

我想我已经测试过键盘设备的配置和点动移动被 grblHAL 忽略了,我稍后会尝试重新检查。

…与闪光灯线应为脉冲的其他按钮不同。

谢谢你的澄清,不知道。

免费注册 在 GitHub 上加入此对话。已有帐户? 登录评论
标签
还没有
项目

还没有

发展

没有分支机构或拉取请求

2名参加者
默认情况下,键盘的选通针是否保持低电平? #22默认情况下,键盘的选通针是否保持低电平? #22

喜欢 (0)