Re: Прошу помощи - одновременное исп. трех таймеров на Atmega8Alex_Sor писал(а):
в атмегах одноуровневые прерывания без диспетчера и иерархичности
Это так. Всю иерархию (если она нужна) нужно делать вручную. И это гораздо более гибкое решение, чем любой железный "диспетчер".
Alex_Sor писал(а):
Программы в которых более одного прерывания по таймеру - обречены на провал изначально. аминь.
Это полная ерунда.
В вашей программе основная проблема в том, что два "независимых асинхронных процесса" занимают один и тот же ресурс. Например лезут в АЦП. Представьте один процесс инициализировал АЦП, запустил преобразование и ждет, когда АЦП отработает. И "вдруг" просыпается другой процесс, который тоже инициализирует АЦП, запускает его... Абсолютно естественно, что первый процесс уже никогда не дождется корректного результата. Ровно то же самое было бы в любой другой системе - и в компе и в чем угодно. Чтобы такого не происходило, нужно пользоваться критическими секциями. А лучше проектировать программу так, чтобы независимые процессы не лезли в один и тот же ресурс.
Другая проблема вашей программы в том, что прерывания, вероятно, физически не могут отработать за нужное время - это потенциально приведет к всплытию стека. Грубо говоря, вы каждые 200 микросекунд хотите получить два значения из АЦП (их измерение занимает 130 микросекунд), но при этом вы хотите воткнуть между этими циклами еще одно прерывание, которое тоже хочет прочитать два значения из АЦП (то есть еще на 130 микросекунд). Ну оно же физически туда не вписывается - очевидно же.
Alex_Sor писал(а):
если прерывание по таймеру - то забудьте о функциях типа delay(xxx);
Да. Если функция delay() опирается не на таймер, а на скорость выполнения цикла. Точно так же ведет себя любая другая система - например, компьютер.
Alex_Sor писал(а):
единственный способ чем-то наружным управлять шимом или двумя-тремя шимами - это fast pwm БЕЗ прерывания, и рулить только вгрузкой в таймеры OCRx величин БЕЗ прерываний.
Полная ерунда.
Alex_Sor писал(а):
Тут можно себе позволить какое-то одно прерывание но если оно от таймера- то сам этот таймер будет работать рвано
С чего это он будет "работать рвано", если оно "какое-то одно".
На самом деле, с такими временами как у вас - десятки-сотни микросекунд (сотни-тысячи тактов процессора) можно сделать почти все что угодно даже на СИ.
На ассемблере не очень сложно выдавать критичные ко времени события с точностью кварца (если это действительно нужно), даже не используя аппаратных возможностей таймера.
Alex_Sor писал(а):
ATXMega - там наворотили поинтересней
ATXmega - безусловно поинтереснее. Но если вы ждете, что он каким-то образом сможет выполнять два процесса независимо, то вам он не поможет.

Alex_Sor писал(а):
перспектив с этим процессором там нет.
Ну и ладненько.
Удач, несмотря ни на что.
P.S.
Про С8051 - доставило.