Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

RSLK от TI (Robotic System Learning Kit)

Вс мар 10, 2019 17:27:53

Всем здравствуйте. Приобрёл я этот "кит" и хочу поделиться своим опытом и попросить советов у других специалистов по некоторым вопросам.

Для начала, про этот набор можно почитать на сайте хозяев - Texas Instruments http://ti.com/rslk

Коротко, для тех кому лень лопатить сайт на ангельском языке, коротко расскажу: вы можете приобрести или базовый набор за 99$ (80€), или адванснутый набор за 199$ (160€). Ну или купив базовый набор, докупить апгрейд до адванснутого за 109$ (88€)
*(суммы без налогов).

Набор состоит из платы Launchpad MSP432P401R и механических компонентов предоставляемых фирмой Pololu, хорошо известной тем, кто увлекается робототехникой. Состоит из шасси Romi с двигателями и платой распределения питания (содержит импульсный стабилизатор 5в (или 3.3в) и два драйвера двигателей DRV8838), шесть концевых выключателей, линейку из 8 сенсоров QTR-8RC (в даташите ошибочно указано QTR-8A), 8 аккумуляторов NiMH типоразмера AA (316), комплект проводов, кусок маленькой беспаечной макетки, горсточку резисторов, конденсаторов и светодиодов (не надейтесь! горсточка будет когда все эти компоненты ссыпете вместе. Конкретно светодиодов там две штуки. причем разных) для выполнения лабораторных работ и необходимый крепеж: винтики, гаечки с не метрической резьбой, стоечки итд. - это я примерно перечислил что входит в базовый набор. А вот фотка для иллюстрации (это из инструкции по сборке адванснутого набора: (позиции J, P, Q уже из адванснутого набора)
Изображение
В адванснутый набор дополнительно входят энкодеры для двигателей(J), инфракрасные дальномеры с держателями (QP) и два "бустерпака":
SimpleLink Bluetooth® low energy CC2650 module BoosterPack™ plug-in module и SimpleLink Wi-Fi® CC3120 wireless network processor BoosterPack plug-in module.

Если я был упомянувши лабораторные работы, то для этого набора есть 20 уроков на сайте TI, которые ведет Джонатан Валвано. Они содержат лекции, состоящие из 1-2-3 видео и лабораторные работы, которые предстоит выполнить самостоятельно.

Кстати, ПРЕДУПРЕЖДЕНИЕ. Приобретя этот набор вы не сможете просто его собрав, получить робота, который побежит и займёт на соревнованиях первое место! Вы просто его соберете, но программное обеспечение вам предстоит написать полностью самостоятельно.

И над этим придётся попотеть. Так же вашу задачу не облегчит то, что некоторые моменты в лекциях упомянуты весьма поверхностно, Даташиты у TI написаны довольно тяжелым (для меня, по крайней мере) языком и содержат неточности и пробелы. Даже при сборке возникнут проблемы. Например, установка энкодера на двигатель, выполненная "по инструкции" приведёт к кривой конструкции. Собственно, даже в даташите это видно:
Изображение
т.е. нужно запаивать контакты сняв полностью пластмассовую обойму - тогда контакты попадут в гнёзда. Также, в инструкции контакты выхода сигналов с энкодера, предлагается выполнять прямыми контактами слегка изогнув "на 45 градусов" (они видны на приведённой картинке). Мне кажется, правильнее было бы их выполнить просто угловыми контактами - они там никому не мешают.

Следующая проблема с дистанцерами для крепежа отражательного сенсора QTR-8 - всё здорово, но с такого расстояния, которое будет между сенсором и поверхностью - он линию не увидит. Т.е. придется подбирать что поставить другое. По моим прикидкам надо бы дистанцер на 20мм. Тут еще надо сказать пару ласковых слов и о шасси Romi. Конечно его там наперфорировали отверстиями, типа на все случаи жизни. Правда, полного чертежа этих отверстий толком нет. И когда надо что-то закрепить, оказывается что ни одно отверстие для этого не годится. Так и с крепежом этой линейки сенсора - в инструкции указано в какие отверстия вставлять винтики. Но закрепив, оказывается, что сенсор стоит не совсем по центру, да и не очень то параллельно оси двигателей.

Теперь про ось двигателей... Когда я его собирал, у меня этот робот никак не хотел стоять на своих опорных трёх точках - два колеса и шарик сзади. Потом, до меня дошло, что я его собирал без батарей в батарейном отсеке. Когда я этот отсек заполнил (кстати, для его питания надо 6 батарей) - центр тяжести сместился и робот встал как надо. Но, при резком торможении, проекция сил выходит за этот треугольник и робот "клюёт носом". Всё бы ничего, но при этом сенсор QTR-8 ложится на поверхность пола и перестаёт получать отражённый сигнал. В результате чего выдаёт, что вокруг всё черное, давая ложные данные программе. Я своему роботу на скорую руку приделал спереди уголок с маленьким шариком, который не даёт слишком сильно "клевать". Но в планах, на 3D принтере напечатать раму, на которую будут крепиться сенсор линии QTR-8 и сенсор цвета (в этот комплект не входит, но нужно для участия в соревнованиях) и не позволять этому сенсору "ложиться".

Да, этот робот приобретался для участия в соревновании по проходу лабиринта из линий. Вот картинка из условий соревнований с примером трассы:
Изображение
Робот должен за макимально короткое время, следуя линии пройти от зеленого поля до красного. Но приехав на соревнования, трасса оказалась значительно короче. Вот сейчас зашел на сайт, там уже внесены изменения, что трасса может иметь и такой вид:
Изображение
Злые языки говорят, что два других участника в моей категории (свободная конструкция, любители)из-за этого сняли своих роботов с соревнований, в результате, мой робот оказался единственным и таким образом занял первое место (звучит гомерический хохот). Были, конечно, роботы в категории Лего, но они мне были не конкуренты.

Вот мой чемпион:
Изображение

Одно из отличий от оригинальной сборки состоит в том, что разъём на плате ланчпада я припаял не сверху, а снизу. Подумал, что пусть все провода будут спрятаны внутри. Но при сборке, выяснилось, что крепежные отверстия стоят так близко к разъёму, что пластиковые стойки идущие в комплекте вставить уже не возможно (напомнило проблему: почему у П2К крепежные отверстия 2.5мм, а прикручивают винтами М2). Но у меня оказался комплект из 4-х металлических стоек М3 длиной 42мм, которые очень хорошо подошли. Правда опять же, отверстий шасси, чтобы точно прикрутить этот ланчпад не оказалось, поэтому эти стойки стоят "с небольшим отклонением от нормали".

Еще одна проблема в этой конструкции - распределение питания. Схема выглядит примерно так. источник питания из 6 батарей по 1.2в в сумме даёт 7.2в идёт на плату и на драйвера двигателей. Там, как уже упоминал, стоит импульсный стабилизатор на 5в, которые используются для питания сенсоров дистанции, энкодера и идут на ланчпад. На ланчпаде эти 5в преобразуются в 3.3в и питают микроконтроллер, сенсор QTR-8, драйвер двигателя и еще чего-нибудь. Например, у меня OLED дисплей и сенсор цвета. При этом, при программировании и отладке, когда ланчпад подключен к USB (как в данном случае на фото) он питается от компа. И чтобы не перегрузить порт компьютера, на это время надо разрывать цепь между платой распределения питания и ланчпадом. Поначалу я так и делал, но потом, меня это задолбало, да и разъём от этого начал сильно изнашиваться и плохо контачить, поэтому я встроил маленький ключ на полевике, который не даёт току с ланчпада попасть на плату распределения и наоборот, открывается, когда на плате распределения нажата кнопка включающая систему от батарей. Выполнен просто навесным монтажом и засунут в термоусадку.

Еще у меня применен OLED дисплей 64х128. Есть одна лекция посвященная подключению к этому ланчпаду дисплея Nokia5110. Этот (эти) дисплеи ни в один в комплект не входят. Поэтому при их отсутствии соответствующую лекцию можно пропустить. Но у меня был (получил в награду за какую-то статью, здесь, на радиокоте), поэтому попробовал, но мне уже LCD стекляшки как-то не очень нравятся, поэтому по такому же принципу подключил OLED SPI дисплей.

Ну это было вступление.

Добавлено after 25 minutes 9 seconds:
В данный момент, я воюю с сенсором определения цвета. Собственно, с ним я занимался в последний день перед соревнованиями, когда я понял, что ничего не получается, плюнул и оставил так, чтобы хотя бы отличало красный цвет. В качестве датчика используется TCS3200 купленный у китайцев на e-bay. На работе попросил напечатать на листе бумаги два поля: красное и зелёное. Печатали на лазерном принтере. Так вот красное поле этот сенсор определяет - видно, что показания красного выделяются по сравнению с остальными, а вот на зеленом поле доминирование зеленого сигнала, что-то не наблюдается. И вот не могу сообразить в чем вина. В образце (вроде в принтере нет зелёного картриджа, а есть голубой и желтый) или в "белых" светодиодах подсветки.

Добавлено after 3 hours 32 minutes 11 seconds:
Еще помучал этот сенсор. В комнате стало темнее... и красная компонента "сдулась" так что теперь зелёная всё же выделяется над остальными. Правда не так явно, как в случае красного поля.
Изображение Изображение
Это отладочная информация на дисплее. Гистограммы слева на право: красный, зелёный, синий, прозрачный - прямые данные с сенсора, последние три красный, зелёный, синий пропорционально к прозрачному. Горизонтальная полоса - порог активации для красного цвета. Собственно, так как неизвестно из какого материала и насколько точным будет цвет на трассе, я оставляю для себя возможность подстроить определение цветов на месте. Поэтому в меню конфигурации есть три параметра: порог красного, зелёного и синего. Левая фото - зелёное поле, правая - на красном поле.

Думаю, что надо озаботиться тем, чтобы светодиоды равномернее освещали площадку под сенсором и устранить паразитную засветку сенсора от этих светодиодов. Правда, на этом модуле, светодиоды впаяны полностью в плату и их нельзя "подогнуть", чтобы светили в другое место. А у меня, почему-то в коробочке нет ни одного белого светодиода. Придется заказывать в китае и ждать месяц пока придут.

Но нужно решить еще одну проблему. Проблема распределения ресурсов. У данного микроконтроллера имеется 4 таймера типа A. Каждый из этих таймеров имеет 5 регистров захвата. Правда, нулевой регистр может еще выполнять функцию установки периода таймера. Так вот, по конструкции получилось так, что TIMER_A0 используется для генерации PWM двигателя. А TIMER_A3 используется для захвата сигналов с энкодеров двигателей. Потом я присвоил TIMER_A1 для работы с отражательным сенсором. Остался свободным TIMER_A2. Но с ним проблема. Для работы с TCS3200 надо измерять частоту на его выходе. А как измерить частоту? Подсчитать число импульсов за заданный промежуток времени. Ну вот я и считаю. А время отмеряю по прерываниям SysTick, которые происходят каждые 2 миллисекунды. Да вот проблема подать этот сигнал на вход CLK таймера. У TIMER_A2 он может соединиться с выводом P8.1. Но к моему величайшему сожалению сей вывод на плате ланчпада совсем не разведён. Зато я могу подключиться ко входу третьего таймера. Поменять местами? Смотрим, как можно соединить входы захвата второго таймера. Вроде всё нормально, кроме одного. Порт 6.7 - Он пока свободен. Но до тех пор пока я не захочу подключить BLE boosterpack. Этот модуль использует этот вывод как сброс.

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

Re: RSLK от TI (Robotic System Learning Kit)

Вс мар 17, 2019 13:49:23

Продолжается борьба с роботом. Оказывается, я не правильно помнил распределение портов. Отсутствие порта 8.1 не давало мне пересадить энкодер на второй таймер. А цветовой сенсор я не мог посадить на второй таймер из-за порта 4.2. Но, взглянув внимательнее, обнаружил, что этот порт был занят всего-лишь концевиком (bump sensor). Поизучав возможности, обнаружил, что я могу его пересадить на порт 4.4 и тем самым высвободить 4.2 под вход цветового сенсора. Чем я сейчас и занимаюсь. Бумперы уже пересадил, программу изменил и протестировал.

А сегодня проедусь по сенсорам отражения для детектирования линии (reflection sensor). Этот сенсор так же используется роботах участвующих в дисциплине следования по линии. Pololu выпускает два типа сенсоров с буквой A и RC. Внешне они выглядят почти одинаково, а отличаются только деталями, что напаяны на плате. Впрочем, лучше раз увидеть, чем сто раз прочитать:
Изображение Изображение
Левый (с буквой A) выдаёт уровень напряжения в зависимости от освещённости датчика. Чем темнее - тем выше напряжение. Т.е датчик находящийся над черной линией даст выше напряжение, чем датчик, находящийся над белым полем. Правый, предназначен для использования компаратора или триггера шмитта. И он уже работает по времени. В начале измерения на выход OUT подаётся напряжение питания и конденсатор разряжается. Затем этот вывод переключается на ввод и отслеживается, когда конденсатор зарядится, а напряжение на выводе OUT упадёт ниже некоторого порога. Понятно, что скорость заряда будет зависеть от тока проходящего через сенсор, который будет пропускать больше тока, если освещен (т.е. находится на белом поле) и меньше, если не освещен. При этом не нужно особенных ресурсов, просто после какого-то порогового интервала, надо прочитать порты и мы имеем информацию - черное или белое.

У меня сложилось мнение, что ардуинщики, больше используют второй тип сенсоров. Тем более, что Pololu предоставляет библиотеку, в которую даже входит функция автокалибровки.

Ну я не люблю полагаться на автокалибровку. Люблю видеть конкретные значения. Поэтому можно измерить этот интервал осциллографом, как предлагается в шестой лабе. Но таскать на соревнование еще и осциллограф, по-моему слишком. Поэтому захотелось сделать измерение прямо на борту. Заметил, что сенсор целиком занимает седьмой порт, а четыре старших вывода могут быть подключены к регистрам захвата первого таймера. Что я и сделал. Результат измерений выплёвывал в сериальный порт EUSCI_A0, который соединён с отладчиком и доступен как сериальный порт на компьютере. По результатам измерения получалось, что белое поле давало импульс порядка 100мкс (меньше двухсот, однозначно), а чёрное порядка 1200мкс. В лабе считывание предлагалось делать спустя 1000мкс. Задержка делалась обычным Clock_Delay1us(). Позже, в девятой лабе для этого был приспособлен SysTick. Но мне это решение тоже не очень понравилось. Поэтому я снова приспособил первый таймер. В CCR0 запрограммировал период опроса - 2.5мс (400 раз в секунду, как у Элм Чена), по прерыванию которого выполняются стартовые процедуры - разряд конденсаторов, а считывание по прерыванию CCR1, в котором задаётся через какое время после старта считать порт.

Всё было бы здорово. Собственно, в таком виде робот и участвовал в соревновании. Но после, мне подумалось, что этот сенсор не может возвращать мне линейное значение отклонения от линии. В идеале, график должен бы выглядеть так:
Изображение
Но на деле, там идут просто ступеньки. И, скажем нулевое значение я получу не только когда робот стоит точно по центру, но и при "небольших" отклонениях. Аж по 3-4 мм в каждую сторону. Поэтому робот следуя по линии немного виляет.

В роботе, где используется аналоговый сенсор, я помимо черный/белый в расчет еще беру и насколько черный. Т.е. если сенсор находится над границей - он уже частично освещен и уровень частично показывает насколько. Зависимость этого, конечно, не линейная и точно вычислить это невозможно, но немножко "сгладить"ступеньки на функции это позволяет. Так вот почему бы не получить такую же градацию и в этом случае? Однако, проблема в том, что я еще не видел микроконтроллера, у которого был бы таймер с 8 каналами захвата. С 4-мя есть. Но тогда надо два таймера синхронизировать. Вообще-то MSP432 позиционируется как микроконтроллер у которого число каналов захвата может достигать 8. Но в данном кристалле - четыре таймера и каждый по 5 каналов захвата (CCR0-CCR4). Сначала подумал, что можно 4 центральных сенсора так подключить, но для считывания остальных четырёх мне нужен CCR1 (или любой другой, кроме нулевого), который и задаёт время считывания. Поэтому пришлось урезать осетра и делать захват только по двум центральным - третьему и четвёртому сенсору.

Я уже писал, что входы захвата подключены к старшим битам седьмого порта - P7.4 - P7.7. Уже начинал подумывать как изменить подключение сенсора к порту, чтобы третий подключить к входу таймера и при этом не сильно усложнить упорядочивание битов в байте. Но тут я вспомнил про еще одну фичу этого микроконтроллера. Называется Port Mapping. Штука крутая позволяет любой вывод периферии назначить на любой вывод, любого порта. Ну почти. Правда вот в этом плане, в даташите на микроконтроллер больше всего неточностей и есть. Назначить можно только те ресурсы которые имеют приставку PM_. Просто когда разглядывал таблицу 4.2 Signal Descriptions в slas826g.pdf среди таймеров были упомянуты только TA2, TA3 и два сигнала TA1. А где же остальное? Оно было среди Port Mapper. Только тогда почему PM_TA1.1 был затесавшить среди таймеров? Ну да ладно. А еще, конечно, мы не в сказке и назначить можно эти сигналы на любой вывод порта, но только если это второй, третий или седьмой. В данном микроконтроллере на остальные это сделать не удастся. Наверняка у других кристаллов возможностей будет или по-больше, или по-меньше. Короче, оказалось, что P7.4 уже по умолчанию соединён с CCR4, осталось только CCR3 соединить с P7.3. Что при помощи port mapper и было сделано.

После этого я с этого сенсора получаю два комплекта данных - битовый, есть черное или нет, и массив состояний каждого сенсора. шесть боковых, конечно могут иметь значение только или 0, или 255, зато два центральных - полную шкалу от 0 до 255. И пропорция их отношений позволяет немного линеаризировать область около центра. Там, конечно есть ступенька. Так как в обоих сенсорах значение 255 стоит на небольшом участке в зависимости от ширины линии, угла под которым к линии стоит робот и расстояния сенсора до поверхности.

Оживлю повествование картинкой с дисплея:
Изображение
Справа налево: сенсор0 - 0, сенсор1 - 0, сенсор2 - 255, сенсор3 - где-то 120-130, сенсор4 ниже порога - 20, остальные - 0. Ну и вверху справа отклонение от центра - 11.4-11.5мм. Порог срабатывания установлен 300 мкс.

Re: RSLK от TI (Robotic System Learning Kit)

Сб мар 23, 2019 22:19:20

Наскучило мне получать при компиляции кучу советов:
Код:
(ULP 4.1) Detected uninitialized Port 1 in this project. Recommend initializing all unused ports to eliminate wasted current consumption on unused pins.
И так про каждый порт. Подумал, надо сделать им инициализацию. Сначала все сконфигурирую, чтобы не были висячими, а потом, каждый компонент сам сконфигурирует как ему надо. Кстати, у этого микроконтроллера почти все выходы можно сконфигурировать как VDSS - просто соединённый с массой. Думал, что конфигурация SEL0 и SEL1 во всех случаях будет одинакова, однако - нет. Часть пинов это делает при SEL1=1, SEL0=0, часть SEL1=1, SEL0 - безразлично, а часть при SEL1=1, SEL0=0 или SEL1=0, SEL0=1. Тем не менее, закономерность есть, что если установить SEL1=1, SEL0=0, то все пины соединятся с землёй.

Кстати, есть еще одна фича. Вообще-то порты не 8-ми разрядные, а 16-ти разрядные. И зовутся PA, PB, PC, PD, PE. Это если к ним обращаться как к 16-ти битным. Если обращаться к ним как к байту, то PA делится на P1 и P2, PB на P3 и P4 итд.

Ладно, написал эту инициализацию - никакого эффекта. Пробовал так, пробовал эдак. Ничего. Пошел в гугл. Нашел, что это глюк ULP адвизора и будет исправлен. Сообщению уже 3 года.

Ах да, кажется не упоминал, что в качестве среды разработки используется Code Composer Studio. Нечто на базе эклипса, говорят. Про эклипс читал нехорошие отзывы, но что поделать - ничего идеального нет. Думал, может на кейл перелезть, но не уверен насчет отладки/программирования.

Кстати этот же CCS мне принёс и несколько проблем. Робота я разрабатывал дома, на большом компе, но его не потащишь же с собой на соревнования. Попытался я его поставить на свой нетбук на атоме. В первый раз встал - но не работало соединение с отладчиком/программатором. А без программатора он мне сто лет не нужен. Удалил. При второй попытке его заклинило на инсталляции одно компонента. Даже нажатие на Cancel никакого эффекта не произвело - пишет, что сейчас прервусь, но никакого движения не происходило. Так и случилось, что на соревнования я покатил без возможности поправить код на месте. Потом, уже с третьей попытки, удалось поставить. Попутно снова пытался выгуглить свою проблему. Решения проблемы не нашел, зато узнал, что в 2019 году кончается поддержка 32-битных версий CCS.

Другая проблема с этим CCS для меня состоит в том, что он не даёт моему компьютеру спокойно спать. Я человек ленивый и мне лень каждый раз по включению запускать все те программы с которыми я я сейчас работаю. Раньше я вообще компьютер никогда не выключал, но теперь я экономлю электричество, так как счета за электроэнергию очень большие. Поэтому я делаю гибернацию компьютеру. Дак вот с какого-то момента начало происходить следующее - делаю гибернейт, всё сохраняется и выключается, я иду спать. А через минуту, слышу, компьютер снова включается. Долго думал, искал, кто мог так включать. Напоминало мне как включение через Wake-on-LAN (на предыдущей работе очень интенсивно эту фичу использовал). Однако, причиной оказался оставленный запущенным CCS. Тоже погуглил - на форуме TI тоже жаловались, обещали посмотреть. Сообщение датировано октябрём прошлого года. Кстати, на нетбуке гибернация выполняется без проблем вне зависимости запущен CCS или нет.

На неделе на ebay нашел один модуль, который хочу привинтить к роботу, но ему для обмена надо i2c. Поэтому, сейчас буду пробовать написать несложный драйверок. Попутно, пока читал понял зачем нужны EUSCI_A и EUSCI_B. Оказалось, что первый в основном предназначен для UART, второй - для i2c. Но оба имеют возможность работать как SPI.

Re: RSLK от TI (Robotic System Learning Kit)

Пт мар 29, 2019 21:18:24

Итак, я занялся рисованием i2c. Сначала решил написать функцию передачи. А для контроля навесил точно такой же OLED дисплей, только с i2c интерфейсом. Прочитал даташит. Вроде, ничего сложного. Загружаем адрес, выдаём старт, когда можно будет контроллер выставит флаг UCTXIFG0, по нему будем грузить байты для передачи, когда надоест передавать выдаём стоп. У этого контроллера есть возможность автостопа, как у stm32f0, загрузив в регистр сколько байт надо переслать, но так как загрузить туда можно только восьмиразрядное число (т.е. макс.255), а для обновления дисплея, мне нужно раза эдак в 4 больше, я этой фичей не пользовался. Вроде всё просто, но написав код, не скажу, что ничего не заработало, но заработало крайне нестабильно. Даже можно сказать скорее не работало, чем работало. Конечно, так как я этим занимался по часу в день сидя в электричке и без каких-либо измерительных приборов - только нетбук, платка и дисплейчик. Ну и два светодиода на плате.

Под отладчиком, вроде всё происходило как нужно, но дисплей зажигался не всегда. Хотя светодиод показывал, что передача происходила удачно. Собственно, я догадался, что гружу данные верно, а вот в линию уходит не совсем то, что нужно. Вот только жаль, что у меня нет логического анализатора. Но на днях, я дома подключил платку к осциллографу и попытался рассмотреть, что там передаётся. Я передавал 3 пакета данных. Первый - инициализация дисплея (первый байт 00 - команда и 25 байт инициализаци). Второй, установка "курсора" (опять, 00 - команда и 6 байт) и третий картинка, что отобразить (0x40 - данные и 1024 байта графического имиджа). И вот тут выяснилось, что в третьем пакете пропадал первый байт. Вот осциллограмма линии SDA (синяя). После старта передаётся адрес ведомого устройства 0x3C и нулевой бит - передача, затем должен бы следовать байт 0x40 и данные (первый байт данных я для наглядности сделал 0xAA). Так вот видно, что сразу после 3C следует AA. Ну тут я начал внимательнее выяснять, когда же можно подавать первый байт данных. По даташиту - при появлении флага UCTXIFG0. Но это флаг прерывания, а у меня уже есть опыт с TI поделиями, что флаг и прерывание - это не одно и то же. Поэтому написал другой вариант, где это прерывание взводит флаг (sendnext) и я опрашиваю уже его. И поэтому, вывел на светодиод, сигнал(желтая линия), который становится 0 при выполнении команды СТАРТ и возвращается в высокий уровень при "установке" флага UCTXIFG0. Левая осциллограмма без прерываний, по опросу, правая с прерываниями (и там видно, что пропавший байт 0x40 вернулся). И явно видно, что появление флага и прерывания происходят в разные моменты. И, возможно, левый происходит слишком рано.
Изображение Изображение
Под спойлером фрагменты программы для первого и второго случаев.


Второй вариант работал лучше, но тоже бывало, что при втыкании питания на дисплее картинка не появлялась. Особо разбираться не стал, а решил, сделать машину состояний и работу сделать полностью по прерываниям. Вот сегодня ехал с работы и накропал такой вариант. После исправления одной неточности, я еще сбоев не заметил. Попробую этот вариант довести до ума и реализовать также и приём по i2c.

Кстати, этот Power Advisor тоже ругается, если обнаруживает, что в цикле происходит опрос флага прерывания и настоятельно предлагает использовать именно прерывания.
#1528-D (ULP 3.1) Detected flag polling using UCTXIFG0. Recommend using an interrupt combined with enter LPMx and ISR

Re: RSLK от TI (Robotic System Learning Kit)

Сб апр 06, 2019 16:16:48

итак, результат по драйверу i2c. Всё очень здорово, но есть подводные камни. Меньше всего проблем было бы если я пользовался "автостопом" - фича посылающая СТОП по счетчику байт. Но счетчик байт всего восьмиразрядный и мне этого мало. Но мне захотелось полного комплекта удовольствий, поэтому я СТОП посылаю сам. При передаче проблем нет - на входе функции, я инициализирую глобальные переменные драйвера, выполняю старт, разрешаю прерывания и... сижу в пустом цикле в ожидании статуса, означающего конец передачи. Затем считываю код ошибки и его возвращаю.

Аналогично написал и приём. Ну не чисто приём, а передача - рестарт - приём. Очень удобная функция для работы с RTC ds3231, 24c02..08. Но есть и функции для чистого приёма тоже. Всё получилось бы прекрасно, но проблема была в случае, если надо принять всего один байт. Для передачи и приёма я использовал машину состояний:
Код:
typedef enum {
    send_reg_hi,
    send_reg_lo,
    send_data,

    rcv_reg_hi,
    rcv_reg_lo,
    rcv_restart,
    rcv_data,
    rcv_stop,

    i2c_stop,
    i2c_idle,
}
 i2c_state_t;

Изображение
Для передачи первое состояние было или send_reg_lo - если первый байт нужно было передать адрес регистра (полезно для oled дисплея, ds3231, 24c02 итд), или send_reg_hi - если адрес двухбайтный (24c32), или сразу send_data если просто посылаем массив. Во время send_data считаем сколько байт передаём, и после передачи последнего байта, при запросе следующего байта, вместо данных ставим бит EUSCI_Bx->CTLW0 UCTXSTP, чтобы после подтверждения последнего байта выполнился СТОП.

Изображение
Но при приёме, этот бит надо поднять еще во время приёма последнего байта, чтобы автомат знал, что надо по приёму передавать не ACK, а NAK и следом выполнить СТОП. Так вот в случае одного байта первое прерывание после СТАРТА или РЕСТАРТА произойдёт только ПОСЛЕ приёма первого байта. Поэтому я "НАК-нуть" могу второй байт, но никак не первый.

Долго думал. Вспомнил даже про "автостоп". Но проблема с "автостопом", что его нельзя включить "на ходу". Это бит можно ставить только тогда, когда модуль находится в состоянии сброса (установлен бит UCSWRST). Так что или он всегда включен, или всегда выключен. На помощь мне пришел флаг запуска START - UCTXSTT. Он автоматически снимается после передачи СТАРТА, адреса ведомого и получения подтверждения. Поэтому при приёме, если принимаемое число байт равно 1, после передачи СТАРТА или РЕСТАРТА машина состояний устанавливается в состояние rcv_stop и в этом случае в основном теле функции ожидается снятие бита UCTXSTT и по этому событию устанавливается бит UCTXSTP - для подготовки к передаче STOP.

Вот собственно, ядро драйвера:
А тут пара функций - передача и приём, которые я сейчас использую для проверки работы. Они коммуницируют в данный момент с RTC ds3231 и OLED дисплеем. Надо бы в эти функции еще добавить проверку корректности переданных данных. например, length не должен быть нулём!



Изображение
Вот сейчас у меня на дисплее отображается дамп памяти, куда считываются регистры ds3231.
Код:
    while(1) {
        if (i2c_rd_reg(0xD0, 0x00, time, 8) != I2C_SUCCESS) LaunchPad_Output(1<<0);
        else LaunchPad_Output(1<<2);
        print_dump(time);
        i2c_update_display();
    }
Массив time имеет размер 20 байт и проинициализирован 0xFF, а считываю 8 байт - это для контроля, что считывается сколько нужно и не лезет в чужую память.

Re: RSLK от TI (Robotic System Learning Kit)

Пт апр 19, 2019 10:59:22

Пока жду модуль, для которого делал i2c интерфейс, решил попробовать отпортировать проект в кейл. Собственно, цель уменьшить количество программных средств установленных на компе. Поддержка TI кристалла в Кейле делается на раз-два. Зашел в PackInstaller открыл список TI и жмякнул по нужному контроллеру. Осталось только дождаться конца операции. Ок, открываю новый проект, выбираю кристалл - всё совершенно без проблем. Осталось только выбрать программный/отладочный инструмент. Захожу во вкладку Debug, а в списке нет никакого TI XDS Debugger-а. Пошёл гуглить. Скачал и установил какую-то поддержку XDS (инструкция на сайте кейла). Ноль эффекта. Думал-думал, пока на глаза не попалась фраза, что эта поддержка (TI XDS) появилась с версии 5.20. Смотрю, что у меня - 5.17. Ага, надо обновиться. И тут началось.

Пошел в Кейле нажал на кнопку update - оно меня вывело на какую-то страницу, где требовалось много чего ввести. Но среди них - product serial number. Но какой-такой нумер, если я пользую Lite версию. Ну, понятно, что нужно просто зайти на сайт и скачать, а не делать апдейт. Но решил тут почитать... и начитал, что кейл оплачен ST для контроллеров версии STM32F0. А у меня тут первый робот был на STM32F051, а еще один на STM32F030. Радости моей не было предела - я же могу кейла пользовать совершенно легально для своих проектов и не давить на кнопу напоминающую "только 32 килобайта!". В общем, проапгрейдился до 5.27, поставил ключ для stm32F0, запускаю, делаю проект.... Но позвольте, а куда делись проинсталлированные кристаллы TI MSP432 и даже STM32f1 пропали. Ну, понятно, что причина в этом "бесплатном" stm32f0. Либо имеешь полный stm32f0 и ничего больше, либо имеешь все кристаллы с ограничением в 32к.

Ну хорошо, отинсталлируем этот ключ - обойдёмся без него. Очередная засада. При попытке отинсталлировать - сообщение об ошибке. Идём в гугл и читаем, всё то, что я только что написал, ну и лечение - в ини-файле ручками удалить или закомментировать сроку с ключом. Сделал. Вроде, всё вернулось на место. Теперь, надо бы проверить, как перенесли переезд мои другие проекты. Упс - перестали собираться. Один проект на stm32f103 плачет, что у меня два старта и не знает, который линковать. Проект на stm32f030, наоборот, жалуется, что не может найти стартовую точку. Пришлось помучаться, с Manage Run-Time Environment. Первый проект починил, а вот второй так поломал, что пришлось его делать заново. Это было не страшно, так как этот проект был копией от проекта который я вёл на нетбуке. Поэтому все эти действия по апгрейду провёл на нетбуке и постарался не сделать ошибок, что наделал в первый раз. Поэтому все проекты сохранились как надо с новой версией.

Теперь, когда восстановлен status quo, можно отпортировать в keil проект робота на msp432. Поперекопировал исходники с хедерами и попробовал их скомпилировать. Скомпилировалось практически всё. Попутно всплыла плюха. В main.h две переменные не были прописаны как extern. Это значит, что там где это инклюдилось, создавались две новые переменные. Странно, что CCS никаких предупреждений на этот счет не выдавал. А вот кейл, сразу сказал, что есть проблема с линковкой. Даже и не знаю в какой момент это потерялось, и как оно работало. Но ко всеобщей радости бага найдена и устранена. Теперь осталось разобраться, что делать с тремя файлами, которые не хотят компилиться. С одним файлом UART0.c разобрался просто. Там было две имплементации вывода на отладочный терминал. UART0 на плате ланчпада подключен к отладчику XDS, а XDS создаёт CDC порт, через который в комп может вести обмен с микроконтроллером. И различалась работа с файловыми устройствами. Т.е. для отладки можно открыть устройство STDERR и весь вывод пойдёт туда. Наверное. Ну и я нашел, что кусок, который вызывал ошибку (#include "file.h") находится под надписью "//-----CCS implementation", а ниже есть закомментированый кусок с надписью "// Keil uVision Code". Поменял закомментированые фрагменты местами и всё скомпилировась. Работает оно или нет - не проверял, так я не пользуюсь функциями типа printf.

Два других файла не компилировались... нет, один не компилировался, а второй выдавал просто предупреждение - из-за ассемблерных вставок. Предупреждение было в Clock.c в функции delay:
Код:
// delay function
// which delays about 6*ulCount cycles
// ulCount=8000 => 1ms = (8000 loops)*(6 cycles/loop)*(20.83 ns/cycle)
  //Code Composer Studio Code
void delay(unsigned long ulCount){
  __asm (  "pdloop:  subs    r0, #1\n"
      "    bne    pdloop\n");
}
Ругань была на r0, что негоже применять имя регистра. Наверное, так оно и есть, что все компиляторы, первый аргумент для передачи в подпрограмму размещают в r0. Keil же говорит, что надо просто применять имя переменной и тогда даже с оптимизацией не будет проблем. Хм. Вспомнилась молодость, как чей-то код сделанный в Борланде, не мог скомпилировать майкрософтовским компилятором, потому как не совпадали методы передачи агрументов в подпрограмму. Борланд делал, через одни регистры, а МС С - через другие. И пришлось повозиться, чтобы переделать. В общем, написал так - и всё работает:
Код:
void delay(unsigned long ulCount){
  __asm (  "pdloop:  subs    ulCount, #1\n"
      "    bne    pdloop\n");
}


А вот тот кто не компилировался, это была функция EnableInterrupts() из CortexM4.c:
Код:
//*********** EnableInterrupts ***************
// emable interrupts
// inputs:  none
// outputs: none
void EnableInterrupts(void){
  __asm  ("    CPSIE  I\n"
          "    BX     LR\n");
Компилятор, сказал, что в инлайновом ассемблере команду CPSIE применять запрещено. Думал-думал и выкинул весь этот файл. Потому как глобальным разрешением прерываний, кажется, занимается startup и толку от неё нет никакого.

Проект, вроде собрался и в том состоянии, что был - работает. Попробую дальше проект робота вести в Кейле, а в CCS делать лабы. Я еще не закончил делать лабу с инфракрасными измерителями расстояний и еще меня ждёт тахометр (очень хочу его приделать к роботу, иначе есть проблемы!) и модуль с BLE.

Re: RSLK от TI (Robotic System Learning Kit)

Вс апр 21, 2019 20:05:54

С интересом читаю Ваши сообщения в этой ветке. С Keil у меня те-же мытарства. На каждом семинаре ST они требуют установку версии Keil без ограчичений на объём кода для МК семинара и даже дают ключ для этого. Однако, все другие модели МК становятся невидимыми. Старая версия софта переносится в папку Backup Кайла, но даже оттуда работает с глюками. Я после каждого такого семинара просто заново инсталлирую Keil с нуля. Это далеко не единственная претензия к нему, как и у всех. К счастью, на последнем семинаре NXP познакомился наконец с грамотным человеком, обещавшим решить мои проблемы с их МК. Посмотрим... Между тем перешёл на Eclipse версии IDE для специальных семейств (MCUXpresso и Simplicity Studio). С Keil работать было удобнее и более оперативно, но может это дело привычки. Уже стал привыкать и к силлабовской Simplisity Studio с целью ввести секцию по Micrium RTOS в свой курс по операционным системам (надоело каждый год просить Keil продлить лицензию полной версии для универа; они дают 100 плавающих лицензий бесплатно). В минимальном футпринте система занимает гораздо меньше 32К, можно и бесплатную версию использовать. Однако, недавно случился жуткий облом - силлабовские отладочные платы с EFM32 пару недель назад возросли в цене с 30$ до 100$. Мы требует от студентов покупки плат для курсов, и если 30$ их особо не напрягает, то 100$ уже другой разговор. Может силлабы дадут нам скидку близкую к первоначальной цене или просто подарят несколько плат для лаба, пока в процессе переговоров. Если нет, пожалуй вернусь назад к платам Кинетис за 40$ и MCUXpresso или перейду на ST. Нет счатья на свете...

Почему Вы решили преобрести имено этот Кит с MSP432? Это требование организаторов соревнований? Я всё жду когда у TI появятся версии этого семейства с меньшим числом выводов. В настоящее время минимальный корпус с 64 выводами мне очень неудобен и является главной причиной для их неиспользования. На каждой тусовке с ТИ они обещают выпустить версии 432 в меньших корпусах, следуя запросам клиентов, но так продолжается уже года 4. Кстати, J. Valvano такого-же мнения. Когда мы с ним предъявляли свои претензии к ТИ, он вообще ратовал за 8-ногие корпуса, но не уверен, что это было серьёзно. Интересный дядька, он признан как основной продвигатель продукции МК ТИ в академию. Известен также своей серией книг-учебников по МК - сначала про Stellaris, теперь про 432. Я купил его последнюю книгу (уровень 3 в его классификации), надеясь прочитать детали про Ti-RTOS, но полностью разочаровался, т.к. изложение в ней очень поверхностное и добрая часть книги повторяет азы, описанные в его книгах уровней 1 и 2. Сдал в библиотеку. Короче - надеюсь, ТИ внемлет просьбам трудящихся и выпустит меньшие модели 432 - тогда Ваш здешний блог может быть мне очень полезен. Пожалуйста продолжайте по мере сил и времени. Кстати, если мне требуются ассемблерные функции в проектах на С, я всегда помещаю их в отдельный .s файл вместо использования inline assembly.

Re: RSLK от TI (Robotic System Learning Kit)

Вс апр 21, 2019 22:02:59

О, спасибо за отзыв. А то я думал, что совсем впустую тут строчу... Слишком уж увлёкся своими ламерскими проблемами.
Да я тут смотрю, что не у одного меня проблемы с Кейлом - вот прямо сейчас люди не знают как бороться со следующим апгрейдом. Собственно, тяжело привыкнуть к большому зоопарку. В MPLAB свои хоткеи и нюансы, у CCS другие, у Keil - третьи, IAR, PSoC... итд. Кейл нравится, что поддерживает много процессоров, но только АРМ. CCS поддерживает всю TI продукцию: 430/432. Конечно, хотелось бы чего-то одного и бесплатного. Ну или не очень дорого платного, но так чтобы раз заплатил и всё, а не каждый месяц/год.

С Keil'ом у меня вчера случилось продолжение истории. Компиляцию настроил - сборка проходит нормально. Но вот, на днях, одному роботу на STM32F030 забыл выключить питание, по причине отсутствия какой-либо индикации - только положение переключателя. LiPo батарейка сдохла. Хотя я полагал, что у них есть платка недопускающая перезаряд и переразряд. Батарея из двух элементов - 7,4в. Пытался оживить зарядником - ни в какую! Тогда зарядник подключил через балансировочный разъём сначала к одному элементу, затем ко второму и попытался оживить их по-отдельности. Один элемент поднялся, а вот второй - сдох. Совсем заряд не держит. Разобрал я эту батарею - буду хотя бы один элемент использовать. И каково было моё удивление - платы защиты там нет! у 1S 450mAh - есть, а у 2S 520mAh - нет. Так вот в результате, решил припаять какой светодиод, индицирующий, что питание подано. Да вот когда примерял светодиод коротнул его ножкой контакт +питания на массу. Батарея была отключена. Но заряд оставшийся в конденсаторе на плате драйвера двигателя эти 8в дал в обратной полярности на плату с процессором. Так что процессор улетел. Ну чо, не впервой! Выпаял кристалл, запаял новый-свежий. Осталось только запрограммировать. Вытаскиваю ST-LINK запускаю Keil, давлю F8 и... сообщение об ошибке. Полез изучать "options for target". Где-то в трёх местах были слетевши установки. Кстати до сих пор при открытии проекта выдаёт "Warning #440: Requested device 'STM32F030K6' is substituted with variant 'STM32F030K6Tx' for target 'standalone'", хотя в этих опциях и так уже стоит STM32F030K6Tx. Уж и не знаю, где еще что поправить. Только что еще залезть грязными ручками в *.uvprojx файл? Но зато запрограммировал и робот как новенький.

Кейл мне сейчас интересен тем, что хочу сделать второго робота на тех же исходниках, но для платки на stm32f051-discovery. И чтобы только меняя таргет сразу собирался нужный вариант. Низкоуровневые функции будут, конечно, у каждого разные, а высокий уровень - один на оба. Собственно, этот проект для 030, развился из платы дискавери, путем просто смена таргета.

Ser60 писал(а):Почему Вы решили преобрести имено этот Кит с MSP432?
Собственно, только из-за лекций. Поначалу, показалось, что посмотрю, подсмотрю и мне откроется нечто сокровенное. Вообще, сначала я этот кит не брал, а за дюжину евро купил просто платку ланчпада - так что у меня их сейчас две - одна на роботе, а на второй я тренируюсь. В соревнованиях требований на конструкцию никаких нет. Есть ограничение на массу, габариты, автономность. Ну, тем, кто выступает в категории Лего - там да, есть требование, что можно использовать только компоненты от Лего (и без клея!). А в свободной конструкции - полный простор. Поначалу смотрел, что почти все конструкции содержали ардуиновские платки - мини, нано. Но вот смотрю, например в той команде от которой я выступаю, протолкнули Cypress PSoC и уже мини-сумо роботов делают на нём. Я, конечно, скривился, сказал, что у 4-го PSoC маловато как-то периферии. На что мне ответили, что они делают на пятом. Я сказал, что они же в корпусах не для "наколенного" монтажа. А они показывают плату с припаянным QFN48. Ну что ж, может и я буду вынужден перейти на такие, когда перестанут удовлетворять имеющиеся.

С другой стороны, я тут коллеге рекламирую новые микроконтроллеры, но он упорно сидит на микрочиповских с тормознутым МПЛАБом. А я тут подумал, что мне привлекательнее кристаллы для которых есть дешевые платки на попробовать типа ланчпада, дискавери, пионера и с бесплатными средствами разработки. Иначе, как по другому можно завоевать рынок? Только, если уже есть толстый покупатель, который обязательно купит.

Сокровенное пока не открылось. Лабы с мотором меня вообще вогнали в ступор. Написать толпу функций: ехать вперед, назад, поворачивать итд. Когда достаточно одной функции - скорость моторов с двумя аргументами - для правого и левого. Причем знак указывает куда крутить - вперед или назад. И такую функцию гораздо удобнее использовать, чем делать толпу свитчей выбирающих нужную. А функция стоп вообще убила:
Код:
// ----------
// Stop the motors, power down the drivers, and
// set the PWM speed control to 0% duty cycle.
// Input: none
// Output: none
void Motor_Stop(void){
  // write this as part of Lab 13
    TIMER_A0->CCR[3] = 0;
    TIMER_A0->CCR[4] = 0;
//    SLEEP_PORT->OUT &= ~((1u << LEFT)|(1u << RIGHT));
}
Вот чего-чего а делать "power down the drivers" вообще не стоит, иначе у робота будет большой выбег. Вот с этим выбегом, я и собираюсь бороться, как только займусь таходатчиками. Потому как при большой скорости, робот может выбежать так, что не сможет найти правый или левый поворот. Зато в результате этих лаб я в очередной раз воочию убедился, насколько различается торможение, когда строчка закомментирована и откомментирована.

И не надо было на плате дистрибуции перерезать перемычку соединяющую входы sleep обоих драйверов двигателей. Один контакт порта бы сэкономил. Всё равно их по отдельности усыплять нет смысла...

По поводу ассемблерных вставок - я их не вставляю. Это та часть кода, что под авторством Valvano. Ну и тут я тоже не знаю, как относиться к его стилю программирования. С одной стороны он в лекциях обсасывает дружественная-не дружественная реализация, абстрактная-не абстрактная, а вот то что в коде кидается "магическими числами", когда есть же в хидерах определения. И это было бы гораздо нагляднее. Хотя, с другой стороны студентам, может как раз и надо показать, что там под низом находится. Помнится, мне однокурсник, как-то жаловался, что в MPLABe он какой-то именованный бит от одного регистра присвоил другому регистру и возмущался, что компилятор не выдал на это никакого предупреждения и он потратил много времени пока нашел у себя эту ошибку. Даже собирался микрочипу тикет открыть. Пришлось ему объяснять, что с точки зрения компилятора там ничего криминального не было и это чисто ошибка программиста.

С другой стороны, ассемблер там остался только в функции задержки. А задержка у меня используется только в одном месте, где она использоваться не должна. Это задержка на 10мкс для разряда конденсаторов сенсора линии. Но так как это происходит в прерывании - ей там не место. и я потихоньку думаю, как лучше тот кусок оформить.

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

Re: RSLK от TI (Robotic System Learning Kit)

Пн апр 22, 2019 07:54:35

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

Насчёт PSOC5, минимальный известный мне корпус у них содержит 68 выводов. Тоже слишком много, и много из них под питание предназначено. То-ли дело в этом отношении новые модели ST семейства STM32G0 - всего 2 вывода под питание. Тем более, что в Q3/2019 планируется их выпуск в корпусах с 24 выводами. Большое преимущество для изготавливаемых на дому плат для несложных студенческих конструкций.

Удачи на соревнованиях!

Re: RSLK от TI (Robotic System Learning Kit)

Пн апр 22, 2019 08:35:57

Драйвер, родной, тексасовский - DRV8838. Вот тут как раз и фишка, что снятие nSLEEP выключает все ключи моста, а снятие ENABLE (куда подключен PWM) открывает оба нижних ключа обеспечивая force stop. PHASE, разумеется, выбирает направление вращения.

Re: RSLK от TI (Robotic System Learning Kit)

Вт апр 23, 2019 01:10:40

Ну да, видимо, так и есть. Последний раз имел дело с подобным драйвером (DRV8833) два года назад. Принцип топможения помню, а детали какие сигналы куда - нет. Я сам никогда в подобных соревнованиях не участвовал, но присутствовал на паре таких мероприятий, устраиваемых NXP (а до них Freescale). Там у них тоже Кит машинки имеется с камерой для движения по широкой полосе на полу и реакции на светофоры.
https://community.nxp.com/docs/DOC-1095
И в рамках проекта есть тоже какие-то видео-уроки.
https://community.nxp.com/docs/DOC-1081

Re: RSLK от TI (Robotic System Learning Kit)

Ср апр 24, 2019 05:48:07

Интересная штучка. Жаль, что ссылки на видео уроки уже "устаревшие" и ведут на главную страницу NXP. Попытался найти этот кит - тоже уже нигде нету. Максимум, на ebay китайцы продают похожие модули с ПЗС за 25$. Причем, отдельно ПЗС у них имеет такую же цену, хотя mouser.com продаёт его за 8€. Но без оптики его брать нет смысла. Сейчас уже начал думать, как эту ПЗС лучше согласовать с контроллером... заинтриговало.

Добавлено after 1 hour 3 minutes 52 seconds:
Пока топал на станцию, поразмышлял на тему подключения ПЗС. Пока в голове выстраивается картинка как его подключить к stm32f0. Возможно, из-за того что я его знаю чуть получше, чем MSP432. В тексасовском поделии, я пока не разобрался как работать с ПДП. Несколько непривычно, что конфигурацию ПДП надо создавать в памяти, а не в регистрах контроллера. Потом, сигнал запроса ПДП отдельный отсутствует - пользуйтесь запросом прерывания. Так что я даже не применил его для заливки картинки в OLED дисплей через SPI, не говоря о том, чтобы данные с АЦП сливать в память. Хотя, у TI в этом нет необходимости. В роботе на stm32f030 бегущем по линии у меня 8 фотодатчиков считывает АЦП и через ПДП сливает в память, в MSP432 у АЦП уже внутри есть память на несколько дюжин отсчетов - т.е. в ПДП нет необходимости. А вот для 128 отсчетов там памяти не хватит. И пока нет идей как стробы можно было бы синхронизировать с запуском АЦП (в stm32 - есть).

Re: RSLK от TI (Robotic System Learning Kit)

Ср апр 24, 2019 18:44:24

Насколько я помню, Freescale (до поглощения NXP) предлагала какой-то софт для разработки алгоритмов под эту камеру. Сейчас я не знаю, продолжает-ли NXP эту программу с машинкой, но могу спросить, если интересно. Про ПДП в MSP432 не знаю ничего, но работал ранее с PDP в MSP430. Сейчас, правда, многое забыл, т.к. давно не имел с ними дел.

Re: RSLK от TI (Robotic System Learning Kit)

Чт июн 27, 2019 05:58:42

Есть вопрос. Для 19-й лабы с BLE требуется андроид на котором установлен BLE Scanner. Всё бы ничего, но эта аппликация хочет денег.А у меня андроид не привязан ни к каким платёжным системам. Есть ли какая бесплатная альтернатива способная выполнить аналогичную задачу?

Re: RSLK от TI (Robotic System Learning Kit)

Чт июн 27, 2019 16:43:33

Бесплатных BLE сканеров навалом. Странно, что этот платный - Вы в этом уверены?
Посмотрите, например, на CySmart app для Андроида. Он точно бесплатный, и с его помощь,ю можно читать и писать характеристики. Если есть Кипарисовские BLE донглы, под них иммется одноимённое приложение под Windows , моё любимое.

Добавлено after 8 hours 50 minutes 7 seconds:
Посмотрел сегодня с утра на этот апп (LightBlue Explorer) от ТИ. Приложение бесплатное, имеется весия для Андроида и iOS.

Re: RSLK от TI (Robotic System Learning Kit)

Чт июн 27, 2019 18:33:37

Спасибо за наводку. Буду пробовать.

BLE Scaner в требовании к доступу затребовал доступ к деньгам (в описании упоминалось 1,89$ per device) и еще доступ к моему местоположению и еще к камере. Ну зачем? У меня уже паранойя начинает разыгрываться.

LightBlue Explorer было написано, что он под эппл, потому и не смотрел. Но глянул - Your device isn't compatible with this version.

Re: RSLK от TI (Robotic System Learning Kit)

Чт июн 27, 2019 19:14:46

Я на доступ к деньгам никогда не соглашаюсь ( у меня такое даже и не упоминается (?!)), а на доступ к местоположению - не вижу проблемы для апп от именитых фирм. Никогда с этим проблем не было. Телефон должен поддерживать Bluetooth версию от 4.0 и выше. Последняя версия 5.х. Какой у Вас смартфон или какую версию он поддерживает? У меня все работает под Samsung Galaxy 8.

Re: RSLK от TI (Robotic System Learning Kit)

Чт июн 27, 2019 20:23:24

У меня нет смартфона. Пользуюсь планшетом. Какой-то Dell Venue - надписи совсем стёрлись. Наверное, это было ошибкой брать планшет на интелевском процессоре.

Re: RSLK от TI (Robotic System Learning Kit)

Чт июн 27, 2019 20:45:16

Дело не в процессоре. Важно какую версию BT он поддерживает. Старые планшеты поддерживают только Bletooth Classic до версии 3, а Вам нужно Bluetooth Low Energy, т.е. версию 4.0 или старше. У. Сlassic помимо протокола еще другое железо в плане радио. Можно купить BT донгл для компа, хотите - могу посоветовать.

Re: RSLK от TI (Robotic System Learning Kit)

Пт июн 28, 2019 03:30:03

Спасибо, но "донгл" у меня есть. Cypress'овский. Достался вместе с минипрогом и мышкой. ;-), когда купил RDK CY5682 (который я покупал ради минипрога). Правда, он не очень компактный. Хм, а эта мышка у меня с этим планшетом спаривается - Может, это значит, что планшет имеет уже новый BT? Ну, буду потихоньку разбираться.

На чемпионате получил переходящий кубок за первое место в LineFollower. Хотя, мой робот стабильно тащился в самом конце, но за сезон, ему удалось набрать больше всех очков. Теперь, придётся бороться за то, чтобы кубок удержать. А уже есть те, кто мне топчется по пяткам. По последним соревнованиям, придумал пару трюков, как с оптимизировать проход по трассе - где разгоняться, где тормозить используя различные ориентиры. Поэтому в меню настройки уже сделано более 20 параметров! И чтобы облегчить робота (сделать его маневреннее), конфигурационный дисплей сделал съёмным. Вот теперь, рассматриваю вариант управления через планшет, как у других.

В заключении чемпионата нас обрадовали. Я'т думал, что до нового сезона у меня будет полгода отдохнуть и полениться. Но сказали, что первый этап следующего чемпионата будет уже в сентябре. Поэтому многие проекты отложил - занимаюсь роботами. Попутно, озадачился сделать для себя измеритель времени прохода робота по трассе. Думал, какой дисплей использовать - взял ЖКИ стекляшку, а для управления платку от CY8CKIT-049 на пятом PSoC. Получилось неплохо. Всё измерение происходит аппаратно. Программно только отображение. Вот только проблема с датчиком. С лазером мне возиться не хотелось, за неимением оного. Но на соревнованиях подсмотрел, что используют Шарповские инфракрасные дальномеры типа GP2Y0A41SK0F. Правда, когда они начали фиксировать время с точностью до миллисекунды, меня начали грызть сомнения в достоверности этих измерений. Увы, работа с метрологами накладывает свой отпечаток. В даташите не нашел сколько времени происходит "измерение" расстояния у этих датчиков, есть только диаграмма с момента включения, и вот там фигурирует время 16.5мс. Так что когда они во всеуслышание заявили что, на соревнованиях случился курьёз - у двух роботов время совпало с точностью до "третьего знака", я подумал, что это точно курьёз - так неправильно интерпретировать результаты измерений.

Вот на этом же PSoC, думаю попробовать подключить ПЗС матрицу TSL1401. Хочу сделать не победителя, но просто нестандартного робота.
Ответить