Дисплей tm1637 и rtc ds3231 на одной шине i2c не работают :(

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Собственно, если они оба на одной шине, то при обращении к RTC на дисплее портится вывод цифр в одном из знакомест, и текущее время не выдается.



По отдельности (второй физически отключить) все работает нормально.



И обнаружилось это уже после изготовления платы :(



Свободный пин на МК остался только один, поэтому вопросик таков - какую линию из SDA/SCL можно безболезненно использовать как общую и для индикатора, и для RTC, чтобы оба устройства работали корректно?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Подпишусь

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Да.
Им выдумывают всякие Ардуино, макетки и проводки дюпонт, а у них все равно сначала "плата уже изготовлена" , а потом "не работают совместно два устройства".

По делу:
Можно с платы убрать какой нить "светодиод индикации", который маловероятно, что на самом деле нужен, а есть почти всегда.

b707
Offline
Зарегистрирован: 26.05.2017

Томасина, Ваш аккаунт взломали?
Не понял вопрос про освобождения одного из пинов SCL SDA - если дисплей и RTC работают по I2c, то перенести его на другие пины не получится

Kakmyc
Offline
Зарегистрирован: 15.01.2018

b707 пишет:
Томасина, Ваш аккаунт взломали?
Не понял вопрос про освобождения одного из пинов SCL SDA - если дисплей и RTC работают по I2c, то перенести его на другие пины не получится

Для TM1637 I2C аппаратный нафиг не нужен, как в прочем и для RTC.
В общем думаю и проблема то вся в этом и заключается.
Подключили к iic , а используют библиотеки, которым он не требуется

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

b707 пишет:
Томасина, Ваш аккаунт взломали? Не понял вопрос про освобождения одного из пинов SCL SDA - если дисплей и RTC работают по I2c, то перенести его на другие пины не получится

Не работают, в том и суть.

Купился на описание на многих сайтах, что TM1637 упоминается совместно с  I2C.

Как оказалось, там близкие, но разные протоколы и на одной шине мешают друг другу:

"TM1637 не работает, если единица реализуется через подтягивающие резисторы, как в I2C. Подаёшь нормальную единицу с выхода МК – работают все. Да и заливка данных с другого конца байта идёт. "

Уже нашел решение - два входных канала перекинул на A6 и A7, а освободившиеся пины занял дисплеем.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Tomasina, рекомендую. На одних и тех же проводах тоже не заведётся, канеш, но удобнее (надеюсь).

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

Спасибо, но у меня шестизнаковый индикатор, там слишком много переделать придется.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Tomasina пишет:
Спасибо, но у меня шестизнаковый индикатор, там слишком много переделать придется.

поменяй в *.h файле на 6

// число цыферок у дисплейчика, в моём 4, бывают на 6 - 8, но у мня нет,я не тестил
//
const uint8_t NUM_DIGITS = 4;     

А потести на своём, интересно жеж :)  

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

DetSimen пишет:
поменяй в *.h файле на 6

// число цыферок у дисплейчика, в моём 4, бывают на 6 - 8, но у мня нет,я не тестил
//
const uint8_t NUM_DIGITS = 4;     

А потести на своём, интересно жеж :) 

ыыы, не все так просто, там местные приколы входят в комплект. Не знаю чем руководствовались китайцы при разводке платы, но если на вывод отправить 123456, то на индикаторе будет  456123. В ихней библиотеке перестановка в массиве уже реализована.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

нихрена себе.  Тогда да, я такого себе даже прецтавить не мог, когда писал биб-ку.  Надо заказать тогда модули на 6-8 цыфр, пащюпать. :) 

Green
Offline
Зарегистрирован: 01.10.2015

Придётся добавить метод, типа setCommon(table);)