Управляем чем угодно откуда угодно

В2Р + ATtiny45

Виртурилка, 3G/4G, WiFi, моторчики, датчики, GPS и прочее - питание, драйвера, совместимость и т.д.

Re: В2Р + ATtiny45

Сообщение Gol » 04 окт 2013, 19:00

muzhig писал(а):К примеру у меня есть MPU-6050 (гироскоп+акселерометр+processing unit)


См. в ядре, там как раз твой датчик Invensense MPU6050 есть. Их там дофига разных.

Код: Выделить всё
CONFIG_INV_MPU6050_IIO:
Location:
   -> Device Drivers
   -> Industrial I/O support (IIO [=m])


Можно и напрямую шину читать-писать, но зачем? Драйвер позволяет все фичи девайса представить в виде файлов которые можно читать для получения значений параметров и писать в них для установки параметров. Unix-way, однако.
Аватара пользователя
Gol
 
Сообщения: 507
Зарегистрирован: 17 фев 2012, 01:44
Откуда: Тула-Свободный-Щёкино-Тула-Москва

Re: В2Р + ATtiny45

Сообщение muzhig » 04 окт 2013, 20:14

то есть все эти драйверы дают лишь unix-way обертку на регистры I2C девайса? (по перфомансу разницы нет?)
muzhig
 
Сообщения: 65
Зарегистрирован: 14 сен 2013, 19:47

Re: В2Р + ATtiny45

Сообщение booter » 04 окт 2013, 20:19

muzhig писал(а):то есть все эти драйверы дают лишь unix-way обертку на регистры I2C девайса? (по перфомансу разницы нет?)

Ну там еще циклический буфер в комплекте - http://wiki.analog.com/software/linux/docs/iio/iio :)
Аватара пользователя
booter
virt2real team
 
Сообщения: 47
Зарегистрирован: 08 авг 2012, 19:52
Откуда: Россия, Тула

Re: В2Р + ATtiny45

Сообщение andrewion » 19 окт 2013, 22:00

Вообщем, ребята (разработчики), вы там что-то с i2c упустили. :)
В продолжении темы Attyny45 + в2р, у меня хоть маленькая подвижка-победа получилась.

Суть в следующем, прошил микроконтроллер Attiny45 следующим скетчем:
файл V2R_I2C.ino:
Код: Выделить всё
#include "pins_arduino.h"

// Константы для I2C общения к ведомому контроллеру V2R
#include "v2r_i2c_servo_types.h"

#include <TinyWireS.h>

int led = 3;

// Статус устройства
byte deviceStastus = V2R_I2C_SERVO_STATUS_NONE;

/*
  Инициализация приложения
*/
void setup ()
{
  delay(100); // give the master some time to grab the i2c bus
  sei(); // enable interrupts

  // Инициализация I2C в качестве ведомого устройства
  TinyWireS.begin(I2C_SLAVE_V2R_I2C_SERVO);

  // Назначаем пины
  pinMode(led, OUTPUT);
  digitalWrite(led, HIGH);
}

/*
  Цикл приложения
*/
void loop ()
{
  // Ожидаем сообщения по I2C
  if (TinyWireS.available())
  {
    byte i2cData = TinyWireS.receive();

    switch (i2cData)
    {
      // Сброс всех установок
      case V2R_I2C_SERVO_ON:
        digitalWrite(led, HIGH);

        // Ставим статус устройства
        deviceStastus = V2R_I2C_SERVO_STATUS_ON;
      break;

      // Сброс всех установок
      case V2R_I2C_SERVO_RESET:
        digitalWrite(led, LOW);

        // Ставим статус устройства
        deviceStastus = V2R_I2C_SERVO_STATUS_NONE;
      break;

      // Запрос состояния
      case V2R_I2C_SERVO_GET_STATUS:
        // Возвращаем данные I2C мастеру
        TinyWireS.send(deviceStastus);
        return;
      break;
    }

    // Возвращаем данные I2C мастеру
    TinyWireS.send(0);
  }

  delay(10);
}

файл v2r_i2c_servo_types.h:
Код: Выделить всё
// Адрес котроллера I2C шины данных
#define I2C_SLAVE_V2R_I2C_SERVO 0x31

#define V2R_I2C_SERVO_ON 0x01 // Диод включить

// Общего назначения
#define V2R_I2C_SERVO_RESET 0x41 // Сброс всех установок

// Запрос статуса устройства
#define V2R_I2C_SERVO_GET_STATUS 0x51

#define V2R_I2C_SERVO_STATUS_NONE V2R_I2C_SERVO_RESET // Статус отсутсвует
#define V2R_I2C_SERVO_STATUS_ON V2R_I2C_SERVO_ON // Статус того, что фары автоматически включились


В итоге, микроконтроллер должен иметь адрес 0x31 в качестве slave устройства. Потом подключил Attiny45 к в2р к i2c шине. На в2р смотрю i2c устройства через консоль:
Код: Выделить всё
i2cdetect -y 1


И наблюдаю интересную ситуация, в шине i2c на в2р, устройство с кодом 0x31 появляется через раз.
Думал, что проблема связанна с тоже проблемой как и у этого топика http://forum.virt2real.ru/viewtopic.php?f=38&t=13335&p=17454#p17454. Попытался поставить данный фикс http://files.virt2real.ru/temp/i2c-timeout-error-fix.patch, но без результатно.

Но обратил следующее внимание:
В файле /kernel/drivers/i2c/busses/i2c-davinci.c в строках 122-126:
Код: Выделить всё
...
/* default platform data to use if not supplied in the platform_device */
static struct davinci_i2c_platform_data davinci_i2c_platform_data_default = {
   .bus_freq   = 100,
   .bus_delay   = 0,
};
...


Указанна скорость i2c шины как 100 kHz,

А в файле /kernel/arch/arm/mach-davinci/board-dm365-evm.c в строках 55-60:
Код: Выделить всё
...
static struct davinci_i2c_platform_data i2c_pdata = {
   .bus_freq   = 400   /* kHz */,
   .bus_delay   = 0   /* usec */,
   .sda_pin        = 21,
   .scl_pin        = 20,
};
...


Указанна скорость i2c шины как 400 kHz,

Я в файле /kernel/arch/arm/mach-davinci/board-dm365-evm.c заменил скорость i2c шины c 400 kHz на 100 kHz.
Собрал новую прошивку, вставил её в в2р. И о! Чудо! Attyny45 теперь не мелькает при запросе в консоль:
Код: Выделить всё
i2cdetect -y 1


А стабильно видна, как i2c устройство. Теперь можно спокойно писать драйвер для микроконтроллера для в2р. :D
Аватара пользователя
andrewion
 
Сообщения: 150
Зарегистрирован: 03 сен 2013, 21:46

Re: В2Р + ATtiny45

Сообщение Gol » 20 окт 2013, 14:14

andrewion писал(а):Вообщем, ребята (разработчики), вы там что-то с i2c упустили. :)
...заменил скорость i2c шины c 400 kHz на 100 kHz. Собрал новую прошивку, вставил её в в2р. И о! Чудо! Attyny45 теперь не мелькает при запросе в консоль...


Хм, видимо прохлопали, ага :-) Ща тож проверю.

Вообще, davinci_i2c_platform_data_default это дефолтный конфиг драйвера i2c. А в board-evm365.c инициализация того драйвера с нужными значениями, которые замещают дефолтные. Вполне возможно что какой-то из датчиков не могёт на такой частоте, так что нужно понижать. Либо можно в конфиг uEnv.txt вынести параметр "частота i2c" чтоб менять на лету а не пересборкой ядрышка.
Аватара пользователя
Gol
 
Сообщения: 507
Зарегистрирован: 17 фев 2012, 01:44
Откуда: Тула-Свободный-Щёкино-Тула-Москва

Re: В2Р + ATtiny45

Сообщение andrewion » 20 окт 2013, 15:00

Отличная идея!!! Вынесите, пожалуйста, в конфиг uEnv.txt. Ибо собирать по 100500 раз ядро, чтобы изменить это значение уже не айс :D

Кстати, а с itg3200 удалось разобраться? И был ли коммит для adxl345?

Сейчас тестирую у 10 DOF Mems IMU Sensor датчики hmc5843 и bmp085, без itg3200 - полёт нормальный.
Аватара пользователя
andrewion
 
Сообщения: 150
Зарегистрирован: 03 сен 2013, 21:46

Re: В2Р + ATtiny45

Сообщение andrewion » 27 окт 2013, 16:44

В начале ветки, поправил первый пост с рецептом по данной теме: http://forum.virt2real.ru/viewtopic.php?f=38&t=13332&p=16972#p16972 :D
Аватара пользователя
andrewion
 
Сообщения: 150
Зарегистрирован: 03 сен 2013, 21:46

Re: В2Р + ATtiny45

Сообщение holmes » 13 ноя 2013, 00:06

Уважаемые разработчики, уж очень хочется получить прошивку с вынесенным в uEnv параметром.
Как там дела, движутся?
Аватара пользователя
holmes
 
Сообщения: 83
Зарегистрирован: 13 ноя 2013, 00:02
Откуда: Мск

Re: В2Р + ATtiny45

Сообщение holmes » 22 ноя 2013, 13:25

Ответа нет, а вроде ж мелочь спросил. Мда, а тут кто-то еще интересовался почему сообщество такое вялое.
Аватара пользователя
holmes
 
Сообщения: 83
Зарегистрирован: 13 ноя 2013, 00:02
Откуда: Мск

Re: В2Р + ATtiny45

Сообщение phoenix367 » 22 ноя 2013, 13:43

holmes писал(а):Ответа нет, а вроде ж мелочь спросил. Мда, а тут кто-то еще интересовался почему сообщество такое вялое.

Я сделал форк ядра виртурилки и кроме прочего добавил туда возможность установки частоты i2c из uEnv.txt (кстати, реально удобно). Если хотите, можете пользоваться.
phoenix367
 
Сообщения: 193
Зарегистрирован: 09 сен 2013, 00:19

След.

Вернуться в Железо - заставляем работать

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron