реклама на сайте
подробности

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Как синхронизировать два мк мега 16?
_Надя
сообщение Nov 19 2008, 18:37
Сообщение #1


Участник
*

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



Подскажите как программно синхронизировать два контроллера? Если можно расскажите по-подробнее про синхронизацию, как ее организовать что там важно учесть... Заранее благодарю smile.gif
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Nov 19 2008, 19:08
Сообщение #2


Местный
***

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



Цитата(_Надя @ Nov 19 2008, 21:37) *
Подскажите как программно синхронизировать два контроллера? Если можно расскажите по-подробнее про синхронизацию, как ее организовать что там важно учесть... Заранее благодарю smile.gif

Кхм... А что Вы разумеете под синхронизацией?
Go to the top of the page
 
+Quote Post
_Надя
сообщение Nov 19 2008, 20:11
Сообщение #3


Участник
*

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



Как сказать... я сама в общем то не совсем понимаю что да как, но мне нужно что бы оба мк насколько можно одновременно формировали импульсы.... чтобы разница между началом импульса у 1-го мк и 2-го не должна превышать 1 мкс... в предыдущей программе другого разработчика было организовано формирование контрольной частоты 20 кГц по таймеру Т2. Если происходила рассинхронизация , то устройство переходило в режим отказа. А что можно подразумевать под синхронизацией? Если расскажете - может я быстрее пойму что мне нужно smile.gif
Go to the top of the page
 
+Quote Post
Кастусь Рыжов
сообщение Nov 19 2008, 22:42
Сообщение #4


Частый гость
**

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



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

Если вы имеете ввиду синхронный запуск двух МК, чтобы потом совпадали их CLK , а следовательно и фронты формируемых импульсов, если программы их индентичны, то наверное лучше применить один внешний генератор тактовых импульсов, подать их на два МК, и предусмотреть задержку ввключения питания генератора,для того, чтобы не было рассогласования на МК по включению питания, ведь параметры у каждого МК свои, также сделать синхронную схему сброса для двух МК, чтобы при перезапуске они тоже запускались одновременно.
Это что-то вроде, лошади на ипподроме собрались к старту в разное время, но выпустили их одновременно, потомы что всех в один хомут поставили 07.gif

Цитата(_Надя @ Nov 19 2008, 20:37) *
Подскажите как программно синхронизировать два контроллера? Если можно расскажите по-подробнее про синхронизацию, как ее организовать что там важно учесть... Заранее благодарю smile.gif

Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Прибор должен работать не в принципе, а в корпусе!
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Nov 19 2008, 23:29
Сообщение #5


Местный
***

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



Цитата(_Надя @ Nov 19 2008, 23:11) *
Как сказать... я сама в общем то не совсем понимаю что да как, но мне нужно что бы оба мк насколько можно одновременно формировали импульсы.... чтобы разница между началом импульса у 1-го мк и 2-го не должна превышать 1 мкс...

Не расскажите в таком случае, зачем это надо, почему нельзя, к примеру, генерить сигналы одним мк? Что Вы все-таки понимаете под синхронизацией, одновременный запуск таймеров или возможность измерять расхождение сигналов первого контроллера относительно второго?

Во втором случае можно попробовать использовать Timer Capture и сравнивать момент срабатывания прерывания с ожидаемым временем фронта сигнала.

Для первого случая, первое, что приходит в голову - это использовать внешнее прерывани - тем самым можно довольно точно установить фактическое время начала работы второго контроллера, правда нужно весьма аккуратно учесть задержку между подачей синхросигнала и срабатыванием прерывания.

В любом случае, это довольно жесткие решения, которых лучше, ПМСМ, избегать.
Go to the top of the page
 
+Quote Post
_Надя
сообщение Nov 20 2008, 18:00
Сообщение #6


Участник
*

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



К сожалению, генерировать сигналы одним мк нельзя... не буду сильно вдаваться в подробности, но сигналы с двух мк поступают на схему контроля, которая будет улавливать рассогласование между началом импульсов с 1 мк и началом таких же импульсов со 2-го мк. рассогласование не должно превышать 1 мкс.
У меня сейчас имульсы совсем как то странно формируются... рассогласование между началами импульсов достигает 100 -200 мс. причем эта величина не постоянная, а меняется и в какой то момент времени начала фронтов импульсов совпадают а потом снова расходятся. программы практически одинаковые у двух мк, за исключением того что первый мк мастер второй слэйв.
С чем может быть связано и как такое устранить?
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Nov 20 2008, 18:30
Сообщение #7


Местный
***

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



Цитата(_Надя @ Nov 20 2008, 21:00) *
К сожалению, генерировать сигналы одним мк нельзя... не буду сильно вдаваться в подробности, но сигналы с двух мк поступают на схему контроля, которая будет улавливать рассогласование между началом импульсов с 1 мк и началом таких же импульсов со 2-го мк. рассогласование не должно превышать 1 мкс.
У меня сейчас имульсы совсем как то странно формируются... рассогласование между началами импульсов достигает 100 -200 мс.


Свои мысли насчет синхронизации уже изложил, поэтому хочется узнать, а как сейчас Вы их синхронизируете?

Насчет плавающего рассогласования между фронтами могу предположить, что причиной тому могут быть гонки между прерываниями. Попробуйте убрать все прерывания, кроме прерывания таймера, заменив из проверкой флага в главном цикле.
Go to the top of the page
 
+Quote Post
SysRq
сообщение Nov 20 2008, 18:37
Сообщение #8


Чайник, 1 литр
****

Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168



Цитата(_Надя @ Nov 20 2008, 21:00) *
С чем может быть связано и как такое устранить?
С тем, что генерация импульсов программная, в обработчике прерывании от таймера, срабатывание которого могут задерживать другие прерывания.
Таймеры МК умеют аппаратно генерировать импульсы (на выводах OCx), в разных режимах.
Go to the top of the page
 
+Quote Post
EugeNNe
сообщение Nov 24 2008, 10:12
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



Цитата(_Надя @ Nov 20 2008, 21:00) *
К сожалению, генерировать сигналы одним мк нельзя... не буду сильно вдаваться в подробности, но сигналы с двух мк поступают на схему контроля, которая будет улавливать рассогласование между началом импульсов с 1 мк и началом таких же импульсов со 2-го мк. рассогласование не должно превышать 1 мкс.
У меня сейчас имульсы совсем как то странно формируются... рассогласование между началами импульсов достигает 100 -200 мс. причем эта величина не постоянная, а меняется и в какой то момент времени начала фронтов импульсов совпадают а потом снова расходятся. программы практически одинаковые у двух мк, за исключением того что первый мк мастер второй слэйв.
С чем может быть связано и как такое устранить?



.... а Вы случайно не какую нибудь железяку для ЖД делаете....??? Тама любят.... два МК .... да чтоб вместе что нить генерили..... smile.gif

Цитата(_Надя @ Nov 19 2008, 21:37) *
Подскажите как программно синхронизировать два контроллера? Если можно расскажите по-подробнее про синхронизацию, как ее организовать что там важно учесть... Заранее благодарю smile.gif



А Вам нужно что бы сигналы физически формировались на портах различных МК или достаточно того что в формировании участвуют два МК, но сами сигналы снимаются физически с портов одного МК?
Go to the top of the page
 
+Quote Post
_Надя
сообщение Nov 24 2008, 16:37
Сообщение #10


Участник
*

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



Как Вы угадали smile.gif Для ж.д. это точно. И мне нужно что бы сигналы физически формировались на портах различных МК .
Go to the top of the page
 
+Quote Post
_Надя
сообщение Nov 24 2008, 20:39
Сообщение #11


Участник
*

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



Цитата(Aesthete Animus @ Nov 20 2008, 21:30) *
Свои мысли насчет синхронизации уже изложил, поэтому хочется узнать, а как сейчас Вы их синхронизируете?

Насчет плавающего рассогласования между фронтами могу предположить, что причиной тому могут быть гонки между прерываниями. Попробуйте убрать все прерывания, кроме прерывания таймера, заменив из проверкой флага в главном цикле.


Сейчас я их к сожалению никак не синхронизирую и работают они у меня от внутренних RC цепочек.
Убрала из программы всё, кроме одного таймера по которому формируются импульсы. Картина та же. А плавающее рассогласование - это скорее просто так кажется т.к. один мк работает быстрее чем второй и поэтому в какой то момент времени сигналы то совпадают то снова расходятся. если бы у мк CLK совпадали, то сигналы бы шли с одинаковой задержкой. В общем как то так думаю. Если ошибаюсь - поправьте , пожалуйста.
И еще . подскажите , пожалуйста что такое Timer Capture и как им пользоваться smile.gif

Сообщение отредактировал _Надя - Nov 24 2008, 20:44
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение Nov 25 2008, 00:14
Сообщение #12


Местный
***

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



Цитата(_Надя @ Nov 24 2008, 23:39) *
Сейчас я их к сожалению никак не синхронизирую и работают они у меня от внутренних RC цепочек.

Можно конечно попытаться калибровать RC цепочку, но сомневаюсь, что даже так удастся добиться нужной Вам точности. Не пойму, что Вам мешает тактировать их от одного источника или же поставить обыкновенные кварцевые резанаторы?

Цитата(_Надя @ Nov 24 2008, 23:39) *
И еще . подскажите , пожалуйста что такое Timer Capture и как им пользоваться smile.gif

Естесственно надо почитать, даташит на странице 96, также, AppNote AVR130 wink.gif

Вообще суть очень простая. Запускаете таймер, а для этого достаточно установить ненулевой прескаллер. После этого, если на ножке ICPn обнаруживается фронт (передний или задний - это можно настроить), то в регистр ICRn записывается текущее значение TCNTn, устаналивается флаг ICFn и (если разрешено) вызывается прерывание Timer Capture Inerrupt. Далее (в перывании или проверив флаг ICFn) регистр ICRn можно прочитать и точно узнать момент генерации фронта, для того, чтобы сверить его с ожидаемым.
Go to the top of the page
 
+Quote Post
EugeNNe
сообщение Nov 25 2008, 04:51
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 424
Регистрация: 6-03-06
Из: Н.Новгород
Пользователь №: 14 997



Цитата(_Надя @ Nov 24 2008, 19:37) *
Как Вы угадали smile.gif Для ж.д. это точно. И мне нужно что бы сигналы физически формировались на портах различных МК .


Решал ну очень похожую задачу.... Я делал так что МК работали в "кольце". Один мк вырабатывает импульс и подаёт его на целевое устройство, в то же время этот импульс служит синхросигналом для второго МК, который вырабатывает следующий импульс и этот импульс служит сигналом синхронизации для первого МК и целевым сигналом. Если один из МК умирает то генерация прекращается с обоих МК (думаю это то что Вам нужно.. если для ЖД делаете smile.gif ). В кратце так.... А реализация зависит от конкретного МК и параметров сигналов которые вам нужно получить... Используйте внешние прерывания, INT0 например или таймера.... Формируйте импульсы в обработчике прерывания.... Я так делал... формировались чётко синхронные импулься на портах разных МК
Go to the top of the page
 
+Quote Post
_Надя
сообщение Nov 25 2008, 13:54
Сообщение #14


Участник
*

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



Цитата(Aesthete Animus @ Nov 25 2008, 03:14) *
Можно конечно попытаться калибровать RC цепочку, но сомневаюсь, что даже так удастся добиться нужной Вам точности. Не пойму, что Вам мешает тактировать их от одного источника или же поставить обыкновенные кварцевые резанаторы?
Естесственно надо почитать, даташит на странице 96, также, AppNote AVR130 wink.gif

Вообще суть очень простая. Запускаете таймер, а для этого достаточно установить ненулевой прескаллер. После этого, если на ножке ICPn обнаруживается фронт (передний или задний - это можно настроить), то в регистр ICRn записывается текущее значение TCNTn, устаналивается флаг ICFn и (если разрешено) вызывается прерывание Timer Capture Inerrupt. Далее (в перывании или проверив флаг ICFn) регистр ICRn можно прочитать и точно узнать момент генерации фронта, для того, чтобы сверить его с ожидаемым.

Спасибо Вам огромное smile.gif
Естественно ничто не мешает мне их тактировать от одного источника, что я сегодня и проделала. Поставила один кварц на 12 МГц сразу на два МК. Значительно полегчало. Теперь рассогласования достигают 200-300 мкс.
Даташит , конечно, очень полезно читать, но увы, не знание английского здесь очень большой минус . поэтому читаю с промтом... не всегда удачно smile.gif
За описание сути работы с Timer Capture еще раз благодарю smile.gif

Цитата(BigBolt @ Nov 25 2008, 07:51) *
Решал ну очень похожую задачу.... Я делал так что МК работали в "кольце". Один мк вырабатывает импульс и подаёт его на целевое устройство, в то же время этот импульс служит синхросигналом для второго МК, который вырабатывает следующий импульс и этот импульс служит сигналом синхронизации для первого МК и целевым сигналом. Если один из МК умирает то генерация прекращается с обоих МК (думаю это то что Вам нужно.. если для ЖД делаете smile.gif ). В кратце так.... А реализация зависит от конкретного МК и параметров сигналов которые вам нужно получить... Используйте внешние прерывания, INT0 например или таймера.... Формируйте импульсы в обработчике прерывания.... Я так делал... формировались чётко синхронные импулься на портах разных МК

Интересный способ. Нужно будет подумать. Когда ставили изначально задачу формирования управляющих сигналов и контроля над работой АЦП да и вообще над МК , был примерно такой же вариант реализациии только с тремя мк. Тестовые генераторы задавали тестирующие импульсы, первый МК в это время формировал управляющие сигналы, второй в это время тестировался - результат тестирования сравнивался с третим МК. потом первый и второй мк менялись ролями. В общем как то так было . Потом начальник отказался от этой идеи и решил что сразу 2 мк будут одновременно формировать управляющие сигналы. А Вы тоже на ж.д. работаете?
Go to the top of the page
 
+Quote Post
muravei
сообщение Nov 25 2008, 15:33
Сообщение #15


Гуру
******

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



Цитата(_Надя @ Nov 25 2008, 16:54) *
Спасибо Вам огромное smile.gif
Поставила один кварц на 12 МГц сразу на два МК. Значительно полегчало.

Это действительно новое smile.gif в схемотехнике МК, может лучше попробовать один внешний генератор сразу на два МК?
Вдруг полегчает еще больше?
Или сделать один МК как обычно, а второй подключить к выходу кварц. генератора входом.
XTAL1 -вход
XTAL2-выход
И , кажись, надо запрограммировать CKOPT
Go to the top of the page
 
+Quote Post

3 страниц V   1 2 3 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 07:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.01502 секунд с 7
ELECTRONIX ©2004-2016