|
Как синхронизировать два мк мега 16? |
|
|
|
 |
Ответов
|
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, 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, 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, 16:18
|
Участник

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

|
Цитата(muravei @ Nov 25 2008, 18:33)  Это действительно новое  в схемотехнике МК, может лучше попробовать один внешний генератор сразу на два МК? Вдруг полегчает еще больше? Или сделать один МК как обычно, а второй подключить к выходу кварц. генератора входом. XTAL1 -вход XTAL2-выход И , кажись, надо запрограммировать CKOPT тактового генератора не было к сожалению.... А чем плох в таком использовании кварц? А СКОРТ точно нужно программировать? Я читала что вроде как не надо этого делать , если использовать внешний источник тактового сигнала.
|
|
|
|
Сообщений в этой теме
_Надя Как синхронизировать два мк мега 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     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 Aesthete Animus Цитата(_Надя @ Nov 26 2008, 21:36) подска... Nov 27 2008, 00:33 _Надя Цитата(Aesthete Animus @ Nov 27 2008, 03... Nov 27 2008, 19:03  BigBolt Цитата(_Надя @ Nov 27 2008, 22:03) Может ... Nov 28 2008, 05:12  XVR Цитата(_Надя @ Nov 27 2008, 22:03) по тай... Nov 28 2008, 08:43 _Надя Сегодня попробовала сделать так с Timer Capture:... Nov 28 2008, 18:40
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|