Прерывания (INT) модулей


#1

На пине разъема для подключения модулей есть ножка INT, вызывающая прерывания при изменении входов в частности модулей (WBIO-DI-HVD-8 и WBIO-DI-DR-16).
Она отлично выдаёт прерывание перепадом 0-1 при изменении состояния входов. Но только до тех пор, пока модуль подключен один. Как только подключаем в цепочку 2-3 (например вышеописанные), то INT начинает выдавать ерунду: либо реагирует только на 0 или на 1, либо вообще пропускает срабатывания входов. Любой из этих модулей по отдельности отлично работают с INT.
Какая хитрость есть в подключении INT для нескольких модулей? Как они соединяются в модулях между собой?


#2

А я правильно понимаю, что вы подключаете модули без нашего контроллера?


#3

Верно, к Raspberry Pi


#4

переведите INT у всех чипов mcp в open drain-режим


#5

Спасибо, но так я уже пробовал, не помогает записать в регистр IOCON нули по всем разрядам кроме ODR, который отвечает за открытый сток.

Может надо еще какой то разряд пнуть на 1?
Например INTPOL должен быть 1 или 0. Хотя я уже пробовал оба варианта.


#6

Более того, с регистром ODR вообще перестаёт хоть как то работать. Когда он в 0, то хотя бы иногда просачивается прерывание.


#7

Ничего не выходит, без ORD иногда просачивается прерывание, а с ORD вообще тишина от модулей. Причем когда один модуль, то все работает как часы, как только второй втыкаю, начинаются проблемы, приходит только 1, после того как задаю регистр ORD и на второй модуль, то вообще оба молчат как партизаны.

Может надо как то хитро подключить к малинке? Не напрямую на pin?


#8

Все я понял в чем дело. ORD нужен обязательно. Но надо не забывать после получения прерывания читать регистры чтения, чтобы прерывание “отпустило”, причем в моём случае оказалось, что читать надо не только с модуля где произошло прерывание, но и со всей цепочки модулей, стоит только с одного модуля не прочитать регистры, то всё - стопарятся прерывания, и вы больше никогда не их не получите.