Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用i2c从MCP23017读取引脚_Python_I2c - Fatal编程技术网

Python 使用i2c从MCP23017读取引脚

Python 使用i2c从MCP23017读取引脚,python,i2c,Python,I2c,我正在使用MCP23017和我的覆盆子圆周率。。现在我想试着对它进行编程。。但是我对i2c是新手,所以我想知道我所做的是否正确。。。我对报告中提到的读/写位感到困惑 我已将A0引脚连接至Vcc,并将A1、A2引脚连接至接地。。所以我想我的地址应该是0x21。。我已将IOCON.MIRROR位启用为“1”,以便在端口A或端口B输入发生更改时设置两个INTA/B。。。 现在我想通过读取INTCAP/Gpio引脚来清除可能发生的中断。 那么下面的命令正确吗- subprocess.call('i2cg

我正在使用MCP23017和我的覆盆子圆周率。。现在我想试着对它进行编程。。但是我对i2c是新手,所以我想知道我所做的是否正确。。。我对报告中提到的读/写位感到困惑

我已将A0引脚连接至Vcc,并将A1、A2引脚连接至接地。。所以我想我的地址应该是0x21。。我已将IOCON.MIRROR位启用为“1”,以便在端口A或端口B输入发生更改时设置两个INTA/B。。。 现在我想通过读取INTCAP/Gpio引脚来清除可能发生的中断。 那么下面的命令正确吗-

subprocess.call('i2cget', '-y', '0', '0x21', '0x12')
我觉得这是不对的。。。 有人能给我一些建议吗

提前谢谢大家,, 亲切问候,,
Namita.

根据您应用于A0、A1和A2的级别,设备的地址实际上是0x21。让我解释一下。。。 读/写位只是8位中的最后一位,它构成特定设备的完整地址字节。对于MCP设备,您必须始终提供地址的前7位,查看数据表,您将看到地址可以是0x20(十六进制:0010.0000)和0x27(十六进制:0010.0111)之间的任何内容。接下来,需要一个额外的位来指定方向:读取(1)或写入(0)。 该额外位由命令i2cget(=读取,将添加1)或命令i2cset(=写入,将添加0)隐式添加。 因此,最终,初始地址为0x20的MCP23017的完整i2c地址在写入时将为0x0100.0000(初始地址向左移动一位,写入位为0,将添加到右侧),并且在读取时将为0x0100.0001(与写入原理相同)。 也就是说,你的下一个问题是:重置设备后,所有管脚都被设置为输入,所以如果你想从设备的管脚中读取一些内容,那就可以了。接下来,复位后,组位也为0,这意味着操作端口a和端口B的寄存器彼此相邻。这对你来说也没问题。最后,您正在读取寄存器0x12,即GPIOA。也很好。唯一可以阻止您读取内容的是I2C总线号,因为您没有指定使用的是哪个Raspberry Pi。较旧的RPi使用总线0,较新的RPi使用总线1。 您必须检查的其他事项:您是否正确设置了导致中断生成的寄存器?如果是这样的话,每当输入管脚上发生变化时,INTA/B管脚将断言,直到您读取管脚的内容或其相应的INT寄存器内容。对于其余部分,我认为命令的设置没有任何错误(不是python部分,而是由字符串组成)。 您是否直接在命令行上尝试了bare i2cget命令以查看其是否正常工作?还有一个测试你可以做