roboforum.ru

Технический форум по робототехнике.

Драйвер двух двигателей управляемый по I2C, UART

Re: Драйвер двух двигателей управляемый по I2C, UART

dccharacter » 21 мар 2011, 22:18

Duhas писал(а):совет один - написать нормально обработчики прерываний или работу с флагами.. смотря как там у вас.. чтобы все успевало сработать...

Вот именно ЮСАРТ я хочу сделать без прерываний (если это возможно конечно), потому что i2c и UART одновременно на прерываниях будут КМК дюже сильно отжигать. В общем-то i2c в моем исполнении уже жгет ого-го как....

Для того, чтобы убедиться, что виноват не ком-порт и не библиотека qextserial, цапанул контроллер через роутер. Таки да, строка его вводит в ступор. Пойду ловить....

Re: Драйвер двух двигателей управляемый по I2C, UART

dccharacter » 22 мар 2011, 03:33

Что-то какая-то мистика. Из консоли все работает ОК. Из ОРФА-терминала чуть-чуть поработает и залипает - перестает реагировать на команды. Делаю дисконнект - освобождаю порт. И подключаюсь путти. В путти тишина. Но как только ввожу первую команду, путти как бы пропушивает все предыдущие "залипшие" команды:

s1Aps4s
s4F
s4B
s4>
s4<
s4;
s4:
s4;
s4<
s4>
s4@
s4A
s4C
s4E
s4F
s4G
Es4
s4I
s5K
s5Q
s5K
s5Q
s5K
s5Q
s5K
s5Q
s5K

Что за фигня? Откуда они берутся? Не пойму, то ли они где-то в буффере сидят на компе, то ли моя прошивка пропускает символы окончания строки, т.е. "Pp\r\n\0" и шьет все в одну строку, а когда я с консоли "медленно" ввожу по символу, оно конец строки таки ловит и парсит всю строку на команды?

Re: Драйвер двух двигателей управляемый по I2C, UART

Michael_K » 22 мар 2011, 03:38

Ну вы код бы что-ли показали... ;)

Re: Драйвер двух двигателей управляемый по I2C, UART

dccharacter » 22 мар 2011, 11:01

Подобрал портянки
Последний раз редактировалось dccharacter 24 мар 2011, 00:18, всего редактировалось 1 раз.

Re: Драйвер двух двигателей управляемый по I2C, UART

Michael_K » 22 мар 2011, 13:01

Клево. Теперь надо закомментировать половину и посмотреть, исчезнет ли глюк. Потом еще половину и т.д. :)

Re: Драйвер двух двигателей управляемый по I2C, UART

dccharacter » 22 мар 2011, 13:04

Michael_K писал(а):Клево. Теперь надо закомментировать половину и посмотреть, исчезнет ли глюк. Потом еще половину и т.д. :)

Ага, вчера весь вечер занимался :-)))

Re: Драйвер двух двигателей управляемый по I2C, UART

Vooon » 24 мар 2011, 00:15

Не выкладывай такие портянки в пост! Аттач!

Re: Драйвер двух двигателей управляемый по I2C, UART

dccharacter » 24 мар 2011, 00:19

Проблема решилась введением кольцевого буфера. UART работает супер.

Re: Драйвер двух двигателей управляемый по I2C, UART

dccharacter » 03 апр 2011, 02:05

О сколько нам открытий чудных готовит просвещенья путь!

У меня в контрол регистре есть адрес - 0х00, как и в любом массиве. А также, например, вращение двигателя изменяется - в одну сторону чтобы крутилось присылаем НЕ ноль, а в другую - ноль.

Стоп! Присылаем 0? Ага. щаз! Оказывается, что 0х00 и '\0' - одно и то же (кто бы могу подумать?!?!?! Ну уж точно не человек, прочитавший хоть раз proavr.narod.ru). Ну а я сижу, упорно пихаю в UART в середине пакета команд нуль-терминатор и удивляюсь - ЧЕ Ж ОНО НЕ РУЛИТСЯ-то???

Спас сниффер ком-порта. Без него я бы еще неделю башкой об клаву бился.

Re: Драйвер двух двигателей управляемый по I2C, UART

Michael_K » 03 апр 2011, 03:25

Уарту-то какая разница, причем тут уарт вообще?
Уарт ноль передаст без проблем, если попросят.
Проблемы в вашем/библиотечном коде, который его
не просит почему-то (наверное строку с терминатором ждет на входе).

Re: Драйвер двух двигателей управляемый по I2C, UART

dccharacter » 03 апр 2011, 03:45

Логично.
Дело на самом деле в этом:

QString MainWindow::doCmd(QString cmd) <-- раз
port->write(cmd.toAscii(),cmd.length()); <-- два

Добавлено спустя 4 минуты 35 секунд:
А заодно разобрался с помощью товарищей с microchip.su как забубенить реверс на CCP (без хардварного инверта полярности - кому интересно - вот тема: http://www.microchip.su/showthread.php?t=11618) - четверть дела сделана.

Re: Драйвер двух двигателей управляемый по I2C, UART

dccharacter » 01 май 2011, 18:07

Сделал вторую версию регуля. Распаял, все замечательно завелось (ну как все - пока проверил ICSP, UART, оба движка и управление)

Из косяков - забыл, что электролит 50В на 100 мкФ занимает чуть больше места (раз этак в восемь), чем 10В 100 мкФ. В итоге на плату влез только 200мкФ кондер. Мужики засмеют...

Ну и еще, кажись, ступил, повесив у одного энкодера оба выхода на прерывания по изменению, а у второго - ни одного. В остальном - живем! Аппаратный реверс, все дела...

Вся эта красотень пойдет в связке с роутером wl500gP и допиленным орфа-терминалом бродить по дому.


Rambler\'s Top100 Mail.ru counter