注释
成员
@vlachoudis:限制输入和引出线输入必须在不同的端口上。我不记得我是否将那个注释写到这个引脚映射文件中,但你不能将它们组合到模拟端口上。 |
贡献者
@vlachoudis更好地解释错误消息。 protocol.c 中的 Pinmap.h 会将它们都定义为 ISR(PCINT1_vect),这就是它说多重定义的原因。 你可以让它工作,但它是一些不适合主流 GRBL 的自定义代码 |
作者
谢谢你。我通过移动数字端口上的复位、冷却液、进给保持来解决了这个问题。所以这两个中断是独立的 瓦西利斯 在 2014 年 6 月 21 日 08:02,Rob Brown notifications@github.com写道: @vlachoudis https://github.com/vlachoudis 更好地解释错误消息。 protocol.c 中的 Pinmap.h 会将它们都定义为 ISR(PCINT1_vect),这就是它说多重定义的原因。 你可以让它工作,但它是一些不适合主流 GRBL 的自定义代码 — |
不是真正的 grbl 问题,但我没有在任何地方找到 grbl 论坛来提交我的问题:
在我的机器中,我制作了一个自定义的 arduino 屏蔽,其上的限位开关位于模拟引脚(A0-A2,上拉)上,我修改了 pin_map.h 以在 PORTC 上设置 LIMIT 开关,但我得到以下编译错误:
limits.o: In function
__vector_4': limits.c:(.text.__vector_4+0x0): multiple definition of
__vector_4′protocol.o:protocol.c:(.text.__vector_4+0x0): 首先在这里定义
collect2: error: ld returned 1 exit status
在此先感谢
Vasilis
这是我的自定义配置
ifdef PIN_MAP_ARDUINO_UNO_CUSTOM
//对于自定义引脚映射或不同的处理器,复制并粘贴默认引脚映射之一
//上面的设置并根据您的需要进行修改。然后,确保定义的名称也在
config.h 文件中 // 更改。
// 串口引脚
#define SERIAL_RX USART_RX_vect
#define SERIAL_UDRE USART_UDRE_vect
// 注意:所有步进位和方向引脚必须位于同一端口上。
#define STEPPING_DDR DDRD
#define STEPPING_PORT PORTD
#define X_DIRECTION_BIT 2 // Uno 数字引脚 5
#define Y_DIRECTION_BIT 3 // Uno 数字引脚 6
#define Z_DIRECTION_BIT 4 // Uno 数字引脚 7
#define X_STEP_BIT 5 // Uno 数字引脚 2
#define Y_STEP_BIT 6 // Uno 数字引脚 3
#define Z_STEP_BIT 7 // Uno 数字引脚 4
#define STEP_MASK ((1<<X_STEP_BIT)|(1<<Y_STEP_BIT)|(1<<Z_STEP_BIT)) // 所有步骤位
#define DIRECTION_MASK ((1<<X_DIRECTION_BIT)|(1<<Y_DIRECTION_BIT)|(1 <<Z_DIRECTION_BIT)) // 所有方向位
#define STEPPING_MASK (STEP_MASK | DIRECTION_MASK) // 所有与步进相关的位(步进/方向)
#define STEPPERS_DISABLE_DDR DDRB
#define STEPPERS_DISABLE_PORT PORTB
#define STEPPERS_DISABLE_BIT 4 // Uno 数字引脚 8
#define STEPPERS_DISABLE_MASK (1<<STEPPERS_DISABLE_BIT)
// 注意:所有限制位引脚必须在同一端口上
#define LIMIT_DDR DDRC
#define LIMIT_PIN PINC
#define LIMIT_PORT PORTC
#define X_LIMIT_BIT 2 // Uno Analog Pin 2
#define Y_LIMIT_BIT 1 // Uno Analog Pin 1
#define Z_LIMIT_BIT 0 // Uno 模拟引脚 0
#define LIMIT_INT PCIE1 // 引脚变化中断使能引脚
#define LIMIT_INT_vect PCINT1_vect
#define LIMIT_PCMSK PCMSK1 // 引脚变化中断寄存器
#define LIMIT_MASK ((1<<X_LIMIT_BIT)|(1<<Y_LIMIT_BIT)|(1<<Z_LIMIT_BIT)) // 所有限制位
#define SPINDLE_ENABLE_DDR DDRB
#define SPINDLE_ENABLE_PORT PORTB
#define SPINDLE_ENABLE_BIT 0 // Uno 数字引脚 12
#define SPINDLE_DIRECTION_DDR DDRB
#define SPINDLE_DIRECTION_PORT PORTB
#define SPINDLE_DIRECTION_BIT 5 // Uno 数字引脚 13(注意:由于 LED,D13 不能被拉高输入。)
//???
#define COOLANT_FLOOD_DDR DDRC
#define COOLANT_FLOOD_PORT PORTC
#define COOLANT_FLOOD_BIT 3 // Uno 模拟引脚 3
// 注意:Uno 模拟引脚 4 和 5 保留用于 i2c 接口,如果闪存和内存空间允许,可能会在
// 以后安装。
// #define ENABLE_M7 // 默认禁用喷雾冷却剂。取消注释以启用。
#ifdef ENABLE_M7
#define COOLANT_MIST_DDR DDRC
#define COOLANT_MIST_PORT PORTC
#define COOLANT_MIST_BIT 4 // Uno 模拟引脚 4
#endif
// 注意:所有引脚必须位于同一端口
#define PINOUT_DDR DDRC
#define PINOUT_PIN PINC
#define PINOUT_PORT PORTC
#define PIN_RESET 3 // Uno Analog Pin 0
#define PIN_FEED_HOLD 4 // Uno Analog Pin 1
#define PIN_CYCLE_START 5 / / Uno 模拟引脚 2
#define PINOUT_INT PCIE1 // 引脚变化中断使能引脚
#define PINOUT_INT_vect PCINT1_vect
#define PINOUT_PCMSK PCMSK1 // 引脚变化中断寄存器
#define PINOUT_MASK ((1<<PIN_RESET)|(1<<PIN_FEED_HOLD)|(1 <<PIN_CYCLE_START))
万一