Простой поисковый радио маячок.
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, гулять так гулять.