MultiWii

mahowik
HATUUL:

Во втором варианте на рисунке я вижу жёлтую жабу.

а в чем жаба? 😃 яж написал выше что вместо bma020 нужно подрубить нунчак… в итоге все провода в параллели: питание (от 3.3в ардуины), земля, SCL, SDA

Wishnu

Кто может объяснить по-русски что такое пулапы?

Musgravehill
Wishnu:

что такое пулапы

pullup -подтягивающий резистор. Чтобы шина SCL и SDA не “болталась в воздухе”, на нее через резистор подают напряжение питания, т.е. на шине всегда логическая “1” относительно земли. Во время передачи устройство периодически вешает шину на землю = 0, отпускает = 1.

Когда включаете устройства с подтягивающими резисторами в каждом, то общее сопротивление подтяжек сильно падает по известной формуле параллельного соединения резисторов. В итоге, есть риск тупо подать Uпитания на шину SCL SDA через “кусок провода”. Во время работы устройство притянет эту шину к земле = К.З.

mahowik
Wishnu:

Кто может объяснить по-русски что такое пулапы?

www.itt-ltd.com/reference/ref_i2c.html
www.robot-electronics.co.uk/…/I2C_Tutorial.html

For the line to be able to go high you must provide pull-up resistors to the 5v supply. There should be a resistor from the SCL line to the 5v line and another from the SDA line to the 5v line. You only need one set of pull-up resistors for the whole I2C bus, not for each device, as illustrated below:

The value of the resistors is not critical. I have seen anything from 1k8 (1800 ohms) to 47k (47000 ohms) used. 1k8, 4k7 and 10k are common values, but anything in this range should work OK. I recommend 1k8 as this gives you the best performance. If the resistors are missing, the SCL and SDA lines will always be low - nearly 0 volts - and the I2C bus will not work.

грубо говоря если девайс представить как ключ/переменный резистор, то для выставиления единицы на шину, он увеличивает свое внутр. сопротивление и соот-но в связке с подтягивающим резистором (pull-up resistor) получаем единицу на шине. Т.е. пуллап резистор в связке с внутр. сопротивлением девайса выступает в роли делителя напряжения…
Соот-но стоит девайсу открыть ключ (уменьшить сопротивление), на шине будет ноль…

ну а без пуллапов всегда будет ноль на шине, т.к. нечего делить…

Не рекомендую на истину, поправьте еси что то не так 😃

P.S. От жыж опередили 😃

HATUUL
mahowik:

а в чем жаба

Рисунка не видно.

Народ кто-то может сказать что у него нуунчак и tg3205 работают вместе,без теории на практике,думаю таких нет.

mahowik
HATUUL:

без теории на практике

wbb.multiwii.com/viewtopic.php?f=6&t=27&start=20 тут есть такие
у вас кстать чака оригинал? у меня похоже оригинал и есть проблемы с подключением как standalone… + на 400кГц вообще не запускается…
перековырнул I2C multiwii API чеб заработал (спасибо ziss_dm)…

void i2c_ACC_init() {
  TWBR = ((16000000L / 100000L) - 16) / 2;

  i2c_rep_start(0xA4 + 0);//I2C write direction => 0
  i2c_write(0xF0);
  i2c_write(0x55);
  i2c_rep_stop();

  i2c_rep_start(0xA4 + 0);//I2C write direction => 0
  i2c_write(0xFB);
  i2c_write(0x00);
  i2c_rep_stop();

  delay(250);
  accPresent = 1;
}


void i2c_ACC_getADC() {
  TWBR = ((16000000L / 100000L) - 16) / 2;

  i2c_rep_start(0xA4 + 1);//I2C read direction => 1
  for(uint8_t i = 0; i < 5; i++)
    rawADC_NUN[i]=i2c_readAck();
  rawADC_NUN[5]= i2c_readNak();
  i2c_rep_stop();

  accADC[ROLL]  =   ( (rawADC_NUN[3]<<2)        + ((rawADC_NUN[5]>>4)&0x2) );
  accADC[PITCH] = - ( (rawADC_NUN[2]<<2)        + ((rawADC_NUN[5]>>3)&0x2) );
  accADC[YAW]   = - ( ((rawADC_NUN[4]&0xFE)<<2) + ((rawADC_NUN[5]>>5)&0x6) );

  i2c_rep_start(0xA4 + 0);//I2C write direction => 0
  i2c_write(0x00);
  i2c_rep_stop();
}

void i2c_rep_stop(void)
{
  TWCR = (1 << TWINT) | (1 << TWEN) | (1 << TWSTO);
  waitTransmissionI2C();
}
HATUUL
mahowik:

у вас кстать чака оригинал?

А вот этого я не знаю,нуунчак подогнал Питер (fmkit),а он как многие знают спец в нуунчаках,по его словам аксел лучше чем у оррегинала,какой-то бошевский.

mahowik:

и есть проблемы с подключением как standalone

Так в конце получилось подключить?

mahowik
HATUUL:

Так в конце получилось подключить?

да (но без ВМ+) и даже на 380кГц… если выше то педалит…

HATUUL
mahowik:

и даже на 380кГц

А зачем вам 400кГц?Как я понял это только хуже.

mahowik
HATUUL:

А зачем вам 400кГц?Как я понял это только хуже.

чем выше частота, тем ниже время цикла… соот-но тем выше скорость реакции системы…
хотя если летать блинчиком, а не как warthox то думаю разницу будет трудно заметить 😃

Musgravehill
mahowik:

I recommend 1k8 as this gives you the best performance

Забыл сказать, при относительно низком сопротивлении подтягивающих резисторов фронты сигнала получаются резкими и не размазываются. Это хорошо. Я ставлю 3.3кОм. При слишком большом сопротивлении, как я понимаю, переходные процессы “0”<—>“1” затягиваются, поэтому фронты получаются нечеткими, это может вызвать сбой.

Wishnu

Сидуину воскресить не удалось. Пересобрал всё на кардуине, завтра буду плату резать по размеру.
Почему-то возрос cycle time с 3000 до 4000 😦 В коде ничего не менял, подключение такое же.

HATUUL
Wishnu:

Почему-то возрос cycle time с 3000 до 4000

Может бут разный.😃

HATUUL

Задался вопросом.
В чём разница между 8кГц и 16кГц ШИМами в безколлекторном контроллере?
Точнее что оно даёт перевод на 16кГц,и что ставить на квадрик?
Пока заметил на 16кГц,движки перестали шуметь,значит минус пару процентов вибрации,и это гут.

Musgravehill

Говорят, что у бюджетных ESC

HATUUL:

на 16кГц

может возникать срыв генерации. Но что-то не замечал.

Wishnu
SovGVD:

а на морозе то как себя ведет?

Работает в любую погоду))
Еще назрел вопрос, как выглядит зависание по i2c шине?
И еще, если кто следит за веткой FFIMU датчиков на рцгрупс, они в каком то магазе продаваться будут или на форуме?

Syberian
Wishnu:

как выглядит зависание по i2c шине

если в полете - моторы колом и падает камнем
если в ГУИ - график перестает бежать, пока прогу не перезапустишь, также могут появляться дикие, в т.ч. отрицательные числа в cycle time

FFIMU чото тянут кота за яйца который месяц… не дождался, купил Allinone, уже подключил, все работает… Магнетометр осями попутан, а так вроде ничо.

Covax

Олег, ну как там вообще жизнь молодая? Забросил фильтр свой программировать?

Wishnu
Syberian:

если в ГУИ - график перестает бежать, пока прогу не перезапустишь

Я вот на ночь оставил гуи - оно повисло, но перезапуск проги не помогает. Поможет если только питание отключить и потом снова включить. При этом сколько уже аккумуляторов посадил - ни разу не замечал, что б что то повисло.

а что такое

Syberian:

Allinone

можно ссылку? )

MikeMDR
mahowik:

чем выше частота, тем ниже время цикла…

Интересно, а на сколько?
Т.к. время в цикле - это время на внутренние преобразования в гиро(аксель)-сенсоре + время на обмен данными между Ардуиной и сенсором. Например, для ВМА150: “Acceleration data refresh rate (all axes) - f_rate - 2,7-3,3 кHz”.
А для гиры L3G4200D вообще: “Digital output data rate - 100/200/400/800 Hz”
( Насколько я понял, для ITG-3200: “The ADC output rate is programmable up to a maximum of 8,000 samples per second down to 3.9 samples per second”)
А т.к. начала измерений в сенсорах не синхронны, то, даже с учётом того, что данных - несколько десятков байт, при " i2c - 100kHz" передача данных закончится раньше, чем будут готовы все новые данные!
И много мы выиграем при переходе на 400kHz?