ТШ ставится для обострения фронтов. Если не принять других мер, то после него дребезг останется, но будет более качественным, с крутыми фронтами
. Если состояние входа опрашивается не по прерыванию (имеется в виду не прерывание по уровню, а по фронту-срезу), необходимости в нём нет. Дребезг гасится аппаратно - RC цепочкой, программно - несколькими последовательными опросами через 10..20мс. Если состояния совпадают - процесс устаканился, если разные - игнорируем, ждём до совпадения.
Программно дребезг я уже убрал. Реализовал не через последовательную проверку, а через длинный опрос и принятие клавиши при повторной проверке. Правда есть шанс что кто-то успеет за 50 миллисекунд нажать и отпустить кнопку, тогда программа такое движение проигнорит.
Насчет RC цепочек я знаю. Большая часть кнопок опрашиваются по прерыванию таймера. А те что висят на int-ах те по фронту. С этим я уже разобрался.
Добавлено after 4 minutes 1 second:Насколько я понимаю, в системе будет PWM? Пока есть и другие действия, PWM должен быть аппаратным. Начать писать код в обратном порядке: ШИМ, его выбранный таймер, его выбранный пин/ы, а все, что свободно, может быть легко размешать по пинах для цифрового входа или выхода и связанная с ними логика. По крайней мере, так бы сделал, чтобы начать решать задачу с ШИМ.
Да. именно так я и делаю. У меня пока большая часть программы написана пока на русском. Примерно так:
- Код:
ISR(TIMER1_COMPA_vect)
{
// -- Прерывание по окну для таймера --
// Проверяем включенность прерывания.
// Если нет, Включаем прерывание окна. Переустанавливаем таймер win_max_t. return 0;
// Если да, Отключаем пины окна. Отключаем прерывание окна. Отключаем прерывание таймера. return 0;
}
Когда не знаком с языком и железом так писать удобнее. Потому что много приходится читать прежде чем написать строку кода и логика программы регулярно вываливается из головы.
Добавлено after 21 minute 9 seconds:Не понял суть вопроса… каким местом сторожевой таймер связан с таймер-счётчиком2? Сторожевой таймер – он сам по себе и не связан ни с одним тймер-счётчиком МК.
Ну собственно ты ответил на мой вопрос. Сторожевой таймер – он сам по себе и не связан ни с одним тймер-счётчиком МК. Именно это я и хотел уточнить. Просто не был уверен в том есть связь или нет. При прочтении всего того что я успел прочитать почему-то сложилось впечатление что работает или WD или TC2. Ну а раз они не связаны то это прекрасно.
PS. Не большой совет по поводу использования аппаратных ШИМ… так как вам необходимо всего два канала ШИМ, советую использовать для этой цели ТС1, который ШИМит используя вывода РВ1 и РВ2… если использовать в качестве ШИМ ТС2, то у него задействован вывод РВ3, а этот вывод на секундочку ещё и MOSI при использовании аппаратного SPI… то есть лучше ТС2 не использовать в качестве ШИМ, так как вдруг понадобится использовать SPI для управления сдвиговым регистром в качестве расширителя выходов…
Ну касательно этого проекта мне SPI точно не понадобится. Я вчера в очередной раз проведя инвентаризацию всего того что хочу сделать и что у меня для этого есть пришел к выводу что я запроектировался до ручки. Потому что у меня сейчас есть свободная нога контроллера на которую я знаю какой сигнал принимать но так и не смог понять на кой хрен мне этот сигнал нужен.
А еще у меня есть кнопка для которой я не смог придумать функционал.
Ну кнопку хоть выкинуть нельзя. Ног лишних она не занимает, а вот что делать с тем сигналом ради которого в том числе я эту ветку начал ума не приложу. Это уже клиника и надо останавливаться с фантазированием. Сначала сделаю то что точно надо, а потом еще раз проведу инвентаризацию ресурсов и фантазий.
А TC1 у меня уже сильно занят. Там же счетчик 16-и битный. А так не хочется заниматься ручным подсчетом времени (считать переполнения). Сейчас у меня всё просто и элегантно, считал значение таймера, прибавил сколько надо, записал в прерывание по сравнению и забыл. Обработчик прерывания сам всё решит. Все промежутки времени меньше чем цикл переполнения таймера. Соберу завтра выходной каскад для ШИМ на макетке и тогда уже буду разбираться чем жертвовать. Элегантностью или чем-то еще.