Зависает монитор i2c SH1106 - авто и кабель 1.5 метров

ser907
Offline
Зарегистрирован: 04.01.2019

Доброго времени суток всезнающим,

имеем следующую диспозицию:

- Ардуино Леонардо (оригинальный)

- 1,3 монитор i2c SH1106 (китай), используется библиотека u8glib

- разделены кабелем примерно 1.5 метра идущему по моторному отсеку авто.

При тестах на коротком кабеле работало все. На длинном кабеле "быстрая мода" монитора не работает вообще, в обычном режиме без включенного двигателя все тоже работает, с включенным двигателем - работает несколько секунд, потом монитор подвисает, иногда, раз в 15 минут, на пару секунд опять раздупляется, итд. Устройство, при этом продолжает работать, только нет передачи данных на монитор. Т.о., watchdog проблему не видит.

Вопросы имею такие:

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

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

Заранее спасибо за советы.

 

 

 

 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

I2C - внутрисхемный интерфейс, рассчитан на связь устройств в пределах одной печатной платы. На полтора метра - никто не обещал. От слова совсем. А еще и в непосредственной близости от источника помех...

В общем, если нежелательно размещать основной контроллер вблизи дисплея, расположите вблизи только дополнительный - который будет работать только на дисплей, и который будет соединен с основным контроллером по более помехозащищенному каналу.

Logik
Offline
Зарегистрирован: 05.08.2014

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

ser907
Offline
Зарегистрирован: 04.01.2019

Вот я тоже думаю, что стоит еще побороться... Простите, если вопросы чайниковские, но

как уменьшить резисторы подтяжки на шине?

как уменьшить скорость самой шины?

Монитором (и шиной) управляет библиотека, где таких функций явным образом нету...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

1. Резисторы - подпаять параллельно.

2. Минимальной скоростью считается 100 кГц. Для начала проверить, что нигде не переключается на 400 кГц. Но, в принципе, на первый взгляд ничто не мешает уменьшать скорость хоть до нуля. Другое дело, что для дисплея и стандартная скорость зачакстую представляется недостаточной.

Теоретически можно попытаться снизить скорость, поправив код библиотеки. Там есть где. Другой вариант - использовать софтверный I2C.