Цитата(Aesthete Animus @ Nov 27 2008, 03:33)

Входить в прерывание не обязательно, можно проверить флаг прерывания. Но как верно заметил BigBolt, проблемы могут возникнуть если контроллер сильно нагружен другими задачами. В общем, не лишне будет, если подробно расскажете, какие параметры должны быть у сигнала. К примеру, если период импульсов у какого-то из контроллеров большой, то можно надеятся, что в перерывах между прерываниями успеете проверить флаг и померять импульс. Если частота импульсов высокая, то можно сигнал генерить аппаратно (подробно описано в "Modes of Operation" в главе про таймеры), а измерение импульса при этом обрабатывать в прерывании.
приношу свои извинения за длинный текст...
Начну пожалуй с алгоритма ....
он примерно такой:
по таймеру Т0 с частотой 2 КГц у меня запускается ацп. по прерыванию ацп измеренные значения записываются в массив размером 255. далее этот массив обрабатывается - ищется в нем максимум. Потом мк обмениваются этими максимумами по SPI. Далее идет пороговый анализ, где сравниваются принятое значения по SPI с измеренным максимумом. Если разница не большая то берем наименьшее и сравниваем его с записанным в ЕЕПРОМ порогом. Если больше порога - включаем порт, если меньше - выключаем. при этом еще по таймеру Т1 у меня формируюутся импульсы длительностью 8 мс. (таймер каждые 8 мс входит в прерывания.) спустя 1,2 секунды после включения питания на одной ноге мк формируется импульс длительностью 8 мс, когда он заканчивается на другой ноге мк формируется такой же импулсьс. Период следования импульсов 1,6 сек. При включении питания также на третей ноге мк формируется имульс длительностью 4,8 сек - этот импульс формируется только один раз за все выполнение программы. И еще на четвертой ноге через 3,2 сек после вкл. питания также формируется импульс длительностью 1,6 сек - тоже один раз. Но если извне на порт мк приходит сигнал рассогласования то на этой четвертой ноге начинают формироваться импульсы перезапуска с периодом следования 1,6 сек, длительностью 300 мс - формируются до тех пор, пока не пропадет сигнал рассогласования. при этом всегда неважно есть рассогласование или нет должны формироваться импульсы которые по 8 мс . второй мк формирует инверсные аналоги импульсов первого мк. ну и еще один из мк должен формировать частоту 1 кГц ( я пока ее не написала). Задача состоит в том, чтобы синхронизировать импульсы которые по 8 мс, чтобы начальные фронты импульсов первого мк и второго совпадали. Синхронность остальных импульсов не важна. Еще по таймеру Т1 эти импульсы , которые по 8 мс выводятся на порт - так называемый тестовый выход, на него еще выводится то максимальное значение, которое предается по SPI.
Сегодня инетереса ради подключала к мк два кварца - рассогласование сразу стало заметным - один мк работает быстрее , другой медленее... ну и со временем импульсы то сходятся - то расходятся....
потом написала так программу: когда мк, который первм входит в прерывание посылает второму сигнал, а сам ждет от того ответа. второй когда входит в прерывание - посылает ответ первому и дальше они начинают синхронно выполнять программу. синхрнизируется все хорошо, только остальная программа совсем не работает. Думаю , что с Timer Capture получится примерно тоже самое.
но все же потом попробовала с Timer Capture как Вы советовали... тут запуталась... думала написать так, что мк, котрый первым входит в прерывание пошлет второму на вход ICP сигнал и тот тоже войдет в прерывание... здесь получается что один мк должен входить в прерывание по перполнению, а второй по захвату... получается нужно знать каждый раз какой из мк быстрее работает... а если не знать - я же могу настроить таймер так, что бы в зависимости от ситуации он входил в прерывание по переполнению либо по захвату - или это не так? в общем я совсем запуталась...
Еще раз прошу прощения, что много написала...
Может еще можно как то синхронизировать это дело? как это с плис сделать?
Сообщение отредактировал _Надя - Nov 27 2008, 19:04