RTC DS3231 и несовпадение бод
- Войдите на сайт для отправки комментариев
Здравствуйте, форумчане.
Столкнулся с такой проблемой: при заливке абсолютно любого кода на разных библиотеках DS3231 выдает читаебельную информацию на других бодах, отличных от того, что я указываю в скетчах. "Рабочими" являются только два значения. Что я имею в виду:
Несмотря на то, что в скечте я явно указываю скорость данных
Serial.begin(115200);
в мониторе порта я могу получить читабельные данные только если перейду на скорость 74880. Почему так происходит? У меня есть два модуля: один в сборке, второй напаян на плату (именно этот ведет себя так "неправильно"). Я проверил разводку к этому модулю: есть отличие только в номинале подтягивающих резисторов на SDA и SCL. Вместо 4,3 кОм (как в правильно работающем) в "неправильном" модуле используются 10 кОм. Все остальное идентично.
Я даже проверил все скорости и что я на них получаю. Вот таблица скоростей (бод):
В скетче Читабельные данные от DS3231 Примечание ===================================================== 300 - с 4800 - тишина 1200 - с 9600 - тишина 2400 - с 19200 - тишина 4800 - с 38400 - тишина 9600 - с 57600 - тишина 19200 - с 115200 - тишина 38400 - с 115200 - тишина 57600 38400 с 500 тыс - тишина 74880 - с 500 тыс - тишина 115200 74880 с 1 млн - тишина 230400 - с 2 млн - тишина 250000 - с 2 млн - тишина 1000000 - с 2 млн - тишина 2000000 -
Можно ли как-то согласовать эти боды (чтобы от этих RTC я читал их на той же скорости, что и от микроконтроллера к ПК)? Что-то типа setBaudRate(нужная_скорость)...
Пока под рукой нет резисторов номинала 4,3 кОм, поэтому перепаять не могу и подтердить, что все дело в резисторах. Может быть и сам модуль DS3231 бракованный...
Чего только не узнаешь на этом форуме...
Могу одно сказать, модуль часов ну точно не при делах.
Могу добавить новый комментарий: модуль, который собран китайцами (с батарейкой и контактами), работает корректно на любых скоростях и эти скорости совпадают с бодами серийного порта между микроконтроллером и ПК!
Схема подключения выглядит так:
вангую, что человек подключил RTc к пинам 0 и 1...
llaabbss - схему подключения в студию. И код скетча тоже бы неплохо.
Скетч любой. Абсолютно любой работающий.
что за ардуина и на какие пины подключен модуль?
Два микроконтроллера: Uno (пины A4, A5), ESP-07 (пины 4, 5).
DS3231 и боды передачи в сериал соотносятся с друг с другом примерно как огородная бузина и киевский дятька.
DS3231 работает по I2C (читай!!! что это такое) либо на 100кГц либо на 400 кГц, как настроишь. К сериалу это вот вапще никакова отношения не имеет. Если данные в сериал не идут, надо первым делом проверить, чтоб скорости Serial.begin(...) и монитора порта (на компьютере!!!) совпадали.
llaabbss, Вам же сказали
llaabbss - схему подключения в студию. И код скетча тоже бы неплохо.
Вы не дали ни того - ни другого. Ваше отмазка
Скетч любой. Абсолютно любой работающий.
не прокатывает. Любых скетчей не бывает. Давайте скетч (по-возможности покороче) и схему. Иначе, кроме флуда здесь ничего не будет. Пока то, что Вы пишете похоже на бред.
Пример взят вот отсюда
А если в строке 16 заменить 15 на 25? Попробуйте.
И кстати, дайте пожалуйста ссылку на то место, откуда Вы такую продвинутую библиотеку скачали.
Рекомендованная схема подключения такая:
Фактическое подключение такое:
Ну, что поменяли 15 на 25?
Возьмите штатный пример из библиотеки, не бегайте по левым сайтам: https://github.com/Makuna/Rtc/blob/master/examples/DS3231_Simple/DS3231_Simple.ino
Всё с ним работает, никакие боды часы не сбивают.
ЕвгенийП
OMG! Никогда бы не подумал, что проблема будет именно в этом!
Теперь все работает прекрасно на любых скоростях!
А библиотека взята отсюда:
Вопрос закрыт. Спасибо огромное за помощь!
ЕвгенийП
OMG! Никогда бы не подумал, что проблема будет именно в этом!
Ну, вы хоть поняли, в чем конкретно была проблема?
На вывод результата не хватало места, и его незаконченность не могла быть правильно интерпретирована. Из-за этого и появлялась всякая гречка
Ну, вот, видите, а Вы говорили "любой скетч". Оказывается, не любой, а только тот, в котором явная ошибка.
Кстати, в строке 18 вместо %d/%d/%d %d:%d:%d" поставьте %04d/%02d/%02d %02d:%02d:%02d". Будет красиво выводить, типа 2017/02/09 ..., а не как сейчас 2017/2/9
На вывод результата не хватало места, и его незаконченность не могла быть правильно интерпретирована. Из-за этого и появлялась всякая гречка
Не совсем так. Результат выводился полностью, захватывая заодно кусок "свободной" памяти. А потом приходил Serial и начинал на этом же месте свои дела размещать. Вот они и дрались за одну и ту же память.
Брр, гадость какая.
А как писали-то - "любой скетч!"
Скетч любой. Абсолютно любой работающий.
И где же любой? вовсе и не любой, а только этот. Взяли безграмотный пример из инета - вот и результат. Взяли бы из другого места - все работало бы.
А лучше всего самому писать, а не пробиваться "падалью"
Переделал в loop() код таким образом:
И все продолжает работать правильно (на любой скорости). Хотя вчера не работало...
И я пробовал различные другие библиотеки. С ними тоже было все именно так. Может дело просто в USB кабеле?
По поводу написания свое собственного кода: до этих пор мне не требовалось работать с RTC. Сейчас же мне надо было проверить работает ли этот модуль на плате, и именно для этой проверки я решил загрузить в него быстрый сторонний код. Теперь вижу, что все работает и только теперь буду садиться за свой код, который будет только с нужным мне функционалом и понятно как работающим.
Во, блин. Было нормально, но с ошибкой. Ошибку поправили, вроде "жизнь наладилась", но Вы зачем-то решили уж совсем, простите, говнокод сделать :((((
И кстати, 14-ая строка, видимо для того, чтобы типа "секунды менялись"? А зачем им меняться. если секунды у Вас всё равно показывают цену на прошлогодний овёс? Т.е. секунды у Вас меняются с точностью +/- секунда по отношению к тому моменту, когда меняются секунды в часах?
Кстати, в строке 18 вместо %d/%d/%d %d:%d:%d" поставьте %04d/%02d/%02d %02d:%02d:%02d". Будет красиво выводить, типа 2017/02/09 ..., а не как сейчас 2017/2/9
вот только что просматривал комменты к этой библиотеке - так там добрая половина вопросов про то, как выести "2017/02/09" вместо 2017/2/9 :) каких только решений не предлагают.
Самое крутое это вот так (использовал часть кода ТС для примера):
Во, блин. Было нормально, но с ошибкой. Ошибку поправили, вроде "жизнь наладилась", но Вы зачем-то решили уж совсем, простите, говнокод сделать :((((
Чтобы проверить действительно ли от той ошибки все зависело ))
А чего тут проверять-то, если память распахивается? Та ошибка была абсолютно стопудовой. Могла быть ещё и другая, но ту это всё равно не отменяет.