Некорректное считывание состояния кнопок на сдвиговом регистре 74HC165. Дребезги портят мне жизнь!

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем Ardu_Julia, 12 мар 2017.

  1. Ardu_Julia

    Ardu_Julia Нуб

    Нашла на робокрафте интересную штуку по работе со сдвиговым регистром.
    http://robocraft.ru/blog/arduino/520.html
    За неимением отладчика хотела пронаблюдать передаваемое состояние кнопок через обычный вывод на монитор порта через Serial.print - сдвигая побитово полученный байт состояния (который мы нашли через метод SPI.transfer(0)).
    Блок вывода представляет собой нечто вроде
    for (int i = 0; i < 8; ++i)
    {
    Serial.println (state);
    state>>=1;
    }
    где state - наш байт.
    В итоге сдвиг отображается некорректно.
    То есть. Нажала я такая вторую кнопку. Хотела получить что-то вроде B01000000, а получила B21000000.
    С третьей и четвертой кнопкой все еще хуже - появляются другие степени двойки ;((
    Почему так?? Где нолики?
    Далее. При нажатии двух кнопок одновременно - фиксируются вообще левые числа типа 3,5, 12.
    VN2j1aw_KJc.jpg
    Но самое ужасное - это три кнопки одновременно. 5IE2DxwDA_k.jpg
    Я получаю какие-то страшные числа типа 23124387613761283 - как будто задействуются вообще все кнопки...
    Дребезги аппаратно вроде бы пофикшены самим сдвиговым регистром - я так думаю...
    Что не так? Может я неправильно вывожу биты? Как можно иначе их прочитать? И откуда могут появляться все эти левые числа?
     
  2. rkit

    rkit Гуру

    Нет. С чего бы?

    Вы выводите не биты, а число целиком.
     
  3. Ardu_Julia

    Ardu_Julia Нуб

    Подозрение меня не обмануло( но дребезг дребезгом, а у меня в сериал монитор при нажатии 2х или трёх кнопок выводятся не те кнопки. Вместо нажатых 012 пишется 357. А 5-8е входы сдвигового регистра у нас стянуты резистором на плюс.

    А как тогда выводить биты?((( Я совсем заблудилась
     
  4. rkit

    rkit Гуру

    x & 1
    x & 2
    x & 4
    Первый второй третий бит x
     
    Ardu_Julia нравится это.
  5. Ardu_Julia

    Ardu_Julia Нуб

    Спасибо, получилось, но дребезг это не исправляет.. Теперь надо понять, как устранить дребезг: как-то запрогать его, или аппаратно. Аппаратно с помощью резистор и конденсатор, программно хз как(( но аппаратно кажется сложным. Что посоветуете?)
     
  6. rkit

    rkit Гуру

    Где у вас дребезжит? По сути дребезг важен только на сдвиге. Его кнопкой нажимать ни к чему.
     
  7. mcureenab

    mcureenab Гуру

    Аппаратно: RC фильтр и триггер Шмитта. Чем хуже кнопка, тем дольше должна быть постоянная времени RC фильтра (на схеме R2 C1).
    [​IMG]

    (100 * кОм) * (47 * нФ) = 0.0047 сек
     
    Ardu_Julia нравится это.
  8. Ardu_Julia

    Ardu_Julia Нуб

    При одинарном нажатии на кнопку (условно говоря) номер "2", у меня 2 раза происходит смена состояния, как будто я нажимала 2, а то и 3 раза на эту кнопку. Это ломает мою идеологию о двойных и длинных нажатиях, которые тоже надо бы обрабатывать.. Поэтому нужно чёткое определение количества нажатий))

    Отлично, надо так попробовать, спасибо:)
     
  9. rkit

    rkit Гуру

    Вы со сдвигового регистра читаете смену состояния в реальном времени? Как вы это делаете?