Аппаратное обеспечение i2c на Maple mini

z1rqdym
Чт 27 августа 2015 12:56
Я вижу много вещей о i2c на Maple mini. Но я не уверен, что правильно. Поэтому я хочу использовать аппаратное обеспечение 400 кГц I2C на Baite Maple Mini Clone. Что я должен делать?

Mrburnette
Четверг 27 августа 2015 г., 13:31
z1rqdym написал:Я вижу много вещей о i2c на Maple mini. Но я не уверен, что правильно. Поэтому я хочу использовать аппаратное обеспечение 400 кГц I2C на Baite Maple Mini Clone. Что я должен делать?

Rogerclark
Чт 27 августа 2015 г., 21:36
Библиотека Wire I2C теперь дефолт на 100 кГц из -за совместимости аппаратного обеспечения.

Библиотека проводов мягкая i2c (бит избивает), так что вы можете использовать ее на любых выводах GPIO.
Максимальная скорость составляет около 250 кГц, но вам нужно создать экземпляру другую копию и передавать spftware_fast как скорость.

Hardwire - это отдельный класс, использует выделенные контакты HW I2C и хорошо для 400K, но вам нужно изменить существующий код, чтобы использовать это имя класса вместо провода


КСТАТИ. С некоторой оптимизацией мягкий i2c можно легко подтолкнуть до 400 тыс., Это просто никто не нуждался в этом, поэтому никто не смотрел на оптимизацию

Мадиас
Чт 27 августа 2015 г., 21:46
это просто никто не нуждался в этом, поэтому никто не смотрел на оптимизацию Тот, кому не нужна скорость или производительность, принимает библиотеку из битбангы, «потребность в скорости» и, ищущие производительность, используют версию HW - я делаю оба, зависит от проекта.
Я думаю, что полная проволочная библиотека на основе HW невозможна со старым Libmaple i2c.H Core (ошибки, не исправленные проблемы HW и другие ловушки), так что это также причина, по которой никто не объединил его.

Rogerclark
Чт 27 августа 2015 г., 22:16
Матиас

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

Я не тестировал оборудование i2c, потому что у меня не было времени, но OP сказал, что теперь он работает нормально. (Извините еще раз, я не могу вспомнить ссылку и т. Д., Но PR будет видна на GitHub)

z1rqdym
Пт 28 августа 2015 г., 17:04
С логическим клоном Saleae (наконец, я нашел один и купил его), я вижу Freq Stange Clock Freq, немного на PIN SCL SCL SCL дает 20 кГц, на втором бите от SDA PIN. Это очень медленно для моего проекта.
Я использовал Maple IDE 0.0.12 и провод.H Библиотека.

Я посмотрел тему Рэй, опубликованной здесь. Но я все еще смущаю.

Итак, единственный способ написать свой собственный драйвер для использования аппаратного i2c ?

Может быть, мне следует использовать Arduino IDE с Maple Mini, но у меня нет ни одного преобразователя USB-RS232, чтобы изменить загрузчик для Arduino IDE.

Martinayotte
Пт 28 августа 2015 г., 17:43
В STM32F1/Libraries/Wire/Wire.h, какие значения у вас есть для soft_standard и soft_fast ?
В STM32F1/Libraries/Wire/Wire.CPP, какая скорость используется в конструкторе «TwoWire Wire (PB6, PB7, Soft_XXX)» ?

Я также сделал несколько измерений с моим Saleae, для Soft_standard, он дает около 66 кГц (который все еще около нормальных 100 кГц), и для Soft_fast это дает мне около 333 кГц.

РЕДАКТИРОВАТЬ: Я меняю Soft_standard Define с 27 до 20, а затем он поднялся почти до 100 кГц вместо предыдущих 66 кГц.

Rogerclark
Пт 28 августа 2015 г., 21:01
Мартин,

Мне нужно найти пост, но кто -то сделал несколько временных испытаний и пришел к выводу, что значения задержки E.G, которые установили скорость, были неправильными, и прислал мне пересмотренные в PR, на который я поступил.

Интересно, является ли это разницей между оптимизацией в компиляторе ARM на разных платформах?

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

Fredbox
Сб 29 августа 2015 12:00 утра
Читать 12 байтов с использованием устройства I2C по адресу 0x10 // ZERO CROSSING DETECTOR AND TIMER EXAMPLE HardwareTimer myTimer(1); // We use the TIMER1 const int ZCD_Pin = PB1; // Input from Zero Crossing Detector's output int led_Pin = PB0; // LED driven by zcd() and handler_led() void zcd() { digitalWrite(led_Pin, LOW); myTimer.resume(); // here we starting the counting from zero } void handler_led() { digitalWrite(led_Pin, HIGH); myTimer.refresh(); // here we finished at 5000 thus we reset count to 0 (?) myTimer.pause(); // here we can pause } void setup() { pinMode(led_Pin, OUTPUT); // setup the pin as output pinMode(ZCD_Pin, INPUT); // ZCD signal input attachInterrupt(ZCD_Pin, zcd, FALLING); myTimer.pause(); myTimer.setPeriod(5 * 1000); myTimer.setChannel1Mode(TIMER_OUTPUT_COMPARE); myTimer.setCompare(TIMER_CH1, 1); myTimer.attachCompare1Interrupt(handler_led); myTimer.refresh(); myTimer.resume(); } void loop() { }

Martinayotte
Сб 29 августа 2015 1:23
Rogerclark написал:Я могу изменить значения, если мы сможем добиться некоторого консенсуса по поводу того, какое значение использовать.

Fredbox
Сб 29 августа 2015 2:15
@fredbox, видя ваш пост, вы имеете в виду, что использование Hardwire, вы получаете мусор ? Были ли у вас несколько подтягиваний на обеих линиях SDA/SCL ?
Нет, это регистры статуса от радиомодуля. Это действительные данные. Подтягивания 2.2K.

Martinayotte
Сб 29 августа 2015 г., 2:18
Ах ! Хорошо !
Я не понял цели вашего поста ...
Это просто для того, чтобы упомянуть, что Hardwire работает нормально ?

Rogerclark
Сб 29 августа 2015 г., 3:07
У меня было 2 пиара для оборудования

https: // github.com/rogerclarkmelbourne/ ... 3C4FD8E2D8

и

https: // github.com/rogerclarkmelbourne/ ... 2df976788b

Похоже на получение данных из @fergul на GitHub, я Soft Standard Speed, чтобы использовать новую рекомендуемую настройку


https: // github.com/rogerclarkmelbourne/ ... 4e7a0c6c0b


Однако это похоже на то, что это слишком медленно, я.E на некоторых машинах от 30% до низкого уровня.



В любом случае, глядя на детали от @fergul, похоже, Hardwire сейчас работает для них.

Fredbox
Сб 29 августа 2015 3:34
Martinayotte написал:Ах ! Хорошо !
Я не понял цели вашего поста ...
Это просто для того, чтобы упомянуть, что Hardwire работает нормально ?

z1rqdym
Чт, 03 сентября 2015 г., 19:24
Я попробовал библиотеку Hardwire, и это было здорово. Я уже проверяю с логическим анализатором, и все в порядке. Но я вижу, что модуль I2C на STM32F1 имеет различия между Microchip Pic. С датчиком L3G4200D дает странные значения. Может быть, это от подтягивающих рситоров, которые они 10 ком. С MPU6050 он работает хорошо, и у него 4.7khh подтягивающие ressistors. Я не могу изменить подтягивающие ressistors L3G4200D, поэтому я собираюсь изменить датчик на MPU6050.

и скажет, что i2cdevlib прекрасно работает с Mapple Mini Baite Clone. Я загружаю и запускаю идеально HMC5883L, BMP085/BMP180, MPU6050 (без DMP, я понятия не имею, где я провожу штифт MPU6050 int в Mini Mapple, на Arduino Uno, это D2 Pin).

В библиотеке Hardwire, какой параметр заставляет Hardwire работать на 100 кГц?

Колальде
Чт, 03 сентября 2015 г., 22:37
Какую картину вы используете? У меня было несколько старых чипсов 16F87X в розыгрыше, и я собрал несколько рабских кодов I2C. Просто скелет, но работал достаточно.

Прыгая здесь, задаваясь вопросом, имеет ли какой -либо из рассматриваемого кода STM?

Fredbox
Пт, сентябрь 04, 2015 3:41
В библиотеке Hardwire, какой параметр заставляет Hardwire работать на 100 кГц? //isr void interrupt isr(void) { //tmr1 isr TMR1IF = 0; //clear the flag IO_FLP(sOUT_PORT, OUTP | OUTN); //flip outp/outn OUT(sOUT_PORT); } int main(void) { mcu_init(); //initialize the mcu com_init(TMR1_PS8x); //reset cosine comm ei(); //enable global interrupts while (1) { if (GPIF) { //AC_IN has changed state AC_PORT; //read the port - necessary to clear the flag GPIF = 0; //clear the gpif //initialize the timer TMR1 = -phase; //reset timer //reset outp/outn IO_CLR(sOUT_PORT, OUTP); IO_SET(sOUT_PORT, OUTN); OUT(sOUT_PORT); } } }

z1rqdym
Пт, сентябрь 04, 2015 6:43
Колальде написал:Какую картину вы используете?

z1rqdym
Пт, сентябрь 04, 2015 6:45
... tools.bmp_upload.upload.pattern=xterm -e "{path}{cmd}" -cd "{build.path}" -tui -b {upload.speed} {upload.verbose} -ex "set debug remote 0" -ex "set target-async off" -ex "set remotetimeout 60" -ex "set mem inaccessible-by-default off" -ex "set confirm off" -ex "set height 0" -ex "target extended-remote {serial.port}" -ex "monitor swdp_scan" -ex "attach 1" -ex "x/wx 0x8000004" -ex "monitor erase_mass" -ex "x/wx 0x8000004" -ex "file {build.project_name}.elf" -ex "load" -ex "x/wx 0x08000004" -ex "tbreak start_c" -ex "run" ...

Дазва
Сб 3 октября 2015 г., 6:12
Привет,
У меня есть Maple Mini с помощью Maple-Ide. Я не вижу библиотек для Hardwire? Любая помощь, чтобы настроить их? Я скачал либмапл-мастера, но не уверен, где скопировать файлы, чтобы работать с Maple IDE?

Rogerclark
Сб 3 октября 2015 г. 6:19
Файлы в репо

Смотрите этот пример

https: // github.com/rogerclarkmelbourne/ ... _hwire.Ино

STM32DUINO Community Board от Robotdyn?

$ 5 Raspberry Pi Zero