digispark attiny85 прерывания

Тема в разделе "Микроконтроллеры AVR", создана пользователем ale, 13 янв 2019.

  1. DetSimen

    DetSimen Guest

    По шагам пройдемся. Функция вызываеца 1 раз за 10 миллисекунд

    Код (C++):
    void TEncoder::Read()
    {
        static int8_t lastValue = 0xFF;   // последнее состояние кнопок энкодера

        int8_t value = internalRead().Value;  // читаем энкодер

        if (lastValue == value) return;  // если состояние такое же, как в прошлый раз - уходим

        lastValue = value;  // иначе запоминаем его и начинаем разбор


        if (value < 0) {   // 7 бит - знаковый, если значение < 0, значит нажата кнопка энкодера
            SendClassMessage(msg_EncoderButton, ID); // пошлём об этом сообщение в очередь
            return;  // да вернемся
        }

        value &= 0x03;  // иначе смотрим, в какую сторону прокрутился енкодер из 0
        // и посылаем в очередь соответствующее собщение о повороте

        if (value == 0x02) SendClassMessage(msg_EncoderLeft, ID); // это влево,
        if (value == 0x01) SendClassMessage(msg_EncoderRight, ID); // а это вправо


        while (internalRead().Value);  // и ждём, пока энкодер не вернется в состояние покоя
    // состояние, когда ничего не нажато и некрутится, тогда internalRead() вернет 0

        return;

    }
     
    Последнее редактирование модератором: 18 янв 2019
  2. DetSimen

    DetSimen Guest

    РАССЧИТАНО ТОЛЬКО НА МЕДЛЕННОЕ ВРАЩЕНИЕ, руками, к двигателю цеплять бессмысленно
     
  3. ale

    ale Нерд

    Спасибо! Именно в таком ключе я и понял. Остается еще момент: lastValue какой смысл его запоминать, если в начале процедуры мы его делаем 0xFF. блин потому что static, извиняюсь
     
    Последнее редактирование: 18 янв 2019
  4. DetSimen

    DetSimen Guest

    0xFF - чтобы он в ПЕРВЫЙ раз был гарантированно НЕРАВЕН читаемому значению
     
  5. DetSimen

    DetSimen Guest

    На выходных достану россыпь Digispark-ов из пыльного загашника, да пропробую список таймеров к нему прикрутить.
     
  6. ale

    ale Нерд

    это было бы здорово! Заранее спасибо!
     
    DetSimen нравится это.
  7. Asper Daffy

    Asper Daffy Иксперд

    Ахренеть! За это надо выпить. Дед, Вы как?
     
    DetSimen нравится это.
  8. DetSimen

    DetSimen Guest

    Болею. Вечером, начну с перцовки
     
  9. DetSimen

    DetSimen Guest

    Не удалось в них даже блинк залить, похоже они без загрущика. А как заливать, запамятовал, давно было. Что за ср@ные китаесы, ну нюшто загрущик сложно сразу закатать.
     
  10. parovoZZ

    parovoZZ Гуру

    в атинях нет загрущика. В новых вроде тока.
     
  11. DetSimen

    DetSimen Guest

    дак я думал, в дигиспарках то должны же быть, а тютю. Но что-то мне помница, что я год назад уже с этим вопросом сталкивался, но так как одноразово надо было, в памяти лагаритм заливки загрузчика не сохранил.
     
  12. SergeiL

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

    В тинях нет, Digispark есть.
    А как он иначе, без загрузчика, ответит по USB?
     
  13. DetSimen

    DetSimen Guest

    как оказалось, в китайских - нет. Не отвечает он по USB искаропки.
     
  14. parovoZZ

    parovoZZ Гуру

    Аппаратно нету. В дигиспарках кастыль на основе библы V-USB. 25/45/85 интересны своим таймером. Больше там ничего особого немае
     
  15. Asper Daffy

    Asper Daffy Иксперд

    Восемью ногами ещё (размером)
     
    DetSimen нравится это.
  16. parovoZZ

    parovoZZ Гуру

    441/841 ну чуть побольше, а интереснее в разы.
     
  17. DetSimen

    DetSimen Guest

    когда надо 1-2 входа и один выход - лучше тиньки восьмой ничего не придумаешь.
     
    SergeiL нравится это.
  18. DetSimen

    DetSimen Guest

    паравоз, куда ящерку дел? Пошто жывотное замучал?