Микроконтроллеры | Как программно уменьшить частоту в 10 или 12 раз? |
|
---|---|---|
Смысл в том, что нужно в одном прерывании по таймеру переключать два выхода (меандр), но один с частотой меньше другого в 10 или 12 раз. Пробовал вот такой код: Меандр чёткий в обоих случаях и частота на D.1 меньше частоты на D.2 ровно вдвое. И если t==4 или t==8 - тоже нормально. interrupt [TIM0_COMP] void timer0_comp_isr(void) if(!(t%2)) А вот если сделать (t%10) или (t%12), то почему то на переходе переменной t от 255...10 импульс вдвое укорачивается; а почему так, не могу понять и как победить это тоже? |
|
|
Вот так, например при t%10 |
|
|
Попробовал, если t%10, ограничивать t от 0 до 250 - помогает, но для 12 уже - нет. Вот ерунда-то. Может как-то по другому можно? |
|
|
interrupt [TIM0_COMP] void timer0_comp_isr(void) if(t>=10) |
|
|
Не написал ранее, прошу прощения, но t используется в программе как общий счётчик и его желательно не ограничивать до 10(12). так нормально, но надо будет ещё одну переменную вводить |
|
|
А по другому может и не получиться. % - это остаток от деления, так что вместо одной команды аппаратного сложения получите полторы сотни команд на программное деление. В обработчике прерываний только делениями и заниматься |
|
|
chav1961: так что вместо одной команды аппаратного сложения получите полторы сотни команд на программное деление. В обработчике прерываний только делениями и заниматься |
|
|
А два счетчика нельзя сделать? Или с ОЗУ напряг? |
|
|
chav1961: А два счетчика нельзя сделать? Или с ОЗУ напряг? |
|
|
Digital: чтоб не плодить на каждый "чих" переменные |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |