AVR (10.09.2006 02:30, просмотров: 1) ответил GM на Извольте, уважаемый
Хорошо, хорошо, успокойтесь - это я застрелил Джона Кеннеди в 1963-м. Успокоились? - слушайте http://www.telesys.ru/wwwboards/mcontrol/1433/messages/336733.shtml
http://www.telesys.ru/wwwboards/mcontrol/1433/messages/336522.shtml
- Мной не был предложен никакой алгоритм. Я слегка изменил процедуру сравнения PWM и уставки, чтобы обойти невыгодное для АВР отсутствие однотактовой команды сравнения-пропуска.
- Специально для слепых я написал - "...заодно и обеспечивая выполнение Phase Correct PWM. То же самое можно делать и внутри Timer ISR, как это сделано в ПИК-версии.". Чтобы убрать всплески ШИМ во время смены уставок, нужна двойная буферизация, как в ПИК-версии - добавьте для этого еще 1.004 такта - вставим после inc pwm еще breq reload_PWM. Буфер будет в RAM, и reload_PWM займет 48+1+3=52 такта - это 24 двухтактовых команды lds r(N+2),pwm_array+N, затем clr tmp, затем 3*out pN,tmp. С сохранением/восстановлением ресурсов и входом/выходом ISR это займет столько же времени, сколько занимает обычная ветвь ISR, то есть общее время ISR увеличится лишь на 1.004 такта (0.004=1/256).
- Способ загрузки уставок мы не оговаривали, и я привел пример лишь одного из массы возможных, представив весьма реальный вариант, когда с внешнего устройства по UART в произвольном темпе поступают двухбайтовые команды "сменить уставку N на значение M". Приняв скорость UART за стандартный максимум - 115200 Бод, можно увидеть, что максимально возможная скорость следования команд составит 115200 Бод/10 бит/2 байта/24 канала = 240 полных смен всех каналов в секунду, или 5760 смен индивидуальных каналов в секунду. Интервал между приемами двух соседних байт равен 87 микросекундам, и при затратах на мою ISR приема байта в 25 тактов (19min+31max)/2=25), то есть 1.25 мкс, средняя загрузка ядра этой ISR составит 1.43%.
- Будьте так добры, приведите же, наконец, полный текст Вашей процедуры приема и формирования 24-х бит-паттернов ШИМ, отталкиваясь от того же темпа - 5760 каналов в секунду - тогда мы все, может быть, увидим, что и с чем мы все это время сравниваем. Напомню, что моя версия при 100% загрузке 20-МИПСового ядра позволяет плучить частоту ШИМ в 1200 ГЦ (с учетом приема-раздачи уставок - 1182 ГЦ). Приведите, пожалуйста, Вашу цифру, и я возрадуюсь вместе с Вами. Только не забудьте все же пояснить, что и кому Вы в конце концов пытаетесь доказать, а то рамки здравого смысла в этой дискуссии уже, по-моему, давно и благополучно преодолены