I2C примеры

ZMEMW16
Чт 27 апреля 2017 г. 11:05
Сканер I2C
Код - это сканер Discovery с их конкретным материалом i2s и т. Д
У меня есть TMP102 и 128x64 0.98 I2C OLED SSD1306, с подтягиванием 4K7 и 3V3 подключенными
это serialinterface #defined как serialusb
... 0 Unknown error at address 0x3B 0 I2C device found at address 0x3C ! 0 Unknown error at address 0x3D ... ... 0 Unknown error at address 0x47 0 I2C device found at address 0x48 ! 0 Unknown error at address 0x49 ... 0 Unknown error at address 0x7E

ZMEMW16
Чт 27 апреля 2017 12:47
Глядя в проволоку.CPP, возвращаемые значения 0 ok 1 timeout 4 default for other

Даниэфф
Чт 27 апреля 2017 12:52
ZMEMW16 написал:Сканер I2C
Код - это сканер Discovery с их конкретным материалом i2s и т. Д
У меня есть TMP102 и 128x64 0.98 I2C OLED SSD1306, с подтягиванием 4K7 и 3V3 подключенными
это serialinterface #defined как serialusb
... 0 Unknown error at address 0x3B 0 I2C device found at address 0x3C ! 0 Unknown error at address 0x3D ... ... 0 Unknown error at address 0x47 0 I2C device found at address 0x48 ! 0 Unknown error at address 0x49 ... 0 Unknown error at address 0x7E

Chismicro
Чт 27 апреля 2017 г. 16:28
На открытии STM32F4 он показывает то же поведение.
"Неизвестная ошибка на адрес 0x.."Когда нет устройства, отвечающего.

ZMEMW16
Чт 27 апреля 2017 г., 17:17
но 124 раза? Насколько я помню
Стивен

Chismicro
Пт 28 апреля 2017 г. 8:05 утра
но 124 раза? Насколько я помню
Стивен
STM322GENERIERIERER пример изначально из этого Сайт Arduino и модифицируется для STM.

Хм .. Поле адреса I2C составляет 7 битов Ведьма дает использование 128 адресов. Я знаю, не все можно использовать.
0 Неизвестная ошибка по адресу 0x47 Вероятно, драйвер I2C работает по-разному по сравнению с реализацией Arduino-Uno и возвращает разные сообщения о статусе ?

ZMEMW16
Пт 28 апреля 2017 г. 10:04
Аполы, я вернулся в свои дни AVR, а затем я использовал Todbot.
Istr Try 3 или 4, прежде чем найти тот, который вообще работал на STM, даже тогда это не было и жестким, и мягким i2c.
кстати, это выходи за то, что не помнит, что : D

Кажется, есть 3 ответа из рутины HAL
0. ОК - определенно присутствует устройство
4. ничего там
1. Тайм -аут - но что же тогда, что -то там

Я могу понять, что сообщает первое и последнее, но зачем ничего не сообщать?

Стивен

Chismicro
Пт 28 апреля 2017 г. 13:03
А ARDUINO I2C спецификация API Говорит для EndTransmission () Возврат

байт, который указывает состояние передачи:

0: успех
1: Данные слишком долго, чтобы вписаться в буфер передачи
2: Полученный NACK при передаче адреса
3: Полученный NACK при передаче данных
4: Другая ошибка
Таким образом, мы, вероятно, должны изменить текстовое сообщение (в «Другую ошибку») в программе сканера I2C.

Пито
Пт 28 апреля 2017 г. 14:43
С I2C2 на данных PB10 CLK и PB11. // -------------------------------------- // i2c_scanner .. #include TwoWire Wire2(I2C2, PB11, PB10); #define Wire Wire2 #define Serial SerialUART1 void setup() .. else if (error==4) { //Serial.print("Unknow error at address 0x"); //if (address<16) // Serial.print("0"); //Serial.println(address,HEX); } } ..

Пито
Пт 28 апреля 2017 г. 22:20
Я потратил 5H, связываясь с библиотекой DS3232RTC, мне нравится :)
Проблема следующая:
Как построить демонстрацию, прочитать время от DS3231/2, при использовании i2C2 (не по умолчанию I2C1).
При игре с простыми вещами, такими как выше, нет, но это куриное яичное примечание (или Catch22 One)..

TwoWire Wire2 (i2c2, Pina, Pinb); Создает новый экземплярный Wire2 на втором контроллере I2C.
Попробовал с #Define Wire2 Wire, но после сотней различных комбинаций я все еще получаю ошибку с переосмыслением провода..

Но как организовать код, такой как он компилирует с библиотекой DS3232RTC????
PS: с i2c1 и с помощью провода по умолчанию он хорошо компилируется.. (За исключением того, что вы должны настроить для нашего __stm32f4__ и добавить определение макроса _bv).. 22:24:50 28/4/2017 22:24:51 28/4/2017

Даниэфф
SAT 29 апреля 2017 г., 3:21
Для существующих библиотек, которые используют твердый провод: Wire.stm32SetInstance(I2Cx); Wire.stm32SetSDA(sda); Wire.stm32SetSCL(scl); rtc....() ...

Пито
SAT 29 апреля 2017 г. 5:02
Хорошо, спасибо, это работает :)

К вашему сведению - расширенная библиотека I2C, которая поддерживает Master/Slab в немедленном/прерывании/DMA в режиме - для Teensy CM4, однако.. https: // github.com/nox771/i2c_t3

Chismicro
Сб, 1 июля 2017 г. 6:39
Я только что столкнулся с проблемой:

Как я могу использовать 2 интерфейсы i2c?

Эн.глин. F7 Disco имеет внутреннюю шину I2C для прикосновения, которая используется в форме
Wire.stm32SetInstance(I2C3); Wire.stm32SetSDA(PH8); Wire.stm32SetSCL(PH7); Wire.begin();

Даниэфф
SAT 1 июля 2017 г. 7:04
TwoWire Wire2(I2C2, sda2, scl2); // check chip documentation and board schematic TwoWire Wire3(I2C3, sda3, scl3); // check chip documentation and board schematic TwoWire Wire4(I2C4, sda4, scl4); // check chip documentation and board schematic

ZMEMW16
Сб, 1 июля 2017 г. 12:46
как это делается с Хэл ?
Я подозреваю, что у них будут полностью отдельные структуры I2C.

Для нас, почему бы не сделать это так же, как и множественное использование SPI.

Стивен

Chismicro
Солнце 2 июля 2017 г. 5:06 утра
Спасибо за ответ : D

«Проблема в том, что каждая библиотека написана с предположением, что есть только один i2c, и она называется провод.
Отказ от ответственности: я на самом деле не пытался использовать несколько сразу."

Для меня кажется совершенно ясным, как справиться с этим: на платах, которые имеют соединительный разъем Arduino, I2C, который подключен к этому разъему, должно иметь имя «Провод».
Имена других должны основываться на номере интерфейса.

Эн.глин.

Провод1
Wire2 ==> Провод на этой доске Axampel
Провод3

Криссб
Чт 20 июля 2017 г. 12:32
Кто -нибудь сделал какое -либо тестирование на рабовластной стороне I2C?

Я пытаюсь использовать эту функциональность на F0, и кажется, что по адресу Match Sck удерживается на неопределенный срок. Это предполагаемое поведение, и если да, то есть что -то, что я должен сделать в обратном вызове, чтобы выпустить автобус?

Простой пример с не более чем инициализацией библиотеки проводов в качестве подчинения I2C показывает это поведение для меня:
#include "Wire.h" void setup() { Wire.begin(30); } void loop() { }

Даниэфф
Чт 20 июля 2017 г. 15:28
Попробуйте ответить на запрос
void receive(int bytes) { // Received bytes } void request() { uint8_t response[1] = {9}; Wire.write(response, sizeof(response)); // responding } void setup() { Wire.onReceive(receive); Wire.onRequest(request); Wire.begin(30); }

Каниджа
Ср 15 ноября 2017 г. 13:49
Привет

С изменениями (26 сентября) к проводе.CPP он не будет составлять примеры i2c для любой платы (кроме F0, вероятно,):
https: // github.com/danieleff/stm32gener ... ярость.CPP#L7

Вы не можете проверить #ifndef i2c1_ev_irqn, потому что i2c1_ev_irqn enum not #define.

То же самое для #ifndef i2c2_ev_irqn.

Может изменить это на: #if defined(STM32F0) #define I2C1_EV_IRQn I2C1_IRQn #define I2C2_EV_IRQn I2C1_IRQn #endif

Пять
Солнце 28 января 2018 г., 18:12
Sry за вопрос Noob, но откуда и как я могу изменить скорость i2c?

Проволока.начинать(); по умолчанию 100 кГц, я хочу 400 кГц?

Пять
Солнце 28 января 2018 г. 18:25
ОК, выяснил : D

Проволока.начинать();
Проволока.SetClock (400000);

Проблема заключалась в том, что в документах есть SetClock (), а не SetClock ()

ZMEMW16
Солнце 28 января 2018 г. 18:47
Я думаю, что вы получите больший успех, открывая новую тему, расширенный поиск «I2C Clock Speed» дает 64 упоминания,
Прокрутите немного вниз

Стивен