Mysteo 0 28 января, 2020 Опубликовано 28 января, 2020 · Жалоба Здравствуйте! В устройстве имеется кнопка с подстветкой , нужно было мне сделать так, чтобы при нажатии кнопки и ее удержании подствека включалась и загоралась сильнее. После отжатия кнопки - подсветка тухнет. Выполнил я это конечно кривовато, следующим алгоритмом. 1. Запустил таймер на 1 мс. 2. Каждую 1мс считываю нажата ли кнопка. 3. Если кнопка нажата, то меняю скважность ШИМ сигнала подсветки, если отжата, то вырубаю подстветку. Но мне кажется, что используя режимы типа Gate Mode либо Trigger Mode можно как то данную штуку выполнить более аппаратным уровнем, чем программно моим алгоритмом. Может быть дадите наводку. Есть возможность поменять схемотехнику. Осознаю , что нужно использовать у одного из таймеров Input Direct Mode, повесить подсчет длительности нажатия на данную функцию. И как то связать данный счетчик с другим таймером , который рулит ШИМом. Хотелось бы чтобы всякие прерывания минимально были задействованы Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 28 января, 2020 Опубликовано 28 января, 2020 · Жалоба 32 минуты назад, Mysteo сказал: Но мне кажется, что используя режимы типа Gate Mode либо Trigger Mode можно как то данную штуку выполнить более аппаратным уровнем, чем программно моим алгоритмом. А зачем? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 28 января, 2020 Опубликовано 28 января, 2020 · Жалоба Да чисто для собственного опыта. В общем похоже напрямую связать длительность нажатия кнопки со скважностью ШИМ без прерываний невозможно. Сейчас сделал более оптимизировано перевел таймер в режим Input Capture и если кнопка нажата более 20 мс генерю прерывания. Это оптимальнее чем до этого было сделано. Впустую постоянно таймер гонялся и проверялось условие нажата ли кнопка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mysteo 0 28 января, 2020 Опубликовано 28 января, 2020 · Жалоба Блин , где то допустил ошибку и не правильно режим задал. Думал что настроил чтобы в прерывание входило при удержании ножки в нуле 20мс , а по факту от любого импульса из 1 в 0 прерывание вызывается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться