Микроконтроллеры | Какой тип таймера ATMega16 лучше использовать? |
|
---|---|---|
Есть задача: Формировать бесконечно пачки из 58 импульсов с паузой в 2 импульса между ними на одном выходе МК, а на другом - на каждую нечётную пачку, т.е. на каждые 58 импульсов - один. Вопросы: Какой тип таймера ATMega16 лучше использовать? 8-ми или 16-ти разрядный? В каком режиме таймер лучше всего включить (Normal или CTC)? И ещё, можно ли с помощью только 16-разрядного таймера (8-ми разрядные для ШИМ-а пригодились бы ещё) решить мою задачу, а то непонятно, как его так сконфигурировать, чтобы он одному своему выходу он досчитывал до 58, а потом передавал управление второму своему выходу? |
|
|
ВременнУю диаграмму нарисуйте. И длительность укажите. И частоту генератора Меги. |
|
|
Digital: В каком режиме таймер лучше всего включить Режима прерывания по переполнению одного таймера достаточно. Делал такую вещь для вспомогательного оборудования, и для 60-2, и для 36±2 (для V6 и V8). |
|
|
chav1961: ВременнУю диаграмму нарисуйте. И длительность укажите. И частоту генератора Меги. Взаимное расположение сигналов - в приложенном рисунке. Частота кварца меги 8МГц (т.к. имеется парочка). Тип импульсов - меандр на выходе 1, с частотой 50 Гц. На выходе 2 - один импульс на каждую нечётную пачку по выходу 1. Длительность импульса на выходе 2 не особо принципиальна, важно лишь, чтобы его формирование начиналось в момент формирования "дырки" на выходе 2. |
|
|
GM: Делал такую вещь для вспомогательного оборудования, и для 60-2, и для 36±2 (для V6 и V8). А как вы задавали точно такую "некруглую" частоту, например 27.3Гц (820об/мин.)? А формулой для расчета частота-обороты такой пользовались?: Частота искрообразования: f=nN/120 (для четырехтактного двигателя, для двухтактного - делить на 60), где f - частота искрообразования, n - скорость вращения коленвала (об/мин), N - число цилиндров. |
|
|
Численно, в Герцах, частота ваших импульсов выражается по формуле F=N, где N - частота вращения кранкшафта, об/мин. Да и частота не нужна, вам нужно устанавливать период переполнения вашего таймера в тактах проца, T=8000000/N. Для 820 об/мин Т=9756 тактов (мне больше нравится говорить МЦ-машинных циклов). Для 6000 об/мин Т=133 такта. Точности для практики более чем достаточно. |
|
|
Тогда получается, что таймер надо использовать по-любому 16-разрядный, т.к. 8-ми разрядный до числа Т=9756 не сможет досчитать? Или есть какие-то варианты с 8-ми разрядным? |
|
|
Нет, можете использовать 8-разрядный. Просто Вам нужно 38 раз поймать прерывание по переполнению, и один раз после этого - прерывание по OCR, причем в OCR должно быть число 28. 38 * 256 + 28 = 9756, что и требовалось. Таймер после последнего OCR нужно будет остановить, обнулить, и запустить заново. Частота импульсов у вас очень низкая, можете изгаляться как хотите Возможно, в OCR нужно не 28, а 28 +/- 1 - тут нужно детально смотреть даташит, что, честно говоря, влом Проще проверить экспериментально. |
|
|
chav1961: Проще проверить экспериментально. ...возможно, в OCR нужно не 28, а 28 +/- 1.... Согласен, это уже дело отладки. А число 28 +/-1 в регистр OCR0 записать нужно будет после прерывания по OCR, я правильно вас понял? |
|
|
chav1961: Таймер после последнего OCR нужно будет остановить, обнулить, и запустить заново. А в функции обработки прерывания как заставить таймер пропустить точно два импульса? Непонятно сколько времени пройдет в процессе остановки-обнуления-запуска? Функцию delay не хочется использовать, да и мне кажется неправильно это? |
|
|
Форум про радио — сайт, посвященный обсуждению электроники, компьютеров и смежных тем. pro-radio.online | Обратная связь |
© 2003—2024 |