|
Как синхронизировать два мк мега 16? |
|
|
|
 |
Ответов
|
Nov 27 2008, 00:33
|

Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317

|
Цитата(_Надя @ Nov 26 2008, 21:36)  подскажите пожалуйста еще, а то я совсем запуталась... я запускаю таймеры первого и второго мк. Тот мк который быстрее входит в прерывание будет формировать импульс на какой нибудь ноге и подавать этот импульс на вход ICPn второго мк? и тот сразу будет уходить в прерывание? Входить в прерывание не обязательно, можно проверить флаг прерывания. Но как верно заметил BigBolt, проблемы могут возникнуть если контроллер сильно нагружен другими задачами. В общем, не лишне будет, если подробно расскажете, какие параметры должны быть у сигнала. К примеру, если период импульсов у какого-то из контроллеров большой, то можно надеятся, что в перерывах между прерываниями успеете проверить флаг и померять импульс. Если частота импульсов высокая, то можно сигнал генерить аппаратно (подробно описано в "Modes of Operation" в главе про таймеры), а измерение импульса при этом обрабатывать в прерывании.
|
|
|
|
|
Nov 27 2008, 19:03
|
Участник

Группа: Участник
Сообщений: 26
Регистрация: 18-11-08
Пользователь №: 41 741

|
Цитата(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
|
|
|
|
|
Nov 28 2008, 08:43
|
Гуру
     
Группа: Свой
Сообщений: 3 123
Регистрация: 7-04-07
Из: Химки
Пользователь №: 26 847

|
Цитата(_Надя @ Nov 27 2008, 22:03)  по таймеру Т1 у меня формируюутся импульсы длительностью 8 мс. (таймер каждые 8 мс входит в прерывания.) спустя 1,2 секунды после включения питания на одной ноге мк формируется импульс длительностью 8 мс, когда он заканчивается на другой ноге мк формируется такой же импулсьс. Период следования импульсов 1,6 сек.
Задача состоит в том, чтобы синхронизировать импульсы которые по 8 мс, чтобы начальные фронты импульсов первого мк и второго совпадали.
Может еще можно как то синхронизировать это дело? Можно, вам нужен PLL. В качестве фазового детектора нужно использовать Capture модуль, вместо VCO использовать коррекцию периода таймера T1. Цитата как это с плис сделать? Смотря что, если только генерацию импульсов по 8мс, то довольно просто (в среднетолстую CPLD должно влезть). Если же все, что было перечисленно в предыдущем посте, то тоже можно, но уже сложнее. Придется брать FPGA и делать в ней простенький процессор (типа PicoBlaze'а), или делать все аппаратно, что будет сложнее.
|
|
|
|
Сообщений в этой теме
_Надя Как синхронизировать два мк мега 16? Nov 19 2008, 18:37 Aesthete Animus Цитата(_Надя @ Nov 19 2008, 21:37) Подска... Nov 19 2008, 19:08 _Надя Как сказать... я сама в общем то не совсем поним... Nov 19 2008, 20:11 Кастусь Рыжов Цитата(_Надя @ Nov 19 2008, 22:11) Как ск... Nov 19 2008, 22:42 Aesthete Animus Цитата(_Надя @ Nov 19 2008, 23:11) Как ск... Nov 19 2008, 23:29 _Надя К сожалению, генерировать сигналы одним мк нельз... Nov 20 2008, 18:00 Aesthete Animus Цитата(_Надя @ Nov 20 2008, 21:00) К сожа... Nov 20 2008, 18:30  _Надя Цитата(Aesthete Animus @ Nov 20 2008, 21... Nov 24 2008, 20:39   Aesthete Animus Цитата(_Надя @ Nov 24 2008, 23:39) Сейчас... Nov 25 2008, 00:14    _Надя Цитата(Aesthete Animus @ Nov 25 2008, 03... Nov 25 2008, 13:54     muravei Цитата(_Надя @ Nov 25 2008, 16:54) Спасиб... Nov 25 2008, 15:33      _Надя Цитата(muravei @ Nov 25 2008, 18:33) Это ... Nov 25 2008, 16:18     BigBolt Цитата(_Надя @ Nov 25 2008, 16:54) А Вы т... Nov 26 2008, 05:15    _Надя Цитата(Aesthete Animus @ Nov 25 2008, 03... Nov 26 2008, 18:36     BigBolt Цитата(_Надя @ Nov 26 2008, 21:36) подска... Nov 26 2008, 19:05 SysRq Цитата(_Надя @ Nov 20 2008, 21:00) С чем ... Nov 20 2008, 18:37 BigBolt Цитата(_Надя @ Nov 20 2008, 21:00) К сожа... Nov 24 2008, 10:12 _Надя Как Вы угадали Для ж.д. это точно. И мне нужно ч... Nov 24 2008, 16:37 BigBolt Цитата(_Надя @ Nov 24 2008, 19:37) Как Вы... Nov 25 2008, 04:51 Aesthete Animus Цитата(_Надя @ Nov 25 2008, 16:54) За опи... Nov 25 2008, 15:55 muravei Цитата(Aesthete Animus @ Nov 25 2008, 18... Nov 25 2008, 17:34 Aesthete Animus 2_Надя
С незопрограммированным CKOPT максимальная ... Nov 25 2008, 16:26 _Надя Цитата(Aesthete Animus @ Nov 25 2008, 19... Nov 25 2008, 18:46  Aesthete Animus Цитата(_Надя @ Nov 25 2008, 21:46) а что ... Nov 25 2008, 19:12 _Надя Да я тут уже поставила как то по ошибке не тот ... Nov 25 2008, 20:02 vvvvv .....
while (!(PIN&(1<<BIT2) )){} ; ... Nov 26 2008, 18:53  BigBolt Цитата(_Надя @ Nov 27 2008, 22:03) Может ... Nov 28 2008, 05:12 _Надя Сегодня попробовала сделать так с Timer Capture:... Nov 28 2008, 18:40
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|