Например, если бы у вас был Arduino с 4 выводами цифрового ввода-вывода, как вы могли бы независимо зажечь> 4 светодиода или прочитать состояние> 4 кнопок?
Сдвиговый регистр, такой как 74595 , позволит вам иметь много выходов всего с двумя соединениями: выводом данных и выводом синхронизации. Вы устанавливаете вывод данных на следующее значение, которое хотите переместить в регистр, а затем импульсируете вывод часов.
Бруно дал хороший ответ, но я хотел бы сделать несколько замечаний.
Печально известный 70 мА
74HC595 часто используется в качестве расширенного ввода-вывода и так же часто используется для управления рядом светодиодов. Что часто упускается из виду, так это то, что вы можете использовать его не по спецификации таким образом. В техническом описании говорится, что общий ток питания не должен превышать 70 мА, абсолютные максимальные номиналы (AMR), поэтому вам лучше держаться подальше от этого с некоторым запасом. Поэтому 8 светодиодов на 10 мА — это слишком, а на 20 мА вы превысите AMR не менее чем на 130 %! Ограничение, вероятно, связано с пропускной способностью по току соединительных проводов, и тогда слишком большой ток может не только ухудшить работу детали, но и навсегда вывести ее из строя, если этот провод оборвется.
Но прошлой ночью я проснулся, потому что у меня была Идея . Ограничение в 70 мА относится как к Icc, так и к току заземления, тогда почему бы не разделить наше общее количество или 80 мА и позволить Icc иметь половину, а ток заземления - другую половину? Все, что вам нужно сделать, это подключить 4 светодиода к земле (активный высокий уровень), а остальные 4 к Vcc (активный низкий уровень). Тогда ток первых идет от Icc, ток остальных идет на землю. Таким образом вы сможете использовать светодиоды на 15 мА. (Это настолько просто, что я чувствую себя идиотом, если не подумал об этом раньше.)
Комбинированные часы
Я думал, что Бруно сохранил дополнительный контакт ввода-вывода, объединив часы сдвигового регистра с часами защелки. Кажется, я неправильно истолковал его ответ. Я все еще хочу расширить этот вариант.
Что происходит тогда? В таблице на странице 5 техпаспорта написано:
содержимое сдвигового регистра перенесено; предыдущее содержимое сдвигового регистра передается в регистр хранения и параллельные выходные каскады
(выделено мной)
Так что фиксируются не новые данные, а предыдущие . Не проблема, просто не забудьте сдвинуть дополнительный фиктивный бит , чтобы зафиксировать последние данные, иначе все будет на один контакт неправильно.
Объединение часов также означает, что выходы будут переключаться все время, пока вы вводите новые данные. На самом деле функция защелки состояла в том, чтобы избежать этого. Во многих случаях это не будет проблемой, если вы сможете сделать это быстро, но в худших случаях вы можете получить нежелательные эффекты. В худшем случае может быть использование 74HC595 для мультиплексирования дисплея с очень высокой частотой развертки + очень длинная цепочка регистров сдвига + наличие всех единиц, кроме одного 0, выключенного светодиода + темная комната. Поскольку этот светодиод время от времени видит все единицы, проходящие в темной комнате, он может светиться очень слабо.
Или если вы объедините это высокочастотное мультиплексирование с релейным выходом управления. Все нули, а затем 1 для реле могут означать, что выход реле недостаточно высок для срабатывания.
Конечно, это крайние случаи, но я бы по возможности разделял часы последовательного порта и защелки, если вы хотите мультиплексировать или иным образом иметь высокую скорость обновления.
Я согласен с Игнасио относительно использования 74XX595, последовательного параллельного выходного регистра сдвига для расширения вывода, но на самом деле вам потребуется 3 соединения, одно для данных , одно для часов и одно защелка , которая будет передавать данные из внутреннего сдвигового регистра. к выходным защелкам.
Для расширения входов вы можете использовать регистр сдвига 74XX165, параллельный последовательному выходу, это позволит иметь до 8 кнопок на 74XX165.
Преимущество этого подхода заключается в том, что вы можете последовательно объединить несколько регистров сдвига, что позволит увеличить количество входов или выходов, и, что еще лучше, вы можете смешивать 74XX595 и 74XX165, что позволит вам иметь любое количество входов или выходов.
Кроме того, вы можете совместно использовать тактовый сигнал и сигналы защелки, уменьшая количество необходимых подключений и значительно упрощая программное обеспечение. Таким образом, вам потребуется всего 4 соединения для любого количества любых этих сдвиговых регистров:
Когда я искал схему, я нашел на этом сайте очень умный способ уменьшить количество необходимых подключений до 3. Он заключается в использовании одного и того же вывода для ввода и вывода данных.
Программное обеспечение будет делать что-то подобное для каждого тактового импульса:
Ник упоминает расширители ввода-вывода, и они определенно заслуживают внимания. Digikey перечисляет более тысячи из них, я выберу в качестве примера один с интерфейсом I2C, потому что он требует наименьшего количества контактов ввода-вывода; минимум два.
NXP PCA9505 имеет 40 настраиваемых контактов ввода-вывода, что эквивалентно пяти 74HC595. Это немного более дорогое решение, но вы получаете гораздо больше функциональности:
Дополнительная литература
Экспандеры GPIO , брошюра NXP,
техническое описание PCA9505
Для решения без дополнительных микросхем вы можете использовать такие методы, как мультиплексирование и Charliplexing :
Мультиплексирование (токоограничивающие резисторы не показаны):
Принцип работы мультиплексирования довольно прост — в приведенном выше примере, если мы хотим зажечь светодиод 1, мы устанавливаем контакт C1 на выход высокого уровня, а контакт R1 — на низкий уровень. импеданс, из-за которого они выглядят «отключенными»)
. Если мы хотим зажечь светодиод 5, мы устанавливаем вывод C2 на высокий уровень, а R2 — на низкий уровень.
Количество выводов, необходимых для управления x светодиодами, может быть определено как 2n выводов для n² светодиодов, поэтому, например, для 16 светодиодов нам нужно (√16) * 2 = 8 выводов.
Чарлиплексинг:
Альтернативный (более аккуратный) схематический макет (предложенный Supercat):
Это немного сложнее, но использует меньше контактов для управления большим количеством светодиодов. Например, мы можем использовать всего 5 контактов для управления 20 светодиодами, как в приведенном выше примере (по сравнению с по крайней мере 10 контактами с «нормальным» матричным мультиплексированием (не путать с использованием ИС, в этом случае необходимое количество контактов равно log2). (nLED).
Для внешнего решения вы можете использовать такие вещи, как регистры сдвига или мультиплексоры , такие как 74HC595 и 74HC151.
Сдвиговый регистр принимает синхронизированный последовательный входной поток данных и выводит параллельно (Serial In Parallel Out SIPO) или наоборот (PISO)
. Как правило, у них есть 8 выходов (или входов), но вы можете объединить столько, сколько хотите, чтобы расширить вещи. Обратная сторона заключается в том, что скорость, которую вы можете обновить, делится на количество выходов на вход (например, для одного регистра из 8 выходов, если у вас есть входная частота 8 МГц, которую вы можете обновить на 1 МГц, для 16 выходов 500 кГц и т. д.)
Эти методы могут работать в обратном направлении и для входных данных.
Леон Хеллер
Крис Лапланте
Ник Алексеев
Джиппи
Стивенвх
Джиппи
Джиппи
Стивенвх
Стивенвх