我需要在rasperry PI上安装许多I2C总线,所以我使用常用的GPIO编写了自己的I2C控制器
它在使用BCM GPIO 2和3时工作,但在使用其他GPIO时不工作。 根据schematics,GPIO 2和3通过1.8KOhm电阻器上拉至VCC
我想知道为什么需要这个上拉电阻器,因为GPIO可以在BCM内部上拉(当时不确定电阻值,可能被认为对I2C来说太弱了)。。。无论如何
使用Rpi.GPIO
时,应使用以下语句控制此“软件”上拉:
GPIO.setup(<gpio_pin>, GPIO.IN, pull_up_down=GPIO.PUD_UP)
因此,我编写了以下测试代码来测试:
GPIO.setmode(GPIO.BOARD)
gpios= [3,5,29,31] #board numbering (2,3,5,6 in BCM)
GPIO.setup(gpios, GPIO.IN, pull_up_down=GPIO.PUD_UP)
for gpio in gpios: #test pin for pin
print(">>>>> ", gpio)
GPIO.setup(gpio, GPIO.IN, pull_up_down=GPIO.PUD_UP)
res= GPIO.input(gpio)
print res
返回
./r:15: RuntimeWarning: A physical pull up resistor is fitted on this channel!
GPIO.setup(gpios, GPIO.IN, pull_up_down=GPIO.PUD_UP)
('>>>>> ', 3)
./r:18: RuntimeWarning: A physical pull up resistor is fitted on this channel!
GPIO.setup(gpio, GPIO.IN, pull_up_down=GPIO.PUD_UP)
1
('>>>>> ', 5)
1
('>>>>> ', 29)
0
('>>>>> ', 31)
0
没有连接到任何引脚,因此没有任何下拉
奇怪的是,我得到了关于电路板引脚3的警告,但不是5,尽管两个引脚都被从外部拔出(?)
但更重要的是,上面的结果告诉我,我的软件控制的上拉失败了。我应该在所有四个GPIO上都得到“1”
我是否误解了Rpi.GPIO的作用
pull_up_down=GPIO.PUD_UP/GPIO.PUD_DOWN
不能用于安装了物理电阻器的管脚。您要使用的管脚是fitted with a physical restistor
相关问题 更多 >
编程相关推荐