|
Как синхронизировать два мк мега 16? |
|
|
3 страниц
1 2 3 >
|
 |
Ответов
(1 - 30)
|
Nov 19 2008, 22:42
|

Частый гость
 
Группа: Участник
Сообщений: 80
Регистрация: 16-07-07
Из: Беларусь, г.Гомель
Пользователь №: 29 165

|
Цитата(_Надя @ Nov 19 2008, 22:11)  Как сказать... я сама в общем то не совсем понимаю что да как, но мне нужно что бы оба мк насколько можно одновременно формировали импульсы.... чтобы разница между началом импульса у 1-го мк и 2-го не должна превышать 1 мкс... в предыдущей программе другого разработчика было организовано формирование контрольной частоты 20 кГц по таймеру Т2. Если происходила рассинхронизация , то устройство переходило в режим отказа. А что можно подразумевать под синхронизацией? Если расскажете - может я быстрее пойму что мне нужно  Если вы имеете ввиду синхронный запуск двух МК, чтобы потом совпадали их CLK , а следовательно и фронты формируемых импульсов, если программы их индентичны, то наверное лучше применить один внешний генератор тактовых импульсов, подать их на два МК, и предусмотреть задержку ввключения питания генератора,для того, чтобы не было рассогласования на МК по включению питания, ведь параметры у каждого МК свои, также сделать синхронную схему сброса для двух МК, чтобы при перезапуске они тоже запускались одновременно. Это что-то вроде, лошади на ипподроме собрались к старту в разное время, но выпустили их одновременно, потомы что всех в один хомут поставили  Цитата(_Надя @ Nov 19 2008, 20:37)  Подскажите как программно синхронизировать два контроллера? Если можно расскажите по-подробнее про синхронизацию, как ее организовать что там важно учесть... Заранее благодарю 
Эскизы прикрепленных изображений
--------------------
Прибор должен работать не в принципе, а в корпусе!
|
|
|
|
|
Nov 19 2008, 23:29
|

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

|
Цитата(_Надя @ Nov 19 2008, 23:11)  Как сказать... я сама в общем то не совсем понимаю что да как, но мне нужно что бы оба мк насколько можно одновременно формировали импульсы.... чтобы разница между началом импульса у 1-го мк и 2-го не должна превышать 1 мкс... Не расскажите в таком случае, зачем это надо, почему нельзя, к примеру, генерить сигналы одним мк? Что Вы все-таки понимаете под синхронизацией, одновременный запуск таймеров или возможность измерять расхождение сигналов первого контроллера относительно второго? Во втором случае можно попробовать использовать Timer Capture и сравнивать момент срабатывания прерывания с ожидаемым временем фронта сигнала. Для первого случая, первое, что приходит в голову - это использовать внешнее прерывани - тем самым можно довольно точно установить фактическое время начала работы второго контроллера, правда нужно весьма аккуратно учесть задержку между подачей синхросигнала и срабатыванием прерывания. В любом случае, это довольно жесткие решения, которых лучше, ПМСМ, избегать.
|
|
|
|
|
Nov 20 2008, 18:00
|
Участник

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

|
К сожалению, генерировать сигналы одним мк нельзя... не буду сильно вдаваться в подробности, но сигналы с двух мк поступают на схему контроля, которая будет улавливать рассогласование между началом импульсов с 1 мк и началом таких же импульсов со 2-го мк. рассогласование не должно превышать 1 мкс. У меня сейчас имульсы совсем как то странно формируются... рассогласование между началами импульсов достигает 100 -200 мс. причем эта величина не постоянная, а меняется и в какой то момент времени начала фронтов импульсов совпадают а потом снова расходятся. программы практически одинаковые у двух мк, за исключением того что первый мк мастер второй слэйв. С чем может быть связано и как такое устранить?
|
|
|
|
|
Nov 20 2008, 18:30
|

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

|
Цитата(_Надя @ Nov 20 2008, 21:00)  К сожалению, генерировать сигналы одним мк нельзя... не буду сильно вдаваться в подробности, но сигналы с двух мк поступают на схему контроля, которая будет улавливать рассогласование между началом импульсов с 1 мк и началом таких же импульсов со 2-го мк. рассогласование не должно превышать 1 мкс. У меня сейчас имульсы совсем как то странно формируются... рассогласование между началами импульсов достигает 100 -200 мс. Свои мысли насчет синхронизации уже изложил, поэтому хочется узнать, а как сейчас Вы их синхронизируете? Насчет плавающего рассогласования между фронтами могу предположить, что причиной тому могут быть гонки между прерываниями. Попробуйте убрать все прерывания, кроме прерывания таймера, заменив из проверкой флага в главном цикле.
|
|
|
|
|
Nov 24 2008, 10:12
|
Местный
  
Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997

|
Цитата(_Надя @ Nov 20 2008, 21:00)  К сожалению, генерировать сигналы одним мк нельзя... не буду сильно вдаваться в подробности, но сигналы с двух мк поступают на схему контроля, которая будет улавливать рассогласование между началом импульсов с 1 мк и началом таких же импульсов со 2-го мк. рассогласование не должно превышать 1 мкс. У меня сейчас имульсы совсем как то странно формируются... рассогласование между началами импульсов достигает 100 -200 мс. причем эта величина не постоянная, а меняется и в какой то момент времени начала фронтов импульсов совпадают а потом снова расходятся. программы практически одинаковые у двух мк, за исключением того что первый мк мастер второй слэйв. С чем может быть связано и как такое устранить? .... а Вы случайно не какую нибудь железяку для ЖД делаете....??? Тама любят.... два МК .... да чтоб вместе что нить генерили.....  Цитата(_Надя @ Nov 19 2008, 21:37)  Подскажите как программно синхронизировать два контроллера? Если можно расскажите по-подробнее про синхронизацию, как ее организовать что там важно учесть... Заранее благодарю  А Вам нужно что бы сигналы физически формировались на портах различных МК или достаточно того что в формировании участвуют два МК, но сами сигналы снимаются физически с портов одного МК?
|
|
|
|
|
Nov 24 2008, 16:37
|
Участник

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

|
Как Вы угадали  Для ж.д. это точно. И мне нужно что бы сигналы физически формировались на портах различных МК .
|
|
|
|
|
Nov 24 2008, 20:39
|
Участник

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

|
Цитата(Aesthete Animus @ Nov 20 2008, 21:30)  Свои мысли насчет синхронизации уже изложил, поэтому хочется узнать, а как сейчас Вы их синхронизируете?
Насчет плавающего рассогласования между фронтами могу предположить, что причиной тому могут быть гонки между прерываниями. Попробуйте убрать все прерывания, кроме прерывания таймера, заменив из проверкой флага в главном цикле. Сейчас я их к сожалению никак не синхронизирую и работают они у меня от внутренних RC цепочек. Убрала из программы всё, кроме одного таймера по которому формируются импульсы. Картина та же. А плавающее рассогласование - это скорее просто так кажется т.к. один мк работает быстрее чем второй и поэтому в какой то момент времени сигналы то совпадают то снова расходятся. если бы у мк CLK совпадали, то сигналы бы шли с одинаковой задержкой. В общем как то так думаю. Если ошибаюсь - поправьте , пожалуйста. И еще . подскажите , пожалуйста что такое Timer Capture и как им пользоваться
Сообщение отредактировал _Надя - Nov 24 2008, 20:44
|
|
|
|
|
Nov 25 2008, 00:14
|

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

|
Цитата(_Надя @ Nov 24 2008, 23:39)  Сейчас я их к сожалению никак не синхронизирую и работают они у меня от внутренних RC цепочек. Можно конечно попытаться калибровать RC цепочку, но сомневаюсь, что даже так удастся добиться нужной Вам точности. Не пойму, что Вам мешает тактировать их от одного источника или же поставить обыкновенные кварцевые резанаторы? Цитата(_Надя @ Nov 24 2008, 23:39)  И еще . подскажите , пожалуйста что такое Timer Capture и как им пользоваться  Естесственно надо почитать, даташит на странице 96, также, AppNote AVR130  Вообще суть очень простая. Запускаете таймер, а для этого достаточно установить ненулевой прескаллер. После этого, если на ножке ICPn обнаруживается фронт (передний или задний - это можно настроить), то в регистр ICRn записывается текущее значение TCNTn, устаналивается флаг ICFn и (если разрешено) вызывается прерывание Timer Capture Inerrupt. Далее (в перывании или проверив флаг ICFn) регистр ICRn можно прочитать и точно узнать момент генерации фронта, для того, чтобы сверить его с ожидаемым.
|
|
|
|
|
Nov 25 2008, 04:51
|
Местный
  
Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997

|
Цитата(_Надя @ Nov 24 2008, 19:37)  Как Вы угадали  Для ж.д. это точно. И мне нужно что бы сигналы физически формировались на портах различных МК . Решал ну очень похожую задачу.... Я делал так что МК работали в "кольце". Один мк вырабатывает импульс и подаёт его на целевое устройство, в то же время этот импульс служит синхросигналом для второго МК, который вырабатывает следующий импульс и этот импульс служит сигналом синхронизации для первого МК и целевым сигналом. Если один из МК умирает то генерация прекращается с обоих МК (думаю это то что Вам нужно.. если для ЖД делаете  ). В кратце так.... А реализация зависит от конкретного МК и параметров сигналов которые вам нужно получить... Используйте внешние прерывания, INT0 например или таймера.... Формируйте импульсы в обработчике прерывания.... Я так делал... формировались чётко синхронные импулься на портах разных МК
|
|
|
|
|
Nov 25 2008, 13:54
|
Участник

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

|
Цитата(Aesthete Animus @ Nov 25 2008, 03:14)  Можно конечно попытаться калибровать RC цепочку, но сомневаюсь, что даже так удастся добиться нужной Вам точности. Не пойму, что Вам мешает тактировать их от одного источника или же поставить обыкновенные кварцевые резанаторы? Естесственно надо почитать, даташит на странице 96, также, AppNote AVR130  Вообще суть очень простая. Запускаете таймер, а для этого достаточно установить ненулевой прескаллер. После этого, если на ножке ICPn обнаруживается фронт (передний или задний - это можно настроить), то в регистр ICRn записывается текущее значение TCNTn, устаналивается флаг ICFn и (если разрешено) вызывается прерывание Timer Capture Inerrupt. Далее (в перывании или проверив флаг ICFn) регистр ICRn можно прочитать и точно узнать момент генерации фронта, для того, чтобы сверить его с ожидаемым. Спасибо Вам огромное  Естественно ничто не мешает мне их тактировать от одного источника, что я сегодня и проделала. Поставила один кварц на 12 МГц сразу на два МК. Значительно полегчало. Теперь рассогласования достигают 200-300 мкс. Даташит , конечно, очень полезно читать, но увы, не знание английского здесь очень большой минус . поэтому читаю с промтом... не всегда удачно  За описание сути работы с Timer Capture еще раз благодарю  Цитата(BigBolt @ Nov 25 2008, 07:51)  Решал ну очень похожую задачу.... Я делал так что МК работали в "кольце". Один мк вырабатывает импульс и подаёт его на целевое устройство, в то же время этот импульс служит синхросигналом для второго МК, который вырабатывает следующий импульс и этот импульс служит сигналом синхронизации для первого МК и целевым сигналом. Если один из МК умирает то генерация прекращается с обоих МК (думаю это то что Вам нужно.. если для ЖД делаете  ). В кратце так.... А реализация зависит от конкретного МК и параметров сигналов которые вам нужно получить... Используйте внешние прерывания, INT0 например или таймера.... Формируйте импульсы в обработчике прерывания.... Я так делал... формировались чётко синхронные импулься на портах разных МК Интересный способ. Нужно будет подумать. Когда ставили изначально задачу формирования управляющих сигналов и контроля над работой АЦП да и вообще над МК , был примерно такой же вариант реализациии только с тремя мк. Тестовые генераторы задавали тестирующие импульсы, первый МК в это время формировал управляющие сигналы, второй в это время тестировался - результат тестирования сравнивался с третим МК. потом первый и второй мк менялись ролями. В общем как то так было . Потом начальник отказался от этой идеи и решил что сразу 2 мк будут одновременно формировать управляющие сигналы. А Вы тоже на ж.д. работаете?
|
|
|
|
|
Nov 25 2008, 15:33
|

Гуру
     
Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591

|
Цитата(_Надя @ Nov 25 2008, 16:54)  Спасибо Вам огромное  Поставила один кварц на 12 МГц сразу на два МК. Значительно полегчало. Это действительно новое  в схемотехнике МК, может лучше попробовать один внешний генератор сразу на два МК? Вдруг полегчает еще больше? Или сделать один МК как обычно, а второй подключить к выходу кварц. генератора входом. XTAL1 -вход XTAL2-выход И , кажись, надо запрограммировать CKOPT
|
|
|
|
|
Nov 25 2008, 15:55
|

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

|
Цитата(_Надя @ Nov 25 2008, 16:54)  За описание сути работы с Timer Capture еще раз благодарю  Всегда пожалуйста  Цитата(_Надя @ Nov 25 2008, 16:54)  Теперь рассогласования достигают 200-300 мкс. Это вероятнее всего статическая погрешность изза несинхронного старта. Ее при желании можно свести к минимуму.  Цитата(muravei @ Nov 25 2008, 18:33)  Это действительно новое  в схемотехнике МК, может лучше попробовать один внешний генератор сразу на два МК? Вдруг полегчает еще больше? Внешним генератор - согласен, поставить стоит. А вот такое решение Цитата(muravei @ Nov 25 2008, 18:33)  Или сделать один МК как обычно, а второй подключить к выходу кварц. генератора входом. вообще говоря не работает, в том числе и с общим внешним генератором.
|
|
|
|
|
Nov 25 2008, 16:18
|
Участник

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

|
Цитата(muravei @ Nov 25 2008, 18:33)  Это действительно новое  в схемотехнике МК, может лучше попробовать один внешний генератор сразу на два МК? Вдруг полегчает еще больше? Или сделать один МК как обычно, а второй подключить к выходу кварц. генератора входом. XTAL1 -вход XTAL2-выход И , кажись, надо запрограммировать CKOPT тактового генератора не было к сожалению.... А чем плох в таком использовании кварц? А СКОРТ точно нужно программировать? Я читала что вроде как не надо этого делать , если использовать внешний источник тактового сигнала.
|
|
|
|
|
Nov 25 2008, 17:34
|

Гуру
     
Группа: Свой
Сообщений: 2 538
Регистрация: 13-08-05
Пользователь №: 7 591

|
Цитата(Aesthete Animus @ Nov 25 2008, 18:55)  вообще говоря не работает, в том числе и с общим внешним генератором. Врать не буду, не использовал, но упоминание об использовании генераторного усилителя в качестве клок -буфера :" When CKOPT is programmed, the Oscillator output will oscillate will a full rail-to-rail swing on the output. This mode is suitable when operating in a very noisy environment or when the output from XTAL2 drives a second clock buffer."
|
|
|
|
|
Nov 25 2008, 18:46
|
Участник

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

|
Цитата(Aesthete Animus @ Nov 25 2008, 19:26)  2_Надя С незопрограммированным CKOPT максимальная частота 8 MHz. Подробности - в разделе System Clock and Clock Options -> Crystal Oscillator а что считается запрограммированным СКОРТ? Когда стоит галочка напротив фьюза или когда ее нет? у меня галочки не было. Я выбрала фьюз по-моему CKSEL = 1111 SUT =10.... при этом реально ощутила изменение частоты, т.к. поменялся период и длительности импульсов...
|
|
|
|
|
Nov 25 2008, 20:02
|
Участник

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

|
Да я тут уже поставила как то по ошибке не тот фьюз контроллер перестал прошиваться.... пришлось брать частоту с стк 500 - тогда только удалось перепрошить фьюзы... А RTFM что т такое и где искать?
Сообщение отредактировал _Надя - Nov 25 2008, 20:04
|
|
|
|
|
Nov 26 2008, 05:15
|
Местный
  
Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997

|
Цитата(_Надя @ Nov 25 2008, 16:54)  А Вы тоже на ж.д. работаете? Ну что то вроде того.... А один кварц или генератора или там ещё чего на 2-а МК не думаю что хорошо. Использую 2 МК и один источник тактового сигнала вы теряете принцип независимости отказов в каналах... Вам ведь безопасность нужна, я так понимаю.... Экспертиза зарежет.... 99.999999999999999999%  . В случае если вы конечно особо ответственное изделие делаете....
Сообщение отредактировал BigBolt - Nov 26 2008, 05:22
|
|
|
|
|
Nov 26 2008, 18:36
|
Участник

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

|
Цитата(Aesthete Animus @ Nov 25 2008, 03:14)  Можно конечно попытаться калибровать RC цепочку, но сомневаюсь, что даже так удастся добиться нужной Вам точности. Не пойму, что Вам мешает тактировать их от одного источника или же поставить обыкновенные кварцевые резанаторы? Естесственно надо почитать, даташит на странице 96, также, AppNote AVR130  Вообще суть очень простая. Запускаете таймер, а для этого достаточно установить ненулевой прескаллер. После этого, если на ножке ICPn обнаруживается фронт (передний или задний - это можно настроить), то в регистр ICRn записывается текущее значение TCNTn, устаналивается флаг ICFn и (если разрешено) вызывается прерывание Timer Capture Inerrupt. Далее (в перывании или проверив флаг ICFn) регистр ICRn можно прочитать и точно узнать момент генерации фронта, для того, чтобы сверить его с ожидаемым. подскажите пожалуйста еще, а то я совсем запуталась... я запускаю таймеры первого и второго мк. Тот мк который быстрее входит в прерывание будет формировать импульс на какой нибудь ноге и подавать этот импульс на вход ICPn второго мк? и тот сразу будет уходить в прерывание? Я думала еще по другому написать : мк который входит в прерывание первым посылает второму на ногу уровень, а сам ждет пока тот второй войдет в прерывание и пошлет ему уровень - после этого дальше они одновременно продолжают прогамму... так можно? проблема у меня только в том, что я не совсем знаю как это написать на СИ... как написать к примеру, ждать пока бит 2 порта д станет равным 1 и как только он станет 1 будем продолжать выполнение программы...?
|
|
|
|
|
Nov 26 2008, 19:05
|
Местный
  
Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997

|
Цитата(_Надя @ Nov 26 2008, 21:36)  подскажите пожалуйста еще, а то я совсем запуталась... я запускаю таймеры первого и второго мк. Тот мк который быстрее входит в прерывание будет формировать импульс на какой нибудь ноге и подавать этот импульс на вход ICPn второго мк? и тот сразу будет уходить в прерывание? Я думала еще по другому написать : мк который входит в прерывание первым посылает второму на ногу уровень, а сам ждет пока тот второй войдет в прерывание и пошлет ему уровень - после этого дальше они одновременно продолжают прогамму... так можно? проблема у меня только в том, что я не совсем знаю как это написать на СИ... как написать к примеру, ждать пока бит 2 порта д станет равным 1 и как только он станет 1 будем продолжать выполнение программы...? Всё хорошо когда у вас контроллёры только и делают что формируют импульсы, если же они выполняют ещё какие то задачи и при этом происходит обработка ещё каких либо прерываний, то возможно будет наблюдаться дёрганье фазы сигналов и прочее подобное. Если в проге много обработчиков прерываний то вся синхронизация сигналов, формируемая с использованием прерываний летит коту под хвост. Вообще такие задачи лучше решать на аппаратном уровне.... Как вариант использование МК и ПЛИС ( мвозможно просто логики) в симбиозе...
Сообщение отредактировал BigBolt - Nov 26 2008, 19: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, 05:12
|
Местный
  
Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997

|
Цитата(_Надя @ Nov 27 2008, 22:03)  Может еще можно как то синхронизировать это дело? как это с плис сделать? Если честно то мне не удалось добится получения с двух МК синхронных импульсов.... Они выполняли много задач и генерация импульсов на основе прерываний не дала должного результата... Вобщем в конце концов я контролёрами генерил просто прямоугольники ( несинхронные), а специальный узел на основе 74НС**** генерил из этих прямоугольников синхронные сигналы с установленными параметрами.... Дёшево  и сердито получилось....
|
|
|
|
|
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'а), или делать все аппаратно, что будет сложнее.
|
|
|
|
|
Nov 28 2008, 18:40
|
Участник

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

|
Сегодня попробовала сделать так с Timer Capture: настроила мк, который работает быстрее так, чтобы таймер входил в прерывание по переполнению, а у второго мк по захвату - все очень хорошо работает. Одно но - нужно знать какой из мк работает быстрее. потом настроила таймеры обоих мк так, чтобы в зависимости от ситуации они входили в прерывание либо по захвату либо по переполнению ( установила два флага разрешения прерываний и написала два обработчика прерываний - по захвату и по переполнению). Вроде даже что то получилось - одно но - получился сдвиг импульса на одно прерывание. Т.е. если импульсы должны оба формироваться через 1,2 сек, то теперь один формируется через 1,2 сек а другой через 1,28 секю Пока как то так получилось...
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|