Если кнопок многа, то делают программный "опорос", ставя на выход мультиплексор, типа 3->8 или 4->16 на "столбцы" кнопочной матрицы, а читают строки, можно и таким вот расширителем. Кстати PCF8574 согласно даташиту может работать на вход, а вот может ли работать на прием MCP23017 - не смотрел.
Алгоритм прост: подаем "код" от 0 до 15 на 4 управляющих входа мультиплексора, он формирует на соотв. столбе "1" и опрашиваем (если взять 1 порт целиком, то ровно 1 чтение) строчные входы. Смотрим "где" проскочила наша "1" и на пересечении стало быть кнопку и нажали. А может и в двух строках сразу .. дыве кнопки .. или больше.
Есть готовые "контроллеры клавиатуры" на этом принципе. Например КР580ВВ79, она ещё и индикатором типа LCD1602 (2 строки по 16 символов) .. есть "буржуйские аналоги", но я их не знаю.
Пасибки, буду иметь ввиду. Тем не менее, для такого количества кнопок я бы пошукал готовые модули контроллеров клавиатур. Наверняка есть такие матричные опросники в виде мелкосхемы... одной.
.. чем-то же клавиатуры детских музыкальных синтезаторов как-то опрашивают .. а там сейчас в основном игрушки с 8-ю "одновременными нажатиями" и до 4-5 октав по 12 клавиш...
Для меня слепошарого недостаток только корпус, а у 8574 он dip.
Ниправда Ваша, и в SO16 очень даже хороши.)))) А вот когда 8575 в ssop24 приехала, тут напрягся, принтер тоже, у него разрешение малое оказалось, лапы в один полигон слились, теперь на 1200dpi поглядываю, только от цен шалею.((((
Для меня слепошарого недостаток только корпус, а у 8574 он dip.
Диду! так MCP23016 /17 тоже есть в DIP. Я поначалу с ними делал платы.Еще у 23016 есть внешняя RC -цепочка(больше элементов при пайке), а у 23017 -нет.На выходы им не нужна подтяжка к плюсу как у PCF8574(у PCF Quasi-bidirectional I/Os). Но цены на них высоковастые.
Так вот прерывание срабатывает постоянно, с частотой раз 10-20 в сек, хотя я никакую кнопку не нажимаю. Пробовал разные условия срабатывания, пробовал подтягтвать к +5. Никакого эффекта. Что я не так делаю ?
скачайте Keypad_I2C, отлично работает и всё просто.
Библиотека у меня стоит, но тогда нужно делать опрос клавиатуры. А хочется сделать красиво, тем более что аппаратно все есть. Ну и разобраться хочется.
На ёлке лампочки зажигать.
по одной кнопке на лампочку?
На ёлке лампочки зажигать.
Каждую своей кнопкой?
теперь всю ночь не спать буду, варочаца, думать, кудыж в Ардуине 100 кнопок надо.
Да, ладно, спите спокойно. Вон, в соседней теме перцу надо "больше 200 модулей датчиков сервомеханизмов и т д", и ничего :)
по одной кнопке на лампочку?
По две. Одной кнопкой включать, а другой - выключать.
Ахтыжёёё....
Вон оно как... Звери разные, а мысли одинаковые.
Ну и пусть на кажну кнопку лампочку. У органа вон сколько клавиш - но красиво ж получается.
Если кнопок многа, то делают программный "опорос", ставя на выход мультиплексор, типа 3->8 или 4->16 на "столбцы" кнопочной матрицы, а читают строки, можно и таким вот расширителем. Кстати PCF8574 согласно даташиту может работать на вход, а вот может ли работать на прием MCP23017 - не смотрел.
Итого имеем мультиплексор 4->16 = 16 "столбцов", 8 входов (PCF8574 или прямо входы Ардуино) = 8 строк, итого 8*16 = 128 кнопок. Достаточно?
Алгоритм прост: подаем "код" от 0 до 15 на 4 управляющих входа мультиплексора, он формирует на соотв. столбе "1" и опрашиваем (если взять 1 порт целиком, то ровно 1 чтение) строчные входы. Смотрим "где" проскочила наша "1" и на пересечении стало быть кнопку и нажали. А может и в двух строках сразу .. дыве кнопки .. или больше.
Есть готовые "контроллеры клавиатуры" на этом принципе. Например КР580ВВ79, она ещё и индикатором типа LCD1602 (2 строки по 16 символов) .. есть "буржуйские аналоги", но я их не знаю.
а вот может ли работать на прием MCP23017 - не смотрел.
И MCP23017 , и MCP23016 отлично работают и на вход , и на выход.
Пасибки, буду иметь ввиду. Тем не менее, для такого количества кнопок я бы пошукал готовые модули контроллеров клавиатур. Наверняка есть такие матричные опросники в виде мелкосхемы... одной.
.. чем-то же клавиатуры детских музыкальных синтезаторов как-то опрашивают .. а там сейчас в основном игрушки с 8-ю "одновременными нажатиями" и до 4-5 октав по 12 клавиш...
А у 8574 еще прерыванье есть по изменению входа
MCP23017:
• INTA and INTB Can Be Configured to Operate Independently or Together
Вот и это теперь буду знать :-)
Еще, по-моему, MCP-шке можно наказать на какие входы прерываньем реагировать, а на какие - нет. PCF такого не могёт.
Для меня слепошарого недостаток только корпус, а у 8574 он dip.
Так я тоже модулем-переходником на DIP использую ;)
Для меня слепошарого недостаток только корпус, а у 8574 он dip.
Ниправда Ваша, и в SO16 очень даже хороши.)))) А вот когда 8575 в ssop24 приехала, тут напрягся, принтер тоже, у него разрешение малое оказалось, лапы в один полигон слились, теперь на 1200dpi поглядываю, только от цен шалею.((((
Для меня слепошарого недостаток только корпус, а у 8574 он dip.
Диду! так MCP23016 /17 тоже есть в DIP. Я поначалу с ними делал платы.Еще у 23016 есть внешняя RC -цепочка(больше элементов при пайке), а у 23017 -нет.На выходы им не нужна подтяжка к плюсу как у PCF8574(у PCF Quasi-bidirectional I/Os). Но цены на них высоковастые.
На выходы им не нужна подтяжка к плюсу как у PCF8574(у PCF Quasi-bidirectional I/Os).
Та не, 8574 все нормальные попадались, в обе стороны тянут.
Думаю что ТС-у стоит поискать что-то похожее на MAX7370 и сразу подключение по I2C.
Ещё вот нашел ADP5588 - до 80 клавиш и тоже I2C.
Здрасте.
У меня Эластичная клавиатура 4x4 , подключена через PCF8574. Код следующий:
Так вот прерывание срабатывает постоянно, с частотой раз 10-20 в сек, хотя я никакую кнопку не нажимаю. Пробовал разные условия срабатывания, пробовал подтягтвать к +5. Никакого эффекта. Что я не так делаю ?
а зачем там прерывания
скачайте Keypad_I2C, отлично работает и всё просто.
скачайте Keypad_I2C, отлично работает и всё просто.
Библиотека у меня стоит, но тогда нужно делать опрос клавиатуры. А хочется сделать красиво, тем более что аппаратно все есть. Ну и разобраться хочется.
MCP23S17, как включить работы пинов INTA(B)?
Ну, там много вариантов. Их можно зазркалить, можно назначить прерывание на изменени, совпадение, чего надо-то?
Давайте, Вы посмотрите даташит (раздел 1.7) или другой даташит (раздел 3.6), а если вопросы останутся, тогда отпишитесь
Ну, там много вариантов. Их можно зазркалить, можно назначить прерывание на изменени, совпадение, чего надо-то?
Давайте, Вы посмотрите даташит (раздел 1.7) или другой даташит (раздел 3.6), а если вопросы останутся, тогда отпишитесь
Нужно прерывание при изменении
И выбираем нужный бит настройки?
выбран 7 бит
А что, Wire.write() умеет строку в число превращать?
Исправилась)
Ну, там много вариантов. Их можно зазркалить, можно назначить прерывание на изменени, совпадение, чего надо-то?
Давайте, Вы посмотрите даташит (раздел 1.7) или другой даташит (раздел 3.6), а если вопросы останутся, тогда отпишитесь
Как выполнить нужную мне настройку?
Правильно считываю с порта б?
Wire.write(0b11111111);
Ещё вопрос.
Как записать, т.е. включить только один нужный пин, не трогая состояние остальных.
Интересно, как вы с ним по I2C работаете, если MCP23S17 - High-Speed SPI Interface?
MCP23017, невнимательная...
bitWrite(x, n, b)
Так записывать отдельный бит для управления нужным пином?
Благодарна
С настройкой прерываний на INT А и B не разобралась
Столкнулась с проблемой:
Всё работает. Хорошо.
При отключении питания и последующем включении, MCP не включает ножки с 0 по 7.
Но если текст функции SETTING_MCP1() переместить в setup(), то при перезагрузке всё работает как надо.
Почему так происходит?
Может быть пустые скобки после функции добавить в строке 21?
Невнимательна...а я то у же думала...Спасибо.
Снова появилась необходимость чтения с MCP по прерыванию, а в прошлый раз я так и не разобралась как это сделать, научите пожалуйста