Создание собственной системы стабилизации
причём написаны датчики которые использует Таймкоп, интересно если я щас драйвер выложу они микруху допишут в поддерживаемые?
Так посмотри, у них есть платы с дочерними платами с сенсорами.
rcopen.com/forum/f123/topic281652
Это именно то что я и хотел. В общем, заказал себе вариантик без сенсоров, поставлю на него свою AllInOne… если найду время на это 😃
Схема и платка в орле, есть ошибка с питателями (корпуса меньшие) но запаять можно, так же библиотека с элементами:
есть ошибка с питателями (корпуса меньшие)
кстати это изъян в стандартных библиотеках орла, вечно косяки какие-то, в стандартном LQFP 48-ног контактные площадки были 0.13мм по ширине, хотя нормально и 0.25 и даже 0.3мм
О блин ST на семинар приглашали:
Free technical seminars
Save weeks of development time by attending a free seminar on the new STM32 F0 MCU based on the ARM® Cortex™-M0 core. Learn more about the features of the ARM® Cortex™-M0 core (system architecture, connectivity interfaces, advanced digital and analog peripherals) and the ecosystem of STM32 F0 microcontroller (development and programming tools, evaluation and development kits, firmware libraries). More
А вот такую стабилизацию видели??)))
robotor.ru/2012/06/05/joggobot/
Немного заглядывая вперёд:
STM32F405RGT6
MPU6000
bmp180 ?
HMC5883L ?
FGPMMOPA6B - GPS модуль на MT3329
как-то так
Из приятного, CP2102 дружит с линуксом определяется как TTYUSB 0 без всяких извращений, так что теперь оба контроллера под одной ОС запускаются…
в фотике CANON PC1475 стоят две гиры ENC-03 SMD 😃
MPU6000
Заказал себе 6050. Жду когда придет, начну мучать )))
в 6050 нет SPI 😦
I2c не хватит???
Хватит, и можно клон NAZE 32 сварганить, я просто хочу по SPI, после СС чёт I2C не вставляет, хотя на данный момент вроде без ошибок работает…
ну так ставте 6000 и будет SPI … правда они в отличии от 6050 пока в дефиците …
Первый запуск драйвера ничего не дал, не определилась LSMка 😦
аааа, а в автодетект кто править будет:)
Чёт я не могу въехать
bool ack = false;
uint8_t sig = 0;
ack = i2cRead(ADXL345_ADDRESS, 0x00, 1, &sig); // вот тут немогу разобратся что вычитывается из акселя, я так понимаю что и ack и sig присваивается значение 0хЕ5 это id устройства, к чему привязатся в LSM?
if (!ack || sig != 0xE5) // но тут же неack
return false;
Аксель определился, но читатся отказывается…
# statusshow
System Uptime: 863 seconds, Voltage: 0 * 0.1V (2S battery)
Detected sensors: ACC BARO MAG ACCHW: lsm330acc
Cycle Time: 1150, I2C Errors: 0
#
Беда с автоопределением, я подцепился к первому регистру (он единственный с ненулевыми показаниями) - определился, но что бы аксель заработал, этот регистр программировать надо, а так как я его щас запрограммировал, аксель уже не определяется, бядааа… 😦
да проверил свою догадку, надо искать другой способ автоопределения…
придумал, оси всегда включены, значит надо вычитать, только три младших байта из регистра, они будут всегда постоянны, вопрос как это сделать?
вычитать регистр, сместить <<5 получим число E0 его и примем за сигнатуру?
Можно ли так записать?
ack = i2cRead(LSM330ACC_ADDRESS, LSM330_CTRL_REG1_A << 5, 1, &sig);
Что то у вас всё сложно. В чём смысл идентификации акселя? В том чтобы не заточенную под железо прошиву определить при старте?
Умолчательное значение 00000111b
bool ack = false;
uint8_t sig = 0;
ack = i2cRead(ADXL345_ADDRESS, 0x20, 1, &sig); // если я правильно понимаю параметры функции читаем аксель по адресу 0x20
if (!ack || sig != 0x07) // тут либо NACK, либо считанное занчение не равно 7
return false;
вот вроде так
ps точнее так
ack = i2cRead(LSM330ACC_ADDRESS, LSM330_CTRL_REG1_A, 1, &sig);
сдвигать внутренний адрес акселя не нужно!
Решил проблему так:
bool LSM330ACCDetect(sensor_t *acc)
{
bool ack = false;
uint8_t sig = 0;
ack = i2cRead(LSM330ACC_ADDRESS, LSM330_CTRL_REG1_A , 1, &sig);
ack = ack <<5;
sig = sig <<5;
if (!ack || sig != LSM330ACC_DEVICE_SIGNATURE)
return false;
acc->init = LSM330ACCInit;
acc->read = LSM330ACCRead;
acc->align = LSM330ACCAlign;
return true;
}
Я просто потом перезаписываю регистр как мне надо, и всё приплыли нет аксела на следующем старте, сейчас всё заработало 😃
Сгирой постораюсь обойтись проще, типа есть такой аксель значит и гира такая же…
В чём смысл идентификации акселя? В том чтобы не заточенную под железо прошиву определить при старте?
у Таймкопа автоопределение датчиков написано - типа какие установлены, так вот я туда lsm-ку и пристраиваю
у переменной ack булевый тип, некрасиво его сдигать )
зато работает 😃 определяется аксель без проблем 😃
а в булеву переменную, всякую бяку засовывать, типа чип id, то ж некрасиво