| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| I2C адреси конфликт http://mcu-bg.com/mcu_site/viewtopic.php?f=2&t=16920 |
Страница 1 от 2 |
| Автор: | sukhoi [ Чет Дек 26, 2019 11:32 am ] |
| Заглавие: | I2C адреси конфликт |
Здравейте, имам няколко въпроса относно I2C. Всъщност може би е малко софтуерен въпроса.. Устройството, което проектирам е с възможност до 8 дивайса на една линия. Потребителя ръчно трябва да си задава адрес чрез ключета A2, A1, A0. През web с I2C scanner функцията ще се показват наличните активни участника. Въпроса е ако потребителя сгреши и настрои два еднакви адреса.... Може ли да се хване такъв конфликт с възможностите на I2C протокола? Поне да се изкара warning " капут, провери какви адреси си задал" Ако се закачат едно по едно, може да се направи проверка за заети и свободни адреси, но ако няколко наведнъж се закачат май няма начин да се направи проверка Чиповете ще са mcp23017 |
|
| Автор: | ToHu [ Чет Дек 26, 2019 12:35 pm ] |
| Заглавие: | Re: I2C адреси конфликт |
Няма ли колижън флаг? |
|
| Автор: | sukhoi [ Чет Дек 26, 2019 12:40 pm ] |
| Заглавие: | Re: I2C адреси конфликт |
този чип 23017 сякаш няма.. или ти питаш за Master ? Мастъра ще е esp32. Трябва да видя там |
|
| Автор: | Н'бабане Гт'муан'га [ Чет Дек 26, 2019 12:59 pm ] |
| Заглавие: | Re: I2C адреси конфликт |
Най-вероятно ще трябва да го направиш хардуерно. Единия вариант е всичките адресни битове да ти отиват към есп-то, обаче предвид на това че броя I/O портове му е най-слабата част, се съмнявам че ще имаш толкова излишни портове. Другия вариант е да сложиш някакви цифрови компаратори, примерно 74HC85 и тогава ще ти трябва само една линия за изхода '=. Обаче понеже имаш много истройства, това май няма да е опция. Може да използваш някакъв I2C бъс мултиплексор, примерно PCA9548A. Тогава ти ще си избираш на кого да говориш и ключетата няма да имат значение. Или пък може вместо I2C да ползваш SPI варианта 23S17 и да ги навържеш в дейзичейн. Тогава също няма да имаш никакви колизии |
|
| Автор: | syscop [ Чет Дек 26, 2019 2:19 pm ] |
| Заглавие: | Re: I2C адреси конфликт |
Не можеш ли ти да зададеш адресите? Потребителят само слага устройство и то получава някакъв предварително известен адрес. |
|
| Автор: | gicho [ Чет Дек 26, 2019 4:46 pm ] |
| Заглавие: | Re: I2C адреси конфликт |
Доколкото разбирам това са допълнителни модули, които си ги инсталира потребителя - има си главния контролер и си поръчва още 3 еди какви си; закача ги на бъса и мастъра трябва да сработи. Нито може да опроводи адресните пинове, нито може да прави друга конфигурация. И2Ц-то май не е мислено в тази посока - което означава че единия път е да смениш бъса, макар че едва ли те устройва тоя отговор. Но все пак, ако наистина искаш да решиш тоя проблем се налага. Ако "придадената стойност" от тази дуракоустойчивост е достатъчна би могъл да смениш бъса, и евентуално да наслагаш по едно контролерче на всеки нод. |
|
| Автор: | sukhoi [ Чет Дек 26, 2019 6:11 pm ] | |||||||||
| Заглавие: | Re: I2C адреси конфликт | |||||||||
Да, точно. Е, клиента е съгласен с тази особеност, само да не променяме нищо по схемата пък и ще е open source. Да не задълбавам толкова Просто се чудех дали няма някакъв workaround на тази ситуация. Ако евентуално опроводя линиите паралелно и на втория I2C мастър порт на есп32, дали може да се направи с двата порта някаква проверка..не знам. Поръчах 8 модула с тези i2c разширители, като дойдат от Хонг Конг, ще тестваме да видим на живо реално дали може да се направи нещо, ако не така ще е .. пс: ама явно наистина нищо не може да се направи софтуерно, допълнителен хардуер ще трябва |
||||||||||
| Автор: | ig_ivanov [ Чет Дек 26, 2019 6:29 pm ] |
| Заглавие: | Re: I2C адреси конфликт |
Може да се подходи и малко логистично. Примерно: клиент си поръчва устройство с три девайса. Пращаш му едно устройство с девайси 1, 2, 3- където на девайс 1 е присвоен адрес 1, на девайс 2- адрес 2, девайс 3- адрес три. Ако си поръча допълнителен девайс- пращаш му девайс 4 с адрес 4. Ако се повреди девайс- пращаш му същия номер. |
|
| Автор: | sukhoi [ Чет Дек 26, 2019 6:36 pm ] |
| Заглавие: | Re: I2C адреси конфликт |
С 3 дип ключета се задават адресите на всяко устройство. Тоест всеки може да си ги мърда както иска, няма да е фабрично да се задава. А бе крайния потребител да си следи това... В опътването ще пише "А ти провери ли за дублиращи се адреси?" или " Добавяй нови устройства едно по едно, зада може да се провери за конфликт" |
|
| Автор: | TheWizard [ Чет Дек 26, 2019 6:37 pm ] |
| Заглавие: | Re: I2C адреси конфликт |
ако клиента е наясно що е то I2C е достатъчно да си прочете документацията .... все пак го караш да цъка някакви ключета ... с маникюр |
|
| Автор: | Bai Ui [ Чет Дек 26, 2019 10:27 pm ] |
| Заглавие: | Re: I2C адреси конфликт |
Направи така че адреса да може да се задава софтуерно, всички устройства да имат адрес по подразбиране 255 или какъвто ти е там максималния и всяко устройство да разрешава I2C шината към следващото (с рид реле или електронен ключ по усмотрение) когато му се промени адреса. Сценарият е следния: Закачаш всички устрйства едно за друго, но само най-близкото комуникира с контролера т.к. I2C шината е прекъсната към останалите. Контролера му задава адрес 1, след което първото устройство разрешава шината нататък. Контролера се обръща към следващото устройство с адреса по подразбиране (255 или максималния) и му задава адрес 2 след което второто устройство на свой ред разрешава шината към 3-тото устройсто и т.н. Ако клиента иска да си промени номерацията може да размени устройствата по веригата. |
|
| Автор: | nik [ Пет Дек 27, 2019 2:58 am ] |
| Заглавие: | Re: I2C адреси конфликт |
как ще се свързват тия 8 устройства? конектори? гнезда? не може ли да има 3 допълнителни пина, и всяко гнездо да си има собствен адрес, т.е. който и слейв модул да се включи в гнездо 3 винаги ще има и адрес 3, пък мастъра да адресира по гнезда |
|
| Автор: | kalata23 [ Вто Яну 07, 2020 12:59 am ] | |||||||||
| Заглавие: | Re: I2C адреси конфликт | |||||||||
Най-общо казано, ще стане мазало. Ще стане като вица: Мъж се прибира пребит при жена си. Жена му го пита: - Какво се е случило? Добре ли си? - Ами какво да се случи.. днеска викам на колегата "Иване, хвърли ми ключ 24" - И какво стана? - Еми, какво... не знаеш колко Ивановци има в завода. Та същата работа и с това, за което питаш. Не може ли да реализираш тия модули така: Като включиш модула, чака I2C линиите да се освободят и тогава става мастър. Почва да проверява всички адреси, дали някой ще му отговори. Първият свободен адрес, на който всички мълчат, си го харесва и после става slave. Така и другите модули. Ще стане бавно setup-а, ама пък няма да има колизиия. Да не говорим, че така вместо 8 устройства, ще можеш да свържеш 255 (ако са 8-битови адресите). Даже клиентите ти няма да си хабят маникюра да цъкат ключета или да цъкат джъмпери. |
||||||||||
| Автор: | slav4o.com [ Вто Яну 07, 2020 2:03 am ] |
| Заглавие: | Re: I2C адреси конфликт |
Да ама трябва някакъв допълнителен микроконтролер който да помни настройките. Всъщност може ако се добавят едно по едно устройствата адресите да се сетват през GP изходите. Проблема е, че при ресет системата ще забие, защото всички slave-ове ще са с еднакъв първоначален адрес. За да се избегне това може да се навържат верично, всеки следващ контролер MCP23017 да се ресетва също софтуерно през GP изхода на предходното. Това обаче може да не съответства на топологията... |
|
| Автор: | bongo_x2 [ Вто Яну 07, 2020 11:44 am ] |
| Заглавие: | Re: I2C адреси конфликт |
Аз не разбира, ама си е въпрос на топология. Най-дуракоустойчивото го казаха: буксата да определя адреса. Като не става - опростяваш нещата за потребителя. Правиш му табличка, според която ключетата на устройството в букса No2 трябва да са "Of-On-Of" и точка. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|