А никто и не обещал, что будет просто. Чувствую, что пора объяснить принципы работы еще раз(:-) Как все работает. Есть фоновая программа + прерывание от усарт, чтобы принять текущие уставки. И еще есть две программы обработки прерываний от таймера0 (назовем их t0cmp и tmr0ovf), которые, собственно говоря, являются формирователями шим. Первая, t0cmp, обрабатывает до 24 прерываний в течение периода шим. Вторая, tmr0ovf, возникает в конце периода шим, она сбрасывает все порты и устанавливает новый адрес таблицы уставок для t0cmp.
А переполнение вообще зачем?
Наиболее быстрый способ посчитать до 256, не привлекая программу. У AVR (в последнем варианте) так и сделано, программно, с помощью двух команд inc pwr и breq reinit_pwm. То есть добавлено 3 МЦ.
Вгрубе для 20 мипсовой атмеги получится так. Прерывания t0cmp могут вознивать хоть каждую микросекунду (пусть будет 20МЦ на прерывание) на периоде 1-255 мкс шим, но никогда на 256 мкс. На 256 мкс возникает всегда одно и тоже прерывание tmr0ovf, которое инициализирует новый период шим.
Я бы так вообще попытался одним вектором обойтись. Источник прерывания только compare все остальное в фоне
Можно ли их объединить в одно прерывание? Конечно, но тогда вам каждый раз при наступлении прерывания придется проверять (делать поллинг), наступило ли прерывание первого типа (смена состояния шим) или второго (конец шим), а это временные затраты.
Кстати, AVR так и поступил, у него одно прерывание от таймера, которое проверяет все каналы и выставляет соответствующие уровни на соответствующих ногах, заодно проверяется не настал ли конец цикла, и если настал, то происходит переход на другую ветку программы. Платой за такой подход является 67 машинных циклов. Сравните с 18МЦ у моей программы. Чтобы достичь максимального быстродействия, приходится бороться за каждый лишний цикл, знаете ли(:-).
Сложно все это рассматривать теоретически. Была бы у Вас готовая прога на Си можно было бы ее запустить и посмотреть к чему приводят те или иные улучшения алгоритма. А так, все это разговор
Ну всё когда-то начинается с мыслей и разговоров, а потом дело доходит до реализации. Так что здесь не просто разговор. Мною предложена оригинальная идея, реализация которой вгрубе утраивает частоту шим, хотя может это никому и не нужно(:-(. Вот вы, для чего вы хотите применить 24-канальный шим?
Щас разберусь с автоматизацией процесса измерения для компенсации систематической ошибки и накатаю вам описание таблицы и программку на си, как ее упорядочивать. Ну а принять 24 уставки на скорости 8 мбод любой имбеддид-программист сможет(:-).
-
- Ответ: + abivan(415 знак., 13.09.2006 12:54, )