Jump to content
Вадим Куманов

I2C, виснет МК при отключения питания от slave`вов

Recommended Posts

Вообщем проблема в том что зависает мастер когда нет питания хотя бы на одном слейве.

Устройства собраны так что включаються отдельно от мастера. На шине висят OLED 0.96", Nano - слейвы, Mega 2560 - мастер.

дисплей включаеться вместе с мегой тут проблем нет, но нано включаеться отдельно такая конструкция, и вот пока ее не включить то МК зависает, если все включаеться одновременно то и работает без проблем, но когда в этот момент Нано отключить то МК опять виснет. проблема именно в том что слейвы сидят на шине и при отсутствие на них питания все виснет. Подтягивающие резисторы стоят. сторожевой таймер не поможет так как он будет ресетить МК пока на слейве не будет питания. 

Share this post


Link to post
Share on other sites
Posted (edited)

Если у вас цикл типа while (flag); а вам нужно просто игнорить i2c когда нет питания, измените цикл на

i2c_delay = 1000;
while(flag) {
  if (i2c_delay-- == 0)
    return ERROR;
}

ну или типа того, цифра примерная, считайте для таймингов максимум сколько может висеть

я себе делал макрос

#define I2C_DELAY 600
#define I2C_WAIT_FLAG(i2c, f, s, err) _t = I2C_DELAY; while (I2C_GetFlagStatus(i2c, f) == s) { if (!(--_t)) return err; }

и тогда в коде

I2C_WAIT_FLAG(AM_I2C, I2C_ISR_TXE, RESET, ERROR);

 

Edited by DrobyshevAlex

Share this post


Link to post
Share on other sites

@DrobyshevAlex

дело в том что когда зависает то не исполняет не одну строчку кода, да и игнорировать шину немогу потому что нужно выводить информацию на LCD а он тоже на i2c сидит

Share this post


Link to post
Share on other sites

Металл-композит как альтернатива ферриту: дроссели Panasonic семейства ETQP

Современные электронные устройства требуют все более компактных и эффективных компонентов. Новые металл-композитные дроссели обладают рядом преимуществ перед дросселями с ферритовым сердечником. Они не имеют ярко выраженного насыщения, обладают отличными частотными свойствами и способны работать при температурах до 150°C и выше. Все это делает их альтернативой стандартным дросселям с ферритовым сердечником в широком спектре автомобильных и промышленных приложений.

Подробнее

2 минуты назад, Вадим Куманов сказал:

дело в том что когда зависает то не исполняет не одну строчку кода

ну так это от кода зависит. я вам привел пример, если в коде (а я его не вижу и не знаю как там сделано) ожидание флага в бесконечном цикле, то вот на той строке и виснет. я так понимаю это на ардуино у вас? я в ардуино не писал, там видимо обертка есть и вряд ли там будет обертка для работы с i2c сделана так что бы висло...

Кстати, вы уверены что именно виснет мк? может просто дисплей отваливается а мк работает? или вы прям проверяли что мк висит?

Share this post


Link to post
Share on other sites

@DrobyshevAlex

да на ардуино, флагов нет никаких все на коротких функциях, чтение запись.

но думаю проблему это програмно не решить, придеться тянуть питание от меги что бы все одновременно включалось

Share this post


Link to post
Share on other sites
                     

Новые литиевые ХИТы Fanso работают даже при +150ºС!

Когда приходится учитывать работу в экстремальных условиях, к выбору электронных компонентов подходишь с особой тщательностью. Высокие температуры, большие перепады давления, труднодоступность – все это требует специальной продукции. Склад КОМПЭЛ пополнился новыми литиевыми ХИТами Fanso, стабильно работающими даже при температуре до 150 ºС. Батарейки имеют номинальное напряжение 3,6 В, обладают ёмкостью от 700 до 14000 мАч, работоспособны в широком температурном диапазоне -20…150ºС и имеют низкий саморазряд (не более 3% в год в нормальных условиях хранения).

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

Проверьте где стоят подтягивающие резисторы, они должны стоять на мастере.

Share this post


Link to post
Share on other sites

Я не знаю что такое Nano слейвы, и как они подключены.

По идеи если нет питания может они прижимают линию к нулю, может каждый из них подключить через транзистор? чтобы если нет питания не было и прижатия к нулю

А вообще странная реализация либы Wire у ардуино если она вешает мк.

Share this post


Link to post
Share on other sites

@snn_krs

да они на нем

@DrobyshevAlex

Nano - это разновидность ардуино, слейв ну это слейв на i2c

через транзисторы не порешает проблему, даже если разьединить gnd и оставить только два scl и sda подключеными то все равно виснет.

я так понимаю в самой библиотеке так написано что пока не дождешься ответа то висеть в цикле, очень похоже на это

Share this post


Link to post
Share on other sites
5 минут назад, Вадим Куманов сказал:

слейв ну это слейв на i2c

Это я понял)) я имел ввиду не знаю что такое Nano.

6 минут назад, Вадим Куманов сказал:

пока не дождешься ответа

То есть если отключить Nano и не обращаться к нему а работать только с дисплеем, тогда все работает? То есть Nano не давит линию?

Вы обращаетесь именно к отключенной Nano и только тогда виснет?

Share this post


Link to post
Share on other sites

@DrobyshevAlex

Цитата

 

То есть если отключить Nano и не обращаться к нему а работать только с дисплеем, тогда все работает? То есть Nano не давит линию?

Вы обращаетесь именно к отключенной Nano и только тогда виснет?

 

да именно так, если Нано не висит вообще на линии но к ней обращаться то ничего не произойдет и МК пойдет себе дальше, я эксперементировал - отключал питание от экранчика а шину i2c не отключал и мк тоже виснет

Share this post


Link to post
Share on other sites

I2C может зависнуть только в том случае, если одна или обе линии сядут на землю. 

Мастеру до лампочки есть слейвы или нет - он просто не получит подтверждение от слейва.

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

 


Мыши кололись, плакали, но продолжали жрать кактус.

Share this post


Link to post
Share on other sites

Join the conversation

You are posting as a guest. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Сообщения

    • Ну, значит это перемаркированные "не Logic", или отбраковку где-то взяли.
    • А мне нормального Япончика, пожалуйста!  Но вообще-то Алекс модельки не раздаёт.  Хотя многим это время сэкономит...
    • Подскажите пожалуйста, кто знает, что за деталь smd sot23 с надписью BGVR9. Рядом с ней транзистор IRFR320B, он задымился. Это плата управления оборотами конденсаторным вентилятором Ecofit 2RRE15 230 В 50/60Гц. Думаю, этот BGVR9 или транзистор пробитый или может это стабилитрон  ?
    • Ну, фокус может быть. Камера не у меня в руках. Без обид, за то время, что вы сомневаетесь,  можно было давно все проверить.
    • Имеется плата с обозначение FS-B8910 (поиск по этому названию ничего не дал) Название контролера затёрто. При подаче питания 12 вольт. при каждом нажатии на первую кнопку загорается один светодиод (как бы выбирая режимы работы) при нажатии на  вторую все светодиоды мигают бегущей строкой Может кто знает с чего эта плата, что подключается к контактам sp1 sp2 s1, и что за контролер стоит ?
    • Вы не о том думаете. Ток в базы каскода от стабилитрона постоянен. И это микроамперы - 0.00002А, например. Зависит ещё от Н21 транзисторов каскода. Да, разверните платы входами к задней панели. А то левый канал вообще в трансформатор входом упирается. У транса сколько вторичек - четыре? Поставьте свой БП на каждый канал. Мощных вторичек, имеется ввиду.
×
×
  • Create New...