Duhas писал(а):совет один - написать нормально обработчики прерываний или работу с флагами.. смотря как там у вас.. чтобы все успевало сработать...
Вот именно ЮСАРТ я хочу сделать без прерываний (если это возможно конечно), потому что i2c и UART одновременно на прерываниях будут КМК дюже сильно отжигать. В общем-то i2c в моем исполнении уже жгет ого-го как....
Для того, чтобы убедиться, что виноват не ком-порт и не библиотека qextserial, цапанул контроллер через роутер. Таки да, строка его вводит в ступор. Пойду ловить....
Что-то какая-то мистика. Из консоли все работает ОК. Из ОРФА-терминала чуть-чуть поработает и залипает - перестает реагировать на команды. Делаю дисконнект - освобождаю порт. И подключаюсь путти. В путти тишина. Но как только ввожу первую команду, путти как бы пропушивает все предыдущие "залипшие" команды:
Что за фигня? Откуда они берутся? Не пойму, то ли они где-то в буффере сидят на компе, то ли моя прошивка пропускает символы окончания строки, т.е. "Pp\r\n\0" и шьет все в одну строку, а когда я с консоли "медленно" ввожу по символу, оно конец строки таки ловит и парсит всю строку на команды?
О сколько нам открытий чудных готовит просвещенья путь!
У меня в контрол регистре есть адрес - 0х00, как и в любом массиве. А также, например, вращение двигателя изменяется - в одну сторону чтобы крутилось присылаем НЕ ноль, а в другую - ноль.
Стоп! Присылаем 0? Ага. щаз! Оказывается, что 0х00 и '\0' - одно и то же (кто бы могу подумать?!?!?! Ну уж точно не человек, прочитавший хоть раз proavr.narod.ru). Ну а я сижу, упорно пихаю в UART в середине пакета команд нуль-терминатор и удивляюсь - ЧЕ Ж ОНО НЕ РУЛИТСЯ-то???
Спас сниффер ком-порта. Без него я бы еще неделю башкой об клаву бился.
Уарту-то какая разница, причем тут уарт вообще? Уарт ноль передаст без проблем, если попросят. Проблемы в вашем/библиотечном коде, который его не просит почему-то (наверное строку с терминатором ждет на входе).
QString MainWindow::doCmd(QString cmd) <-- раз port->write(cmd.toAscii(),cmd.length()); <-- два
Добавлено спустя 4 минуты 35 секунд: А заодно разобрался с помощью товарищей с microchip.su как забубенить реверс на CCP (без хардварного инверта полярности - кому интересно - вот тема: http://www.microchip.su/showthread.php?t=11618) - четверть дела сделана.
Сделал вторую версию регуля. Распаял, все замечательно завелось (ну как все - пока проверил ICSP, UART, оба движка и управление)
Из косяков - забыл, что электролит 50В на 100 мкФ занимает чуть больше места (раз этак в восемь), чем 10В 100 мкФ. В итоге на плату влез только 200мкФ кондер. Мужики засмеют...
Ну и еще, кажись, ступил, повесив у одного энкодера оба выхода на прерывания по изменению, а у второго - ни одного. В остальном - живем! Аппаратный реверс, все дела...
Вся эта красотень пойдет в связке с роутером wl500gP и допиленным орфа-терминалом бродить по дому.