I2C

блоки для работы с устройствами по шине I2C

Пользовательские блоки для коммкникации и связи GSM, GPRS, IR, Bluetooth и другие
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

I2C

#1

Сообщение pan » 02.03.2018{, 10:04}

набор блоков для работы с устройствами по "квадратной" шине

работают с физической шиной.


блоки записи

Изображение
----------------------------------------------------------------------------------------------------------

блоки чтения

Изображение

---------------------------------------------------------------------------------------------------------
с буквой а: Изображение
в блоке задается адрес устройства (1) и номер регистра (2) в который нужно записать наши значения (3).
запись происходит при каждом изменении значения на входе "data"
Изображение

с буквой b: Изображение
настройка аналогична предыдущему, только запись происходит при подаче "1" на вход "write". вход работает по фронту сигнала.

с буквой с: Изображение
все значения вынесены на входы. меняя значения на входах можно обращаться к разным устройствам и записывать в разные регистры.
___________________________________________________________________________________
на всех блоках имеется выход error значения на нем могут быть следующие
0: передача успешна
1: объем данных слишком велик для буфера передачи
2: получен NACK при передаче адреса
3: получен NACK при передаче данных
4: другая ошибка
если на нем "0" то все в порядке. использовать в программе этот выход не обязательно.
____________________________________________________________________________________
как это выглядитПоказать
Изображение
адреса устройств и регистров задаются в десятичной системе.
если адрес указан шестнадцатиричный , конвертируем в десятичный.
например в калькуляторе.Показать
Изображение

например в даташите адрес 0х2С соответствует 44 десятичному
------------------------------------------------------------------------------------------
блоки чтения настраиваются аналогично блокам записи.
------------------------------------------------------------------------------------------
Вложения
I2C_0.2.ubl
(129.32 КБ) 436 скачиваний
I2C_0.1.ubl
(76.59 КБ) 403 скачивания
Последний раз редактировалось pan 13.03.2018{, 14:58}, всего редактировалось 3 раза.
Причина: обление блоков

Аватара пользователя
Oleg_UA
Сержант
Сообщения: 115
Зарегистрирован: 07.01.2017{, 23:30}
Репутация: 6
Откуда: Днепр
Имя: Олег

I2C

#2

Сообщение Oleg_UA » 12.03.2018{, 23:27}

pan писал(а):
12.03.2018{, 20:11}
это хоть работает? или как
Этот способ работает на 100%.
У меня так сделан обмен с расширителями портов МСР23017, если сравнивать с штатным блоком FLProg то так работает в 15 раз быстрее.
Можно ещё добавить выход результата связи на случай отвала модуля " error_code=Wire.endTransmission(); " большинство пользователей скорее всего используют "шилды" а не пайку.

В блоках чтения повторная отправка зачем?
Wire.requestFrom(Addr, 1); if (Wire.available() == 1) { data = Wire.read(); } Wire.endTransmission();

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

I2C

#3

Сообщение pan » 12.03.2018{, 23:30}

это разве не завершение обмена?

Аватара пользователя
Oleg_UA
Сержант
Сообщения: 115
Зарегистрирован: 07.01.2017{, 23:30}
Репутация: 6
Откуда: Днепр
Имя: Олег

I2C

#4

Сообщение Oleg_UA » 12.03.2018{, 23:36}

pan писал(а):
12.03.2018{, 23:30}
это разве не завершение обмена?
Функция начала обмена " beginTransmittion(). " у Вас уже завершена.
Описание Wire.endTransmission()

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

I2C

#5

Сообщение pan » 12.03.2018{, 23:59}

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

Отправлено спустя 6 минут 37 секунд:
завтра переделаю и добавлю выход ошибки.

Аватара пользователя
Oleg_UA
Сержант
Сообщения: 115
Зарегистрирован: 07.01.2017{, 23:30}
Репутация: 6
Откуда: Днепр
Имя: Олег

I2C

#6

Сообщение Oleg_UA » 13.03.2018{, 00:09}

:friends: Главное идея и желание, да ещё и с таким шикарным оформлением. :like:

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

I2C

#7

Сообщение pan » 13.03.2018{, 14:53}

обновлены блоки I2C_0.2. добавлен выход номера ошибки , если вдруг таковая произойдет в процессе передачи данных

Vasiliy
Рядовой
Сообщения: 15
Зарегистрирован: 28.03.2018{, 10:06}
Репутация: 0
Откуда: Дрогобич
Имя: Василій

I2C

#8

Сообщение Vasiliy » 17.04.2018{, 14:22}

Народ привет! Мой мозг просит Вашего совета: соединяю нано и про мини, указываю одинаковый Addr, одинаковый Reg и в errorе на приеме весит 2. Отправляю байтец с копма уартом по позитиву в нано, блоком wr_ а в i2c, принимаю pro mini блоком re_ b c частотой 10 мс. на Этом остановился, до этого как только не отправлял и принимал. двойка весит на LCD по i2c с pro mini стандартным блоком и адресом 3F.

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

I2C

#9

Сообщение pan » 17.04.2018{, 14:42}

а кто сказал что эти блоки для общения между ардуинами?
это блоки для работы с СЛЕЙВами I2C
и в блоках указывается адрес СЛЕЙВа, а не одинаковые адреса...
может для начала почитаете о шине I2C

Vasiliy
Рядовой
Сообщения: 15
Зарегистрирован: 28.03.2018{, 10:06}
Репутация: 0
Откуда: Дрогобич
Имя: Василій

I2C

#10

Сообщение Vasiliy » 17.04.2018{, 17:50}

Так я и читал, что с і2с можна связывать контролеры между собой. По типу CAN шины, тут вроде и протокол похожий, или я ошибаюся? Я в +1 Guide работал крепко, фл вооще супер - учить ничего не надо. А вот связать ардуишки между собой, так то ж дело прорыва вообще. Я в Си подобных языках после графики никак. Не пинай, давай луше CAN open организуем...

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

I2C

#11

Сообщение pan » 17.04.2018{, 19:15}

Vasiliy писал(а):
17.04.2018{, 17:50}
с і2с можна связывать контролеры между собой
можно. но эти блоки для МАСТЕРА
Vasiliy писал(а):
17.04.2018{, 17:50}
давай луше CAN open организуем
можете здесь http://forum.flprog.ru/viewforum.php?f=112 создать тему

ZeRG
Рядовой
Сообщения: 52
Зарегистрирован: 28.05.2017{, 00:28}
Репутация: 0

I2C

#12

Сообщение ZeRG » 29.04.2018{, 12:23}

не пойму как ваши блоки работают вроде все сделал правильно должно работать а не работает
Вложения
приемник.flp
(116.92 КБ) 191 скачивание
передатчик.flp
(89.31 КБ) 155 скачиваний

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

I2C

#13

Сообщение pan » 29.04.2018{, 20:44}

ZeRG, ну какой нафиг приемник/передатчик,это блоки для работы с СЛЕЙВАМИ

ZeRG
Рядовой
Сообщения: 52
Зарегистрирован: 28.05.2017{, 00:28}
Репутация: 0

I2C

#14

Сообщение ZeRG » 29.04.2018{, 23:01}

pan писал(а):
29.04.2018{, 20:44}
ZeRG, ну какой нафиг приемник/передатчик,это блоки для работы с СЛЕЙВАМИ
ну пускай будет мастер и слейф

Отправлено спустя 34 секунды:
дело в другом что не работает

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

I2C

#15

Сообщение pan » 29.04.2018{, 23:06}

и не будет. и не должно.
блоки только для мастера

alexcccp
Рядовой
Сообщения: 37
Зарегистрирован: 16.01.2018{, 18:53}
Репутация: 0

I2C

#16

Сообщение alexcccp » 11.12.2020{, 01:24}

Подскажите пожалуйста на примере МСР23017
как считать или записать данные

например: я хочу прочитать значения GPB0 МСР23017 на адресе 0x20 (32 насколько я понимаю) а вот GPB0 это что за адрес
Смотрю даташит и откровенно говоря не понимаю где описан GPB0 в виде его адреса :smile37:

по большему счету мне нужна проверка МСР23017 что она жива, а желательно получить данные с пина для записи - в каком он состоянии.
ну и понять как управлять на прямую МСР23017 будет отлично.

alexcccp
Рядовой
Сообщения: 37
Зарегистрирован: 16.01.2018{, 18:53}
Репутация: 0

I2C

#17

Сообщение alexcccp » 11.12.2020{, 19:30}

av, я так понимаю Вы говорите про стандартный блок.
Я же имею в виду пользовательский который здесь прикрепил pan: I2C,
23017 работает на данном интерфейсе. Стандартный блок меня не устраивает.

также Oleg_UA, пишет
Oleg_UA писал(а):
12.03.2018{, 23:27}
У меня так сделан обмен с расширителями портов МСР23017, если сравнивать с штатным блоком FLProg то так работает в 15 раз
мне бы просто понять как обратится к самой микросхеме из прикрепленного блока.

или я что то не понимаю

Gusel
Рядовой
Сообщения: 1
Зарегистрирован: 31.05.2022{, 10:39}
Репутация: 0
Имя: Артём

I2C

#18

Сообщение Gusel » 30.11.2023{, 09:47}

Добрый день всем!
А как сделать, чтобы вторая нано стала слейвом?
В программировании новичок, Использую FLprog. В коде практически не шарю. Заранее благодарен всем откликнувшимся. Ссылкам тож буду рад.

Ответить

Вернуться в «Коммуникация и связь»