Связь по интерфейсу I2C

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

Связь по интерфейсу I2C

Сообщение pan »

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

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


блоки записи

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

блоки чтения

Изображение

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

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

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

[spoiler=как это выглядит] Изображение [/spoiler]

адреса устройств и регистров задаются в десятичной системе.
если адрес указан шестнадцатиричный , конвертируем в десятичный.
[spoiler=например в калькуляторе. ]Изображение

например в даташите адрес 0х2С соответствует 44 десятичному[/spoiler]
------------------------------------------------------------------------------------------
блоки чтения настраиваются аналогично блокам записи.
------------------------------------------------------------------------------------------
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось pan 13 мар 2018, 14:58, всего редактировалось 3 раза.
Аватара пользователя
Oleg_UA
Сержант
Сообщения: 115
Зарегистрирован: 07 янв 2017, 23:30
Откуда: Днепр
Имя: Олег

I2C

Сообщение Oleg_UA »

pan писал(а): 12 мар 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 апр 2017, 11:57
Имя: noname

I2C

Сообщение pan »

это разве не завершение обмена?
Аватара пользователя
Oleg_UA
Сержант
Сообщения: 115
Зарегистрирован: 07 янв 2017, 23:30
Откуда: Днепр
Имя: Олег

I2C

Сообщение Oleg_UA »

pan писал(а): 12 мар 2018, 23:30это разве не завершение обмена?
Функция начала обмена " beginTransmittion(). " у Вас уже завершена.
Описание Wire.endTransmission()
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

I2C

Сообщение pan »

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

Отправлено спустя 6 минут 37 секунд:
завтра переделаю и добавлю выход ошибки.
Аватара пользователя
Oleg_UA
Сержант
Сообщения: 115
Зарегистрирован: 07 янв 2017, 23:30
Откуда: Днепр
Имя: Олег

I2C

Сообщение Oleg_UA »

:friends: Главное идея и желание, да ещё и с таким шикарным оформлением. :like:
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

I2C

Сообщение pan »

обновлены блоки I2C_0.2. добавлен выход номера ошибки , если вдруг таковая произойдет в процессе передачи данных
Vasiliy
Рядовой
Сообщения: 25
Зарегистрирован: 28 мар 2018, 10:06
Откуда: Дрогобич
Имя: Василій
Благодарил (а): 9 раз

I2C

Сообщение Vasiliy »

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

I2C

Сообщение pan »

а кто сказал что эти блоки для общения между ардуинами?
это блоки для работы с СЛЕЙВами I2C
и в блоках указывается адрес СЛЕЙВа, а не одинаковые адреса...
может для начала почитаете о шине I2C
Vasiliy
Рядовой
Сообщения: 25
Зарегистрирован: 28 мар 2018, 10:06
Откуда: Дрогобич
Имя: Василій
Благодарил (а): 9 раз

I2C

Сообщение Vasiliy »

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

I2C

Сообщение pan »

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

I2C

Сообщение ZeRG »

не пойму как ваши блоки работают вроде все сделал правильно должно работать а не работает
У вас нет необходимых прав для просмотра вложений в этом сообщении.
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

I2C

Сообщение pan »

[ref]ZeRG[/ref], ну какой нафиг приемник/передатчик,это блоки для работы с СЛЕЙВАМИ
ZeRG
Рядовой
Сообщения: 52
Зарегистрирован: 28 май 2017, 00:28

I2C

Сообщение ZeRG »

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

Отправлено спустя 34 секунды:
дело в другом что не работает
pan
Полковник
Сообщения: 2860
Зарегистрирован: 13 апр 2017, 11:57
Имя: noname

I2C

Сообщение pan »

и не будет. и не должно.
блоки только для мастера
alexcccp
Рядовой
Сообщения: 39
Зарегистрирован: 16 янв 2018, 18:53

I2C

Сообщение alexcccp »

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

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

по большему счету мне нужна проверка МСР23017 что она жива, а желательно получить данные с пина для записи - в каком он состоянии.
ну и понять как управлять на прямую МСР23017 будет отлично.
alexcccp
Рядовой
Сообщения: 39
Зарегистрирован: 16 янв 2018, 18:53

I2C

Сообщение alexcccp »

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

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

или я что то не понимаю
Gusel
Рядовой
Сообщения: 1
Зарегистрирован: 31 май 2022, 10:39
Имя: Артём

I2C

Сообщение Gusel »

Добрый день всем!
А как сделать, чтобы вторая нано стала слейвом?
В программировании новичок, Использую FLprog. В коде практически не шарю. Заранее благодарен всем откликнувшимся. Ссылкам тож буду рад.
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

Re: Связь по интерфейсу I2C

Сообщение aidar_i »

Сюда выложу пользовательские блоки для связи по I2c на профессиональном редакторе. Данными блоками можно передавать от 1 до 4 байт.
Примеры:
I2C.rar
Блок:
CONNECTION_VIA_I2C_(Code_-_Professional).ubi
У вас нет необходимых прав для просмотра вложений в этом сообщении.
aidar_i
Полковник
Сообщения: 3357
Зарегистрирован: 24 дек 2016, 16:55
Откуда: Уфа
Имя: Айдар
Благодарил (а): 13 раз
Поблагодарили: 100 раз
Контактная информация:

Re: Связь по интерфейсу I2C

Сообщение aidar_i »

С использованием штатных блоков так же можно передавать и символы и буквы.
Передача символов 4 byte.flp
Прием символов 4 byte.flp
Коды символов можно сразу вставлять на вход master.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ответить

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

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

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