Совмещение входных и выходных регистров

Тема в разделе "Arduino & Shields", создана пользователем DrProg, 6 июн 2015.

  1. DrProg

    DrProg Вечный нерд

    На мысль навела вот эта клавиатура. У нее 8 ног, опрос клавиш производится путем циклической подачи HIGH на каждую ногу из первой четверки и циклического же опроса каждой ноги из второй четверки внутри цикла подачи HIGH на первую четверку. Итого надо 4 пина Ардуины на выход и 4 на вход, что довольно расточительно для одной маленькой клавиатуры.

    Первое что пришло в голову - установить регистр 165 на выход и 595 на вход, по 3 пина на каждую, итого экономилось бы 2 пина. Уже лучше, тем более, что регистры работают наполовину, можно навесить на них что нибудь еще. Кроме того, входной регистр считывает все четыре входящие пина разом, что упрощает и ускоряет код.

    Второе что пришло в голову, а нельзя ли объединить каналы DATA и CLOCK для обоих регистров, ведь они работают по очереди. Достаточно оставить отдельный LATCH на каждый регистр. И ведь заработало! Единственное что смущает, пин DATA приходится передергивать то в INPUT то в OUTPUT. Раньше все мои скетчи объявляли роли пинов только вначале. Не вредны ли для платы такие переключения много раз в секунду? Пока что из соображений предосторожности поставил delay(100) между переключениями.

    И, наконец, третье что пришло в голову, а нельзя ли обнаглеть и объединить LATCH тоже? И ведь тоже заработало! Правда, стандартный shiftIn опять потерял один бит, наверняка можно как то его подготовить чтобы он так не делал, но было уже лень и использовал свою функцию считывания, она как то надежнее, проще и не капризничает.

    Итого, вместо 8 пинов для одного устройства мы занимаем 3, при этом количество каскадом подключенных подобных устройств может быть очень большим.

    PS: возможно, Америку не открыл, то идея собственная, не подглядывал. Может быть кому пригодится.

    [​IMG]
     
    Последнее редактирование: 6 июн 2015
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Контроллеру на это совершенно наплевать.
     
  3. DrProg

    DrProg Вечный нерд

    Хорошо, значит схема рабочая без ограничений.
     
  4. DrProg

    DrProg Вечный нерд

    Поправочка, LATCH все же надо разделять, в моем случае получилось, что данные перекочевали с 165 на 595 напрямую, без контроллера, что не правильно. Итого, 4 пина при одновременной работе двух групп разнонаправленных регистров это минимум. Ну и ладно.