MultiWii

mahowik
vatanuki:

нет, так нет - я просто просил и не настаивал что надо обновлять
а то сразу както в штыки

нет нет 😃 т.е. никаких штыков 😃
вот тут чуть подробнее rcopen.com/forum/f123/topic221574/9783

serenya
omegapraim:

А смысл делать маховий 2.3, в этой прошивке нет почти ничего нового

Вроде как появилась инструкция как допилить токовый датчик на 2.3

omegapraim:

Саш а нафиг он нужен то этот полет по точкам? для этого ведь мегапират есть.

mahowik:

банальная конкуренция смежных проектов 😉

А как же религиозная составляющая😁

romeo84

Спасибо!

mataor:

вы вообще полезли в абсолютно левые дебри…
вот чтение собственно сигналов:

#if defined(STANDARD_RX)

#if defined(FAILSAFE) && !defined(PROMICRO)
  // predefined PC pin block (thanks to lianj)  - Version with failsafe
 #define RX_PIN_CHECK(pin_pos, rc_value_pos)                        \
   if (mask & PCInt_RX_Pins[pin_pos]) {                             \
     if (!(pin & PCInt_RX_Pins[pin_pos])) {                         \
       dTime = cTime-edgeTime[pin_pos];                             \
       if (900<dTime && dTime<2200) {                               \
         rcValue[rc_value_pos] = dTime;                             \
         if((rc_value_pos==THROTTLEPIN || rc_value_pos==YAWPIN ||   \
             rc_value_pos==PITCHPIN || rc_value_pos==ROLLPIN)       \
             && dTime>FAILSAFE_DETECT_TRESHOLD)                     \
               GoodPulses |= (1<<rc_value_pos);                     \
       }                                                            \
     }

а в функции void computeRC() получаем готовые значения в массив rcData[chan]

или же у вас OpenLRS плата?

и вообще подробней объясните задачу (какой контроллер?, зачем и что нужно? и т.д. )

Плата Crius SE v 0 2, а зачем это нужно - хочу задействовать вход AUX3.

============

И ещё вопрос: скачал MultiWii 2.3, пытаюсь настроить вертолётный режим (HELI_120_CCPM) Так вот, никак не могу инвертировать серво… Подскажите плз, у кого получалось

mataor
romeo84:

хочу задействовать вход AUX3.

так задействуйте… в конфиге есть все для этого

serenya

На 328 меге аукс3-4 доступны только через сум-ппм.

mataor
serenya:

На 328 меге аукс3-4 доступны только через сум-ппм.

хех… кто тебе такое сказал? 😛

я уже делал подобное, жертвуеш ненужной сейчас ногой, небольшая добавка кода - и вуаля все 4 аукса

п.с. - вспоминать лень, делать по типу

 #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;

      pin = PINB;
      cTime = micros();
      sei();
      #if defined(RCAUXPIN8)
       if (!(pin & 1<<0)) {     //indicates if the bit 0 of the arduino port [B0-B7] is not at a high state (so that we match here only descending PPM pulse)
      #endif
      #if defined(RCAUXPIN12)
       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)
      #endif
        dTime = cTime-edgeTime; if (900<dTime && dTime<2200) rcValue[0] = dTime; // just a verification: the value must be in the range [1000;2000] + some margin
      } else edgeTime = cTime;    // if the bit 2 is at a high state (ascending PPM pulse), we memorize the time
    }
    #endif
  #endif

кстати тут же если сделать одну мааааленькую правку - уже получаем работающий аукс 3

serenya

Ну то что код подшаманить можно это понятно, а это был ответ на

mataor:

так задействуйте… в конфиге есть все для этого

romeo84
mataor:

хех… кто тебе такое сказал? 😛

я уже делал подобное, жертвуеш ненужной сейчас ногой, небольшая добавка кода - и вуаля все 4 аукса

кстати тут же если сделать одну мааааленькую правку - уже получаем работающий аукс 3

Благодарю. Сейчас попробую реализовать… Отпишусь как получится. Ведь явно не хватает двух ауксов…

PS Блин, как же тяжело без отладки что-либо делать ((

romeo84

Итак, если кому надо,

добавляем каналы AUX2, AUX3, AUX4 в прошивку MultiWii 2.3, Плата Crius multiwii se

  1. Раскомментить в config.h (строка 388)
#define RCAUXPIN8
#define RCAUXPIN12

так как иначе эти пины настроятся будут работать не на вход, а на выход на всякие там BUZZERы и т.д.

  1. В 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
  1. В 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 раз для того, чтобы фиг знает как угадать, что не ту переменную подставил это анреал мучения ))

flygreen

Народ, попробовал в Криус 2.0 SE залить base 2.1 от Маховика . Все работает кроме бародатчика. Чего не так могу делать ?

Или она изначально со старыми платами нефунциклирует ?

PS При этом обычная 2.2 работает…

Leon11t
flygreen:

Народ, попробовал в Криус 2.0 SE залить base 2.1 от Маховика

А вы прочтите пару последних абзацов и все станет понятно 😃)

Dhole
flygreen:

Или она изначально со старыми платами нефунциклирует ?

Гриш, Саша ваял свою прошивку под All in One, а там иной баро, нежели в SE.
И спецыяльно отмечено, что с иными вариациями MultiWii прошивка может работать криво, например.

Хотя - работает ))

Если охота поиметь все плюшки, то надлежит брать AOIP.

mataor

для старого баро есть файлик ИМУ с пометкой бмп085, но такого резултата как с мс5611 недобьетесь, будет в пределах метра-полутора бултыхаться
там разница и в коде, и в пидах

ну и оба варианта на мпу6050 рассчитаны соответственно

moscow

Собрал лёгкий квадрик на 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%, помню это тоже имело значение… На назе в последнее время летал 😃, но решил мелкий квадрик на мультике собрать.

kostya-tin

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

moscow
kostya-tin:

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

Понятно.
Поднял сегодня во дворе, переключил в баро. Скачет жутко. Но у меня мотор один разбит и паралоном не закрывал барометр ещё. Идея ясна, буду доделывать. Спасибо.

vAkUuM

Здраствуйте, поставил NanoWii на GAUI 330. Пытаюсь подсоединить по SBUS приёмник futaba r7008sb. Пока никакие танцы с бубном не помогают. Ставили другой приёмник, тоже futaba, но предыдущую модель на такую же конфигурацию все получилось с первой попытки. На зарубежных форумах пишут что вроде на этом приёмнике futaba изменила протокол SBUS. Может у кого получилось соединить их?

Leon11t

Коллеги, написал тут небольшую прогу для прощета магнитного склонения для мультивия. Прошу потестить под себя, ну и критика также приветствуется. digiua.com/multiwii-mag-declination-calc/ Коменты можете оставлять, прямо там на сайте или здесь.

Taatarenkoff

За проведенный труд 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мб

Leon11t

Сама прога весит 12кб, все остальное иконка )) В маховии я етой формулы не заметил.