MultiWii
Ну то что код подшаманить можно это понятно, а это был ответ на
так задействуйте… в конфиге есть все для этого
хех… кто тебе такое сказал? 😛
я уже делал подобное, жертвуеш ненужной сейчас ногой, небольшая добавка кода - и вуаля все 4 аукса
кстати тут же если сделать одну мааааленькую правку - уже получаем работающий аукс 3
Благодарю. Сейчас попробую реализовать… Отпишусь как получится. Ведь явно не хватает двух ауксов…
PS Блин, как же тяжело без отладки что-либо делать ((
Итак, если кому надо,
добавляем каналы AUX2, AUX3, AUX4 в прошивку MultiWii 2.3, Плата Crius multiwii se
- Раскомментить в config.h (строка 388)
#define RCAUXPIN8
#define RCAUXPIN12
так как иначе эти пины настроятся будут работать не на вход, а на выход на всякие там BUZZERы и т.д.
- В RX.cpp разрешаем прерывания от нужных нам пинов
/************* atmega328P's Specific Aux2 Pin Setup *********************/
#if defined(PROMINI)
#if defined(RCAUXPIN)
PCICR |= (1 << 0) ; // PCINT activated also for PINS [D8-D13] on port B
#if defined(RCAUXPIN8)
PCMSK0 = (1 << 0); PCMSK0 |= (1 << 3); PCMSK0 |= (1 << 4);
#endif
#if defined(RCAUXPIN12)
#endif
#endif
#endif
- В RX.cpp настраиваем обработку прерываний от этих же пинов и формируем значения в ауксах от приёмника
/********************* atmega328P's Aux2 Pins *************************/
#if defined(PROMINI)
#if defined(RCAUXPIN)
/* this ISR is a simplification of the previous one for PROMINI on port D
it's simplier because we know the interruption deals only with one PIN:
bit 0 of PORT B, ie Arduino PIN 8
or bit 4 of PORTB, ie Arduino PIN 12
=> no need to check which PIN has changed */
ISR(PCINT0_vect) {
uint8_t pin;
uint16_t cTime,dTime;
static uint16_t edgeTime;
static uint16_t edgeTimeAux[4]; // 0 не используется, 1 для aux2, 2 для aux3, 3 - резерв
static uint8_t auxIntLast; // сохранённое состояние битов порта B после предыдущего прерывания
uint8_t auxMask; // маска для определения изменённого входа порта B
pin = PINB;
auxMask = pin ^ auxIntLast; // doing a ^ between the current interruption and the last one indicates wich pin changed
cTime = micros();
sei();
auxIntLast = pin; // we memorize the current state of all PINs [B0-B7]
if (auxMask & 1<<0) { // если меняется бит 0 порта B (выход D08 на плате), то формируем aux2
if (!(pin & 1<<0)) { //indicates if the bit 4 of the arduino port [B0-B7] is not at a high state (so that we match here only descending PPM pulse)
dTime = cTime-edgeTimeAux[1]; if (900<dTime && dTime<2200) rcValue[0] = dTime; // just a verification: the value must be in the range [1000;2000] + some margin
} else edgeTimeAux[1] = cTime; // if the bit 2 is at a high state (ascending PPM pulse), we memorize the time
}
if (auxMask & 1<<4) { // если меняется бит 4 порта B (выход D12 на плате), то формируем aux3
if (!(pin & 1<<4)) { //indicates if the bit 4 of the arduino port [B0-B7] is not at a high state (so that we match here only descending PPM pulse)
dTime = cTime-edgeTimeAux[2]; if (900<dTime && dTime<2200) rcValue[1] = dTime; // just a verification: the value must be in the range [1000;2000] + some margin
} else edgeTimeAux[2] = cTime; // if the bit 2 is at a high state (ascending PPM pulse), we memorize the time
}
if (auxMask & 1<<3) { // если меняется бит 3 порта B (выход D11 на плате), то формируем aux4
if (!(pin & 1<<3)) { //indicates if the bit 4 of the arduino port [B0-B7] is not at a high state (so that we match here only descending PPM pulse)
dTime = cTime-edgeTimeAux[2]; if (900<dTime && dTime<2200) rcValue[3] = dTime; // just a verification: the value must be in the range [1000;2000] + some margin
} else edgeTimeAux[2] = cTime; // if the bit 2 is at a high state (ascending PPM pulse), we memorize the time
}
}
#endif
#endif
Работает замечательно. Единственное, если выдернуть из платы провода всех ауксов, то вновь добавленные принимают хаотичные значения (то есть все, кроме aux1). Видать, где-то надо добавить дефолтное значение, если сигнала на пин не поступает. Где это делается - искать уже оочень в лом.
Вот итоги 3-х часового мучения и поиска багов в собственном коде… Подскажите, кто как отлаживает код? …перепрошивать девайс по 10 раз для того, чтобы фиг знает как угадать, что не ту переменную подставил это анреал мучения ))
Народ, попробовал в Криус 2.0 SE залить base 2.1 от Маховика . Все работает кроме бародатчика. Чего не так могу делать ?
Или она изначально со старыми платами нефунциклирует ?
PS При этом обычная 2.2 работает…
Народ, попробовал в Криус 2.0 SE залить base 2.1 от Маховика
А вы прочтите пару последних абзацов и все станет понятно 😃)
Или она изначально со старыми платами нефунциклирует ?
Гриш, Саша ваял свою прошивку под All in One, а там иной баро, нежели в SE.
И спецыяльно отмечено, что с иными вариациями MultiWii прошивка может работать криво, например.
Хотя - работает ))
Если охота поиметь все плюшки, то надлежит брать AOIP.
Понятно. Так и думал. Пасиб.
для старого баро есть файлик ИМУ с пометкой бмп085, но такого резултата как с мс5611 недобьетесь, будет в пределах метра-полутора бултыхаться
там разница и в коде, и в пидах
ну и оба варианта на мпу6050 рассчитаны соответственно
Собрал лёгкий квадрик на AIOP, залил туда MultiWii 2.3. Включил Horizont, а Baro вынес на переключатель пульта. Пробовал поднять квадрик с выключенным Baro - никакого намёка на стабилизацию высоты, резкие подъёмы и падения. Что, собственно логично.
Включить Baro? Мне не нужны ни удержание высоты “как в mahowii”, не нужен Naza-стиль полёта (газ в роли управления высотой, а не газом собственно), нужно как в старой MultiWii 2.1 - использование барометра для плавности высоты. Это уже нереально с новыми прошивками?
Завтра попробую на улице запустить жука, в комнате страшно включать Baro. Помню давныыым-давно, когда только-только mahowii отделялся от mw, включение этого удержания уносило мой коптер высокооооо в небо 😃, возможно из-за недогрузки - давно было.
Поянисните, пожалуйста, как используется барометр в официальном MultiWii 2.2 (я так понимаю, по 2.3 пока мало информации, так как он вышел несколько дней назад)?
Смотрю changelog между 2.2 и 2.3, по барометру нашёл только одно изменение - калибровка на земле с учётом температуры.
Мощность висения не точно 50%, помню это тоже имело значение… На назе в последнее время летал 😃, но решил мелкий квадрик на мультике собрать.
по идее баро нужно включать в полете, т.к. при его включении запоминается положение стика газа и это положение и является точкой удержания высоты. лично делаю так и в штиль у меня на 2.2 у меня высота скачит где то на сантиметров 20 - не больше
по идее баро нужно включать в полете, т.к. при его включении запоминается положение стика газа и это положение и является точкой удержания высоты. лично делаю так и в штиль у меня на 2.2 у меня высота скачит где то на сантиметров 20 - не больше
Понятно.
Поднял сегодня во дворе, переключил в баро. Скачет жутко. Но у меня мотор один разбит и паралоном не закрывал барометр ещё. Идея ясна, буду доделывать. Спасибо.
Здраствуйте, поставил NanoWii на GAUI 330. Пытаюсь подсоединить по SBUS приёмник futaba r7008sb. Пока никакие танцы с бубном не помогают. Ставили другой приёмник, тоже futaba, но предыдущую модель на такую же конфигурацию все получилось с первой попытки. На зарубежных форумах пишут что вроде на этом приёмнике futaba изменила протокол SBUS. Может у кого получилось соединить их?
Коллеги, написал тут небольшую прогу для прощета магнитного склонения для мультивия. Прошу потестить под себя, ну и критика также приветствуется. digiua.com/multiwii-mag-declination-calc/ Коменты можете оставлять, прямо там на сайте или здесь.
За проведенный труд 5ка. Но в самом коментарии к дефайну есть эта супер сложная формула на 3 математических действия.
Convert the degree+minutes into decimal degree by ==> degree+minutes*(1/60)
Note the sign on declination it could be negative or positive (WEST or EAST)
Быстрее посчитать чем скачивать и запускать посторонний экзешник с подозрительно толстым размером 0.5мб
Сама прога весит 12кб, все остальное иконка )) В маховии я етой формулы не заметил.
сегодня обкатывал прошивку 2.3 на плате MULTIWII microWII c GPS по I2C .( влезла в при тык ) 5 минут полет был достаточно стабильный - висел на баро хорошо, удержание и возврат домой отрабатывал на ура . Потом на высоте 8 метров резкий останов движков всех сразу и результат - воткнулся в землю. электронику спасла банка пластиковая сама в вдребезги а контроллер целый. Очень спасает уже не первое падение и всегда электроника целая. Склоняюсь к тому что завис контроллер. У меня по шине I2C самодельная плата на модуль GPS стоит - I2C GPS NAV . возможно из-за неё.
Сама прога весит 12кб, все остальное иконка )) В маховии я етой формулы не заметил.
Все там есть… это мультивийное… смотрите около дефайна магнитного склонения
Всетам есть… это мультивийное… смотрите около дефайна магнитного склонения
Get your magnetic decliniation from here : magnetic-declination.com
Convert the degree+minutes into decimal degree by ==> degree+minutes*(1/60)
Note the sign on declination it could be negative or positive (WEST or EAST) */
Но оно не обясняет как конвертнуть градусы в минути.
Да и вообще, это школьная программа за седьмой клас😁
Не сильно вникая в текст написаного, я понял что нужно градуси додать к минутам, а потом умножить на результат 1/60
Да и вообще, это школьная программа за седьмой клас
Не сильно вникая в текст написаного, я понял что нужно градуси додать к минутам, а потом умножить на результат 1/60
Вот именно что школьная программа 😉 Умножение и деление имеют приоритет перед сложением/вычитанием.
Джентльмены, которые пытаются мучиться с версией 2.3 - если хотите запустить i2c_gps с малтивием - поправьте сначала багу в коде www.multiwii.com/forum/viewtopic.php?f=8&t=4246&p=…
Какого … автор полез в тот кусок кода, который прекрасно работал в предыдущей версии? 😃
Джентльмены, которые пытаются мучиться с версией 2.3 - если хотите запустить i2c_gps с малтивием - поправьте сначала багу в коде www.multiwii.com/forum/viewtopic.php?f=8&t=4246&p=…
Какого … автор полез в тот кусок кода, который прекрасно работал в предыдущей версии? 😃
спасибо за подсказку. три ошибки которые выскакивали при инсталляции после правки исчезли. осталось проверить в полете.
Вопрос по калибровке акселей и гироскопов перед каждым вылетом: иногда в поле параллельной земле поверхности нет. А что будет если калибрануть их, а коптер не идеально параллельно земле будет? Он так “криво” и летать будет? Я думаю что его будет “тянуть” вбок.
Или по уровню площадку выставлять? Или лучше откалибровать на заведомо параллельной плоскости (допустим дома), а перед вылетом не калиброваться?
Вроде он и на кривой поверхности нормально инициализируется. Думается мне что это не калибровка…что-то другое. ИМХО. Еще не разу не включал на идеально ровном месте. Все вроде ровно летает…
Или лучше откалибровать на заведомо параллельной плоскости (допустим дома), а перед вылетом не калиброваться?
Да, таким образом калибруется аксель. Гирик калибруется каждый раз при включении, и ему пофиг горизонт, главное не трясти.
Да, таким образом калибруется аксель. Гирик калибруется каждый раз при включении, и ему пофиг горизонт, главное не трясти.
Я уже задавал вопрос-но у меня при каждом включени калиибруется и гирик,и и аксель.
Плата MultiWii 328P Flight Controller w/FTDI & DSM2 Port.
Глюк платы,или в прошивке что-то пропустил?