FABO3AXIS-ADXL345-Library

Беннебой
Чт 12 января 2017 г. 11:12
https: // github.com/faboplatform/fabo3ax ... 45-библиотека

Если я правильно прочитал, все, что мне нужно сделать, чтобы работать на STM32, - это правильно введите переменные?

Я вижу в коде, что он использует «int» регулярно, предположительно, они должны быть напечатаны как int16_t.

Я не заметил ни одного из других Nasties и предполагаю, что версия Wire STM32 позаботится о i2c.

Итак, как правильный способ сделать это, если я разыграл оригинальный код авторов и выпустит пиар для редактирования или мы делаем частную копию постфикс STM32? Или кто -то еще беспокоит, и я просто ссылаюсь на местную версию? : D

Я бросил библиотеки Adafruits ADXL345 (также требует их общей библиотеки датчиков) в пользу этого, потому что это намного меньше.

Просто пытаюсь подготовить вещи к подготовке к тому, как прибудут мои доски.

Даниэфф
Чт 12 января 2017 г. 11:49
Я думаю, что библиотека в порядке, как есть. Не проверял это, но не так, как будто вы должны менять каждый int, чтобы запустить на STM32.

Беннебой
Чт 12 января 2017 г. 16:57
ОК достаточно справедливо : D

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

Беннебой
Пн 23 января 2017 г. 15:09
Доска прибыла,

Перенил мой проект на него и начал кодировать различия в.

Работает до сих пор:
3X SSD1306 OLED работает с использованием программного SPI (библиотека Adafruit)

Макс 31586, работая над другой программной шиной SPI (библиотека Adafruit)

Аналоговые входы работают нормально, используя 4096 против 1024 Divisor.

Я не могу работать, это FABO над i2c.

FABO полагается на проволоку.H для оборудования i2c, мне нужно включить вариант Maple Mini с жесткими кодированием i2c на контакты 15 & 16? Это булавки на шелкопленном экране на моей доске и соответствуют этой ссылке -> https: // Разработчик.Mbed.org/media/upload ... NOUT01.пнн

Беннебой
Пн 23 января 2017 г. 16:56
Я проверил очевидные вещи:

У платы 345, которую я использую, есть регулятор, она проходит 3.3V, чтобы чип получает VCC.

Резисторы подтягивания на доске 4.7k

У библиотеки есть метод SearchDevice на объекте, это то, что терпит неудачу - подозревает, что это как -то связано с тем, как обстоят дела в коде, или я просто понял неверные булавки/что -то, или что -то вроде Шины I2C и код ожидает адреса, которого нельзя не существует.

Не очень знаком с I2C, так что я думаю, пришло время пойти на Googling.

Беннебой
Пн 23 января 2017 г., 17:34
Общий сканер I2C находит устройство
Scanning... I2C device found at address 0x53 ! done

ZMEMW16
Пн 23 января 2017 г., 17:57
Попробуйте Sniffers из примеров Wire Lib, один из них обычно работает для меня.

другой пробует адрес + 1, e.глин. 0x3c & 0x3d istr A 9.98 "OLED по какой -то причине - ссылка на альтернативный адрес ?

Стивен

<редактировать> мне нужно напечатать быстрее </редактировать>

Беннебой
Пн 23 января 2017 г. 18:07
Я попробовал подхишать, см. Предыдущий пост, он возвращает правильный адрес.

Вот определение адреса из заголовка библиотеки:

/** slave_address*/
#define adxl345_slave_address 0x53

Я почти уверен, что что -то идет не так с тем, как конструктор библиотеки работает на STM32, но я не самый величайший кодер в мире (особенно объектно -ориентированный код), так что в настоящее время я немного невежественен.

Вот определение класса из заголовка библиотеки: class FaBo3Axis { public: FaBo3Axis(uint8_t addr = ADXL345_SLAVE_ADDRESS); bool searchDevice(void); void configuration(void); void powerOn(void); void readXYZ(int *x, int *y, int *z); uint8_t readIntStatus(); void enableTap(); bool isSingleTap(uint8_t value); bool isDoubleTap(uint8_t value); private: uint8_t _i2caddr; void writeI2c(uint8_t register_addr, uint8_t value); void readI2c(uint8_t register_addr, uint8_t num, uint8_t *buf); };

Беннебой
Пн 23 января 2017 г. 20:14
Хорошо, так что все в паре назад, и библиотека отлично работает в изоляции.

Таким образом, либо мой код наносит на него, либо он не очень хорошо играет в сочетании с другими библиотеками SPI Software, которые я использую, но только для STM32??

:(

Беннебой
Пн 23 января 2017 г. 20:16
На самом деле, нет, это не так, он возвращает один и тот же случайный результат назад....

Беннебой
Пн 23 января 2017 г. 9:07 вечера
Подозревает, что это проблема с наследством от проволочной базы.доступный()

У кого -нибудь еще есть пример кода i2c, который использует этот метод?

Беннебой
Пн 23 января 2017 г. 9:17 вечера
В тупике. ПОМОЩЬ : D

ZMEMW16
Вт 24 января 2017 г. 12:36
Сделал GREP -R _I2CADDR в каталоге библиотеков F1, только файлы ADAFRIT_SSD1306/ADAFRIT_SSD1306_STM32.час & У CPP это есть

Поиск i2Caddr здесь дал 4 результата, один из которых упоминал #Define i2Caddr (бла)

Стивен

Беннебой
Вторник 24 января 2017 г. 7:30 утра
ZMEMW16 написал:Сделал GREP -R _I2CADDR в каталоге библиотеков F1, только файлы ADAFRIT_SSD1306/ADAFRIT_SSD1306_STM32.час & У CPP это есть

Поиск i2Caddr здесь дал 4 результата, один из которых упоминал #Define i2Caddr (бла)

Стивен

Беннебой
Вт 24 января 2017 г. 8:32
SSD1306 использует Hardwire & не читает, просто пишет.

Думаю, я на правильном пути с методом доступного (), просто необходимо найти какой -то другой код STM32, который использует его при чтении.

Беннебой
Вт 24 января 2017 г. 9:02
Я нашел этот пост, который позволяет реализации проволоки не работает с рабовладельческими устройствами...

http: // www.STM32duino.com/viewtopic.PHP?t = 446

ADXL345 работает как раб -> https: // www.Sparkfun.com/datahasthets/sen ... DXL345.PDF

Я полный новичок в этом аппаратном уровне, правда ли, что реализация провода не будет работать со рабов?

Беннебой
Вт 24 января 2017 г. 9:07
Хорошо, собираюсь перестать задавать глупые вопросы, а затем найти ответы с быстрым поиском.

Беннебой
Вт 24 января 2017 г. 11:57
Хорошо, так что не уверен, что этот комментарий к методу :: request from в проволочной базе.CPP является показателем проблемы?

Пожалуйста, может ли любой, кто знает больше о том, как работает этот код, пожалуйста, прокомментируйте?

Я также вставил на провод Arduino.H эквивалент ниже

STM32 проволочная база.CPP
//TODO: Add the ability to queue messages (adding a boolean to end of function // call, allows for the Arduino style to stay while also giving the flexibility // to bulk send uint8 WireBase::requestFrom(uint8 address, int num_bytes) { if (num_bytes > WIRE_BUFSIZ) { num_bytes = WIRE_BUFSIZ; } itc_msg.addr = address; itc_msg.flags = I2C_MSG_READ; itc_msg.length = num_bytes; itc_msg.data = &rx_buf[rx_buf_idx]; process(); rx_buf_len += itc_msg.xferred; itc_msg.flags = 0; return rx_buf_len; }

Беннебой
Вт 24 января 2017 г. 15:18
Я перешел в библиотеку ADAFRIT ADXL345, размер кода больше (~ 3KB), но это не имеет большого значения на этом устройстве.

Я обернул библиотечные вызовы в условные условия, поэтому, если он построен на небольшом аппаратном обеспечении, он использует библиотеку FABO.

Лучший из обоих миров, но грязный код.

Когда я узнаю больше об этом, я могу вернуться и сделать свою собственную гораздо меньшую библиотеку.

Беннебой
Вт 24 января 2017 г. 15:32
Код проекта для всех заинтересованных -> https: // github.com/bennehboy/lrduino