Простой поисковый радио маячок.
Работает у меня в диапазоне от -2 до -5 опроса от исходного кода. Питание GPS можно ведь повесить на вывод Reset?
Выводы тини13 не равносильны по току, ресет у нее при работе в качестве выхода самый слабый, а как дальше извращаться с исходниками вам виднее. Как по мне там добавить в приемнике компас хардварный(сейчас там север определяется по GPS) и ЖКИ поновее и будет неплохо, вся эта штука прототип, пилить и пилить еще ее.
Почитаю про компасы. А с ЖКИ предпочтительнее LCD12864 или что-то еще есть на примете?
про гирокомпасы тонны видео, но там есть чего кодить, а с LCD12864 один из похожих и доступных на нокиашный, альтернатива цветные LED но там без STM32 делать нечего.
Может для начала, режимы М/А сместить вниз на место статуса, а на этом месте разместить азимут? Да, цветной экран скорее излишество.
Добрый день. Подскажи пожалуйста, зачем после приема CAD в маячке если канал свободен, делаем еще 10 запросов? Или я неправильно понял - там где комментарий “;выждем освобождение канала”. И в первом ответе отправляем только RSSI? Тогда почему длину пакета в FIFO пишем ldi R17,12 не понял, что значит комментарий “;значение с приемника”?
При пробуджении маячек сразу не может выдать координаты GPS потому что модулю нужно время на разогрев, но чтобы знать что все нормально передается уровень силы сигнала который принял маячек, по этому уровню уже можно грубо судить о расстоянии, и так же понятно что все работает, затем как GPS будет готов маячек передаст координаты но на границе дальности бывают ситуации когда пакет не принимается без ошибок, и чтобы этого избежать маячек пакет передает повторно через пару секунд и так пять раз подряд, при этом если между передачами придет активность с приемника то это будет означать еще +5 передач координат, это используется для непрерывного режима, там приемник после каждого пакета отвечает в духе “слать еще”, на практике в лесу такая схема связи дала хорошие результаты. Если же сразу делать ответы без ожидания то на больших расстояниях бывают ситуации когда приемник еще не окончил передачу а маячек этого не понял, и они друг друга не поймут.
Там если канал занят (есть бит CadDetected), сбрасываем счетчик, а если свободен, проверяем еще 10 раз - это просто задержка? И RSSI же 1 байт, тогда почему длину пакета в FIFO пишем ldi R17,12?
Проверка 10 раз это задержка с учетом что в помехах на границе приема может быть пробел в приеме, и пару приемов отсутствия сигнала еще не означает что передача не происходит. А вот 12 байт в фифо соответствуют настройкам сигнала пробуждения с пульта, дело в том что пакет в 12 байт с текущими настройками это одна секунда, удобно для формирования 10 секундного отсчета пробуждения со сна, но принятое содержимое не используется, просто конфиг приема, он ждет освобождение канала для своей передачи что проснулся.
Постепенно прибывают заказанные из Китая посылки, среди прочего STM32F103C8, на который пал выбор как апгрейд системы и уход от мною любимой меги8, а все ради пока отдаленной и призрачной надежды двигаться вперед и таки освоить современные типы ЖКИ, которые любимая мною мега8 может не потянуть. Мне нравился асм, но прогресс и все такое, пришлось осваивать всегда пугавший С#. Беглый гуглопоиск и кучка видео помогли определится со средой - CubeID, бесплатный и не скованный ограничениями, со всякими визуальными плюшками и современный, впрочем не обошлось без ложечки невкусностей, китайские чипы позиционируются как клоны и самые новые версии ПО отказываются с ними дружить, но все это легко решается, ничего критичного. К облегчению С# не так сильно отличается от старых школьных бейсика с делфи, пара дней и джентельменский набор освоен, попутно быстро привыкаешь к мощностям камня, с асм код вылизывался и делался чуть ли не ювелирным, когда для SMT32 подключить математическую библиотеку и жмякнуть тангенс угла это каких-то 4кб ПЗУ, представить только, на меге8 это половина всего камня, гигантский кусок кода, когда для стм’ки всего мелкий сдвиг шкалы на 6%, конские ресурсы и возможности создают ленивый код совсем без экономии, а работает всеравно быстрее, балуют такие камни, очень балуют.
В планах теста осваиваю модуль компаса, точнее магнитометра HMC5883L, и как оказалось цифрокомпас далеко не простое устройство, получить заветное направление севера со стабилизацией в пространстве та еще задачка, на деле чип компаса сходит с ума при не горизонтальном расположении, при отклонении от горизонта на 5° углы сваливаются до 20°, в придачу такой модуль требует акселерометр, чтобы знать поправку на горизонт, а тому для жизни требуется гироскоп(оба девайса известны как MPU-6050). Прохожу стадию граблей и ужаса, и это по своему интересно, давно так не развлекался 😔
Павел, а меня удивляет выбор C#, а не просто C. Можно и написать на асм е, никто не держит. ))) Большую часть кода 4К, пожалуй съела функция printf вывода на консоль. Само вычисление тангенса меньше. Изучайте файл файл map, там много интересного о распределении памяти. Закажите stm32L МК. Почти такой же как Ваш, но с плюшками пониженного потребления. Скачайте IDE SeggerEmbeddedStudio for ARM. Очень интересная среда, поддержка разных МК. Нужно подгружать доп пакеты по нужным МК.
Решеточку поставил просто чтоб выделить букву, а какой именно там Си понятия не имею, для меня это не так важно, а важно что могу с ним управится и постепенно въезжаю в синтаксис, хотя мелкие вещи после АСМ все же напрягают, например отрицательные числа и переполнения, типы данных, лечится но на все это нужно время. Рrintf никогда не использовал, и что с ним делать на МК то, где нет консоли? Код все же пишется под то что есть у чипа, на картинке это ЖКИ 1602, ну с него проще начинать, попутно помогает что все наброски беру со старого доброго ассемблера, ненужно библиотеки подтягивать, что очень здорово. Студию пока перекачивать смысла не вижу, эта справляется, жаль только как у АВР нету отладчика виртуального, чтобы код гонять без МК, например интересно было сколько тактов тот же тангенс считается, а оказалось чтобы узнать сие нужно гонять специально счетчик внутри МК. Так же понравилось что у STM32 можно обращатся к регистрам напрямую, как у АВР, но карта регистров сложнее, не всегда это удобно, глаза разбегаются.
Консоль делается просто - подключаете через UART TTL-USB адаптер и выводите нужную информацию.
В STM32 небольшие куски кода можно запускать а RAM, без перезапись флеша.
В среде разработки Keil симулятор имеется. Даже позволяет получать на встроенную виртуальную консоль то что в UART выдаете
Keil ставил, дизайн красивее чем у куба, но платный и ограниченный, и все равно нужно использовать кубовский модуль для создания шаблона-заготовки, проще сразу взять куб и быть на нем. В проектах привык делать отладку средствами самого устройства, на его ЖКИ. Сейчас главная задача это собрать компас чтобы не брать север от модуля GPS, на практике спутниковая навигация дает север только когда двигаться в одном направлении, что не удобно, и медленная она, около пяти секунд тупит.
Пока похвастать нечем, кроме копирования того функционала, что уже есть. Сначала взял модули EBYTE E32-400MBL. С ними засада в том, что stm8l не поддерживаются GCC, да еще и залоченными приходят. Пришлось поставить SDCC и под виндой разблокировать через STM8ProgrammerTools. С компасом и акселерометром 16kb мне похоже не хватит (еще оказалось, что в 5110 пиксели не квадратные - круг так просто не нарисовать), но в качестве маяка даже с printf для отладки - вполне. Взял затем EBYTE E77-400, но wle5cc в platformio нет, да и с CubeIDE как-то всё не просто. В общем пока летаю на AVR:)
Да у 5110 пиксели чутка вытянутые, когда делал круг то брал фотошоп, и распечатку пикселей матрицы, там рисовал окружность и затем подгонял под симметрию, но смотрится оно нормально, ЖКИ же мелкий. Жаль только эти 5110 ЖКИ б/у’шные все, а новые идут под 128х64, очень хочется ч/б с разрешением 160х120 на 2", только сейчас проще цветной TFT найти чем монохромник.
Изучаю модули компаса, поигрался с НМС5883, нестабильны и много брака, и с гироакселерометром MPU-6050, пока что склоняюсь к LSM303DLHC(GY511). Основные грабли что магнитометры сильно сходят с ума при не идеально горизонтальном положении, компенсируется это обычно через акселерометр что дает поправку для расчета тригонометрии, но не покидает идея набрать сферу показаний магнитометра и делать выборку из нее не используя акселерометр и тригонометрию, в случае АСМ это было бы очень эффективно для кода, хотя на Си пять килобайт туда-сюда, ни о чем.
Пытался эллипс загнать, код получался тяжелый. Экраны тоже смотрел, квадратные - маленькие и дорогие, а побольше - только с соотношением 1:2. С НМС5883 намучался, непойми что выдает. А набрать сферу - его ведь всё равно калибровать придется (там же синусоиды со смещениями по уровню)?
Круг на ЖКИ рисуется отлично попиксельно без математики, указчик так же рисуется картинкой, на Си математика самое прожорливое что есть. Мои НМС5883 были какие-то бракованные, один вообще не завелся, а второй работал лишь в двух осях, зависая рандомно спустя несколько минут. Приехал LSM303(GY511), напоминает бутер, даже адреса компаса и акселерометра разные, но работает пока без зависаний и глюков.
Раньше компасы делать не приходилось, изучая тему в мануалах обычно приводят арктангенс X/Y компаса и поправку на акселерометр, где достают четверть круга и длину ребра треугольника наклона с углом от горизонта, получается математика вида арктангенс компаса умножить на поправку акселерометра. И все бы здорово но нужно до математики калибровать показания компаса и акселерометра, чтобы ноль был центром и оборот оси был кругом. Только в голове не уходит мысль что показания акселерометра по всех осях от минимума до максимума это куб состоящий из кучки значений мелких кубиков, и если записать таблицу значений этого пространственного куба в виде градусов, типа X/Y/Z такие-то это угол такой-то, то больше вроде ничего и не надо делать. Не надо считать арктангенс и косинус с ребром треугольника акселерометра и сам акселерометр ненужен, но надо как-то заполнить эти самые значения таблицы с константами углов, и так чтобы это не было куча строк кода. Но это лишь идея и что получится дальше неясно.
Остановился на модуле LSM303DLHC, это сборка состоящая из дешевого магнитометра и акселерометра в одном чипе, регистры магнетометра идентичны НМС5883. Очень помог мануал “LSM303DLH compass app note”, и пример из гитхаба, на деле все оказалось не так сложно, по началу боялся шумности акселерометра без модуля гироскопа, но на деле там все нормально, получились показания компаса что не сильно уплывают, 7…20° при наклонах, что приемлемо.
Не обошлось без неудобств, как не старался а уговорить CubeIDE считать отрицательные двухбайтовые числа углов (int16_t) не получилось, кругом хочет видеть лишь нативные 32’битные int, а вот модуль компаса и мануалы на ардуинку под двухбайтовую математику, в результате пришлось разбивать круг на четвертя и считать математику в первой четверти(0…90°), после чего приводить к виду круга (0…360°). Библиотека математики atan2; cos; sin достаточно прожорлива, если заменить на выборку из массива 360° записей можно сэкономить кучу места, на меге8 так и поступал, но у нас же STM32, гулять так гулять.
Помогите разобраться с модулем Lora: напишите поимер кода ( что нужно загрузить в передатчик и приемник чтобы передать несколько байт) , вы тут пишите как AlgorithmBuilder,- в этой среде было бы идеально
непонятно в каком режиме работает SPI : 1. начальный уроветь на SCK, 2. данные отправляются с младшего или старшего бита, 3. CS -выбор чипа отправка по сколько байт?, 4. как подробно заполняется буфер FIFO ?
О какой прошивке идет речь?
пост 1425, не получается управлять модулями Lora SX1276. может кто объяснит на примере что нужно загрузить в SX1276 чтобы он передал в эфир несколько байт. только язык СИ я не понимаю, а програмирую в AlgorithmBuilder
пост 1425 чистый AVR ассемблер - AlgorithmBuilder причем тут Си. По передаче spi, почитать даташит по модулю lora религия не позволяет? Пример программной реализации SPI есть в первом посте в том числе и на ассемблере. Нефиг лезть к аппаратной реализации SPI если не понимаешь как это работает, там дофига нюансов.
PS: СИ нужно знать, хотя бы на уровне Ардуино!