Технический форум по робототехнике.
к561ЛА7 » 29 мар 2011, 23:49
Джентльмены!
в бесконечном цикле "слейва" пишем
- Код: Выделить всё • Развернуть
putchar('R'); // шлем как взадаче 6
gdvix = getchar();
if (getchar() == 'G'){
open0 = 100; // присваиваем число переменной open0
};
В бесконечном цикле "мастера" пишем
- Код: Выделить всё • Развернуть
gdvix = getchar();
if (getchar() == 'R'){
putchar('G'); //
};
тоесть слейв шлет R мастеру а мастер как только получил R шлет слейву G
и так по этой задумке они воде бы должны друг другу слать эти символы
со скоростью 250000 бод
начальный код настроил кодвизардом
(правда еще оба сваливаются на обработку небольшого внешнего прерывания 100 раз в секунду)
Будет ли эта схема работать? У меня почему-то она не идет
Последний раз редактировалось
к561ЛА7 30 мар 2011, 00:23, всего редактировалось 1 раз.
Сергей » 30 мар 2011, 00:15
Поправь сообщение - добавить тег code, сделай текст читабельным и сформулируй нормально вопрос, ибо уже в который раз создаешь тему не изучив то, с чем работаешь.
к561ЛА7 » 30 мар 2011, 00:34
Человека, "изучившего темы", видно не по тому, как он их создает, а по тому, как он в них отвечает.
Raskolin » 30 мар 2011, 04:50
Судя по коду slave отправляет master символ R. Мастер принемает и записывает в переменную gdvix. И после они оба чего то ждут. Но никто друг другу ничего не отправляет. Если нужен именно такой расклад, то надо убрать строчки gdvix = getchar(); и включать сначала мастер, а потом слэйв.
Radist » 30 мар 2011, 05:34
Зачем мудрить? Слэйвы должны работать по запросу мастера. Запрос должен содержать адрес слэйва и контрольную сумму.
boez » 30 мар 2011, 12:25
Теоретически должна, но после первой ошибки передачи они оба заткнутся на getchar и будут друг друга ждать. Мастеру нужен некий таймаут, если слейв не ответил - то повторить посылку символа. То есть вместо getchar надо что-то неблокирующее использовать. Я обычно работу с уартом пишу сам, на прерываниях, так что по stdio на avr не подскажу как правильно сделать.
к561ЛА7 » 30 мар 2011, 15:05
задумка - то реализовать удаленное фазовое регулирование мощности
от мастера слейву. Но слейв "синхронизирован" по переходу фаза-ноль, которое может не совпадать с переходом через ноль у мастера. Поэтому слейв , вродебы, должен , по получении прерывания от перехода фаза-ноль послать запрос мастеру, а тот, получив запрос, тут же оправить ему необходимые числа, итак 100 раз всекунду
попробывал свтавитьь этот код в обработчик прерывания - не идет
Duhas » 31 мар 2011, 01:29
а никак нельзя мастером спамить стабильно значение фазы, а слейвом уже отрабатывать... и чорт с ним если оно вдруг на 1 период рассогласуется ?
Radist » 31 мар 2011, 06:10
Есть оптосимисторы с "zero-cross". Их включаешь/выключаешь когда хочешь, а срабатывают они при переходе через ноль. Используйте их и будет вам счастье. Навскидку MOC3082. Сам он маломощный, но к нему можно поставить внешний мощный симистор.
к561ЛА7 » 31 мар 2011, 13:32
мастером нельзя, фазы могут быть разные. И зеро кросс тоже нельзя, регулирование фазовое.
Radist » 31 мар 2011, 13:36
А что за объект управления? Кто является конечной нагрузкой? Этой нагрузке подавай все полупериоды, хоть и обгрызенные, но не дай бог пропустить один?
к561ЛА7 » 31 мар 2011, 13:42
А, понял ... навероно можно. только пока не вьехал как