I am using IO Pi Zero for 16 channels.
Following the tutorial4.py example but modified it slightly for 16 channels sand only connecting pin1 and pin9.
The code is shown below.
The modules works nicely when the button (1 or 9) is pushed at larger interval.
In this case, until after the biz logic is completed and the ready print statement
is shown on the console. [print("ready and waiting for next button push...")]
The issue occurred when the button was pushed at small interval continuously.
It did not take very long before the module stopped responding to button pushed.
I used the same resistor (1K) for the INT-A voltage divider.
Measuring the voltage on the board on normal operation:
When the button is not pushed about 2.5V.
When pushed it's 0.0V as expected.
When the module was locked up, the voltage did not recover to 2.5V after releasing
the button. It stayed at 0.0V.
Any suggestions will be appreciated.
Thanks,
Gabe
def init_hw(): global bus bus = IOPi(0x20) bus.set_port_direction(0, 0xFF) bus.set_port_direction(1, 0xFF) bus.set_port_pullups(0, 0xFF) bus.set_port_pullups(1, 0xFF) bus.invert_port(0, 0xFE) bus.invert_port(1, 0xFE) bus.set_interrupt_polarity(0) bus.mirror_interrupts(1) bus.set_interrupt_defaults(0, 0x00) bus.set_interrupt_defaults(1, 0x00) bus.set_interrupt_type(0, 0xFF) bus.set_interrupt_type(1, 0xFF) GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_OFF) subscribe_interrupt_event()def subscribe_interrupt_event(): bus.set_interrupt_defaults(0, INTERRUPT_DEFAULT) bus.set_interrupt_defaults(1, INTERRUPT_DEFAULT) bus.set_interrupt_on_port(0, 0x01) bus.set_interrupt_on_port(1, 0x01) bus.reset_interrupts() GPIO.add_event_detect(12, GPIO.FALLING, callback=button_pressed)def unsubscribe_interrupt_event(): bus.set_interrupt_on_port(0, 0x00) bus.set_interrupt_on_port(1, 0x00) bus.reset_interrupts() # temporary unsubscribe to event GPIO.remove_event_detect(PIN_INTERRUPT)def button_pressed(pin_interrupt): global bus intval_p0 = bus.read_interrupt_capture(0) intval_p1 = bus.read_interrupt_capture(1) intval_status_p0 = bus.read_interrupt_status(0) intval_status_p1 = bus.read_interrupt_status(1) p0_read = bus.read_port(0) p1_read = bus.read_port(1) while (intval_p0 == p0_read and intval_p1 == p1_read): print("sleep to wait for changes in port value...") time.sleep(0.2) p0_read = bus.read_port(0) p1_read = bus.read_port(1) # unsubscribe to event unsubscribe_interrupt_event() # do biz logic here then sleep time.sleep(1) subscribe_interrupt_event() bus.reset_interrupts() print("ready and waiting for next button push...")