-
- Итак, что имеем на нынешний момент. В реале импульс затягивается, если запускать, останавливать таймер. Заработало только так: В блоке инициализации запускаем таймер. В дальнейшем считываем состояние счетчика, прибавляем нужное значение и mazur(446 знак., 03.10.2011 10:08)
- Что мы имеем с таймера? Один или два компаратора и переполнение. maik-vs(235 знак., 03.10.2011 13:15)
- Free running (неостанавливающийся) timer можно использовать в стольких одновременных задачах, сколько к нему прицеплено Compare Modules - MBedder(03.10.2011 11:24)
- А если требуется поменять частоту работы таймера? - mazur(03.10.2011 11:34)
- Анахуа ее менять, если есть Compare? - MBedder(03.10.2011 11:37)
- А если требуется поменять частоту работы таймера? - mazur(03.10.2011 11:34)
- Есть косяк в твоем коде - тебе нужно либо останавливать работу таймера в обработчике COMP_OC0 (TCCR0=0), либо сбрасывать флаг запроса на прерывание в твоем макросе INIT_TIMER0 (TIFR=1<<OCIF0). Иначе обработчик COMP_OC0 может запустится сразу после il-2(31 знак., 29.09.2011 20:41)
- Я этот макрос давно писал. Именно с этим прерыванием и столкнулся. Работаю. - mazur(29.09.2011 20:44)
- Бред какой-то - зачем в прерывании каждый раз переинициализировать таймер? - MBedder(29.09.2011 10:02)
- Ну соображения были такие. Сброс счетчика, чтобы импульс был гарантированной длины. Включение прерывания и запуск таймера. Если бред, как тогда сделать? - mazur(29.09.2011 10:33)
- >> MBedder(920 знак., 29.09.2011 11:12)
- На железе еще не проверял. Сейчас занялся макеткой для таких случаев, заколебался с кучей плат париться. После на ней уже в реале погоняю. Код вроде должен работать. Посмотри пожалуйста. mazur(2300 знак., 30.09.2011 22:10)
- Чем ехидничать, как во всех проектах таймер инициализировать :), подскажи лучше. Если мы таймер запускаем заранее, будут выставляться флаги совпадения и переполнения. Только что в симуляторе после считывания счетчика и прибавления запустилось mazur(393 знак., 29.09.2011 14:38)
- 1)Прерывание не запустится, если его не разрешить. 2)Чушь, поясни. 3)FOC и должен сразу сбрасываться - он одноразовый (строб). 4)Таймеры, как и прочая периферия, симулируются отвратительно - проверяй на железе - MBedder(29.09.2011 16:56 - 17:01)
- Забыл. Три года назад это делал и то пробовал. Как мне принудительно выставить ногу проца? Можно ли sbi PORTX? И он потом сбросится. Или как-то иначе? Таймер ногой дрыгает только при совпадении. Вот и как заранее выставить? - mazur(29.09.2011 17:06)
- Смотри пример Леонида Ивановича. Как только ты включил режим Output Compare, нога OCx порта тебе больше не принадлежит - ей рулит Output Compare Module. Принудительно сбросить ногу = настроить WGM на ее сброс и записать 1 в FOCx - MBedder(29.09.2011 17:15)
- Но можно же и так отключить ногу ilyaul(18 знак., 29.09.2011 17:28)
- Ога, в воздух подвесить :) - MBedder(29.09.2011 22:49)
- Но ведь инит PORTD никто не отменял, получится либо вход с 0 или с 1 , если pull подключён - ilyaul(30.09.2011 01:17)
- Не пори чушь - она сильно визжит - MBedder(30.09.2011 01:58)
- Но ведь инит PORTD никто не отменял, получится либо вход с 0 или с 1 , если pull подключён - ilyaul(30.09.2011 01:17)
- Ога, в воздух подвесить :) - MBedder(29.09.2011 22:49)
- Но можно же и так отключить ногу ilyaul(18 знак., 29.09.2011 17:28)
- Смотри пример Леонида Ивановича. Как только ты включил режим Output Compare, нога OCx порта тебе больше не принадлежит - ей рулит Output Compare Module. Принудительно сбросить ногу = настроить WGM на ее сброс и записать 1 в FOCx - MBedder(29.09.2011 17:15)
- Забыл. Три года назад это делал и то пробовал. Как мне принудительно выставить ногу проца? Можно ли sbi PORTX? И он потом сбросится. Или как-то иначе? Таймер ногой дрыгает только при совпадении. Вот и как заранее выставить? - mazur(29.09.2011 17:06)
- 1)Прерывание не запустится, если его не разрешить. 2)Чушь, поясни. 3)FOC и должен сразу сбрасываться - он одноразовый (строб). 4)Таймеры, как и прочая периферия, симулируются отвратительно - проверяй на железе - MBedder(29.09.2011 16:56 - 17:01)
- Про прибавлять значение уже думал. Допустимо использовать один из OCxx выходов. Что-то не получилось выставить при помощи Force Output Compare. Как там можно принудительно выставить ногу в нужное значение? Может я опять что-то не так ляпнул. В mazur(58 знак., 29.09.2011 11:54)
- В твоем исходнике порт управляется через DDRx, а не через PORTx (OCx) - видимо, тебе нужен был открытый сток, а не пушпул. В этом случае OCx пойдет только на XMega, у которых можно произвольно конфигурировать выходы как Open Drain. А если пушпул - MBedder(40 знак., 29.09.2011 14:35)
- Как пример, реализация DDS с I2S-ЦАПом. Там используется force. Лeoнид Ивaнoвич(1646 знак., 29.09.2011 12:29)
- А для режима с SET/RESET OCx (т.е. не TOGGLE) начало будет еще проще, т.к. не придется синхронизировать фазу TOGGLE - MBedder(29.09.2011 14:28)
- Фигня заключается в том, Лeoнид Ивaнoвич(352 знак., 29.09.2011 17:15 - 17:40)
- Нет, ты неправ - можно и нужно - MBedder(30.09.2011 02:06)
- Действительно, Лeoнид Ивaнoвич(504 знак., 30.09.2011 10:44)
- Мало того, оно работает и при остановленном таймере - MBedder(30.09.2011 10:49)
- Действительно, Лeoнид Ивaнoвич(504 знак., 30.09.2011 10:44)
- Нет, ты неправ - можно и нужно - MBedder(30.09.2011 02:06)
- Фигня заключается в том, Лeoнид Ивaнoвич(352 знак., 29.09.2011 17:15 - 17:40)
- А для режима с SET/RESET OCx (т.е. не TOGGLE) начало будет еще проще, т.к. не придется синхронизировать фазу TOGGLE - MBedder(29.09.2011 14:28)
- >> MBedder(920 знак., 29.09.2011 11:12)
- Ну соображения были такие. Сброс счетчика, чтобы импульс был гарантированной длины. Включение прерывания и запуск таймера. Если бред, как тогда сделать? - mazur(29.09.2011 10:33)
- Итак, что имеем на нынешний момент. В реале импульс затягивается, если запускать, останавливать таймер. Заработало только так: В блоке инициализации запускаем таймер. В дальнейшем считываем состояние счетчика, прибавляем нужное значение и mazur(446 знак., 03.10.2011 10:08)