Проблемы с RTC

Тема в разделе "Arduino & Shields", создана пользователем atana, 14 июл 2016.

  1. atana

    atana Нуб

    Здравствуйте. В разрабатываемом проекте используются Arduino NANO, Motor Shield v3 http://freeduino.ru/arduino/mshield.html, Quad Display и TroykaRTC.

    Ардуино надета на Motor Shield, к полученному бутерброду напаяны шлейфы к дисплею и RTC.

    На данный момент пытаюсь просто вывести текущее время на дислпей. Имею следующие проблемы:
    1) Время отображается некорректно - выводит "с.5.8.5"
    2) Очень быстро и сильно разогревается RTC , вроде сама микросхема DS1307. Температура, на мой взгляд, опасная.

    Кто-нибудь может подсказать, в чем проблема?

    Вот скетч:
    Код (C++):
    // библиотека для работы дисплея
    #include <QuadDisplay.h>
    // библиотека для работы I²C
    #include <Wire.h>
    // библиотека для работы с часами реального времени
    #include "TroykaRTC.h"
    // EEPROM — энергонезависимая память
    // библиотека для записи и считывания информации с EEPROM
    #include <EEPROM.h>

    //контакт дисплея
    #define DISPLAY_PIN 13

    //кнопки и переключатели
    #define BUT_MODE 14
    #define BUT_CONF 15
    #define BUT_P 17
    #define BUT_M 16

    // создаём объект для работы с часами реального времени
    RTC clock;

    unsigned int mode = 0;
    unsigned int conf = 0;
    unsigned int plus = 0;
    unsigned int minus = 0;

    unsigned int hour = 0;
    unsigned int hourH = 0;
    unsigned int hourL = 0;
    unsigned int minute = 0;
    unsigned int minuteH = 0;
    unsigned int minuteL = 0;
    unsigned int second = 0;
    unsigned int secondH = 0;
    unsigned int secondL = 0;

    unsigned int ints[10] = {QD_0, QD_1, QD_2, QD_3, QD_4, QD_5, QD_6, QD_7, QD_8, QD_9};

    void setup() {
      pinMode(DISPLAY_PIN, OUTPUT);
      pinMode(BUT_MODE, INPUT);
      pinMode(BUT_CONF, INPUT);
      pinMode(BUT_P, INPUT);
      pinMode(BUT_M, INPUT);
     
      // инициализация часов
      clock.begin();
      // метод установки времени и даты в модуль вручную
      //не устанавливаем, RTC живет своей жизнью
      //clock.set(10,25,45,27,07,2005,1);
    }

    void loop() {
      mode  = digitalRead(BUT_MODE);
      conf  = digitalRead(BUT_CONF);
      plus  = digitalRead(BUT_P);
      minus = digitalRead(BUT_M);
     
      // запрашиваем данные с часов
      clock.read();
     
      hour = clock.getHour();
      hourH = hour/10;
      hourL = hour%10;
      minute = clock.getMinute();
      minuteH = minute/10;
      minuteL = minute%10;
      second = clock.getSecond();
      secondH = second/10;
      secondL = second%10;
       

      displayDigits(DISPLAY_PIN, ints[minuteH], ints[minuteL], QD_DOT&ints[secondH], ints[secondL]);
      //displayDigits(DISPLAY_PIN, ints[time[4]], ints[time[5]], QD_DOT&ints[time[6]], ints[time[7]]);
      delay(500);
    }
     
  2. atana

    atana Нуб

    Отключил все лишнее - оставил только arduino nano и RTC.
    Залил скетч из примера и смотрю что валится в COM:

    Код (C++):
    45:@5:85--@5.@5.2165--r¦@5.@5.2
    45:@5:85--@5.@5.2165--¦@5.@5.2
     
    Поиск по гуглу и форуму показал, что данная проблема встречалась, но заключалась в неправильной распиновке SCL/SDA или кривой библиотеке.
    Перепроверил распиновку, в одной из картинок в гугле нашел даже другую (D4/D5 вместо A4/A5), попробовал так - результат тот же. Другая библиотека (RTClib) тоже выдает нечитаемый результат.

    В чем еще может быть дело?
     
  3. Unixon

    Unixon Оракул Модератор

    Этого не должно быть, совсем. С подключением ничего не напутали? Фото платы сделайте, если можно, в хорошем разрешении, поищем производственный дефект.
     
  4. atana

    atana Нуб

    По перегреву нашел, что это может быть связано с конденсатором в цепи питания. На схеме он стоит, 100 нФ. Замена на 4.7 мкФ положительного эффекта не принесла. Паял, конечно, топором, но без криминала.

    Судя по виду, никаких соплей и коротышей нет, микросхема впаяна правильно.
    Фото как смог.
    https://drive.google.com/open?id=0B8HXKvmGTeliaHBLOUl0UHJOYUU
    https://drive.google.com/open?id=0B8HXKvmGTeliVkFQVWxzVDNqV1U
     
  5. Unixon

    Unixon Оракул Модератор

    Посмотрите, нет ли замыкания между выводами 2,3 и защитным кольцом вокруг выводов 1,2 и резонатора.
     
  6. atana

    atana Нуб

    Чисто
     
  7. Unixon

    Unixon Оракул Модератор

    А батарейка в модуле есть? Попробуйте вытащить.
     
  8. atana

    atana Нуб

    Вывод COM проверял с и без батарейками. Двумя разными, новыми, с напряжениями ХХ 2.9 и 3.2 В. Результат один.
    Прозванивал без батарейки.
     
  9. alex-prog

    alex-prog Гик

    Посмотрите код, у меня он работает.

    Про подключение в 4-ом сообщении есть информация, единственное, нужен кварц ;) Хотя у Вас может уже готовый модуль.
     
  10. atana

    atana Нуб

    Ошибка при компиляции:

    Код (C++):
    sketch_jul15b.ino:6:8: error: no matching function for call to ‘DS1307::DS1307()
    sketch_jul15b.ino:6:8: note: candidates are:
    In file included from sketch_jul15b.ino:3:0:
    /home/user/sketchbook/libraries/DS1307/DS1307.h:86:3: note: DS1307::DS1307(uint8_t, uint8_t)
       DS1307(uint8_t data_pin, uint8_t sclk_pin);
       ^
    /home/user/sketchbook/libraries/DS1307/DS1307.h:86:3: note:   candidate expects 2 arguments, 0 provided
    /home/user/sketchbook/libraries/DS1307/DS1307.h:83:7: note: DS1307::DS1307(const DS1307&)
    class DS1307
           ^
    /home/user/sketchbook/libraries/DS1307/DS1307.h:83:7: note:   candidate expects 1 argument, 0 provided
    sketch_jul15b.ino: In function ‘void setup():
    sketch_jul15b.ino:61:7: error:class DS1307’ has no member named ‘begin’
    sketch_jul15b.ino:110:7: error:class DS1307’ has no member named ‘fillByHMS’
    sketch_jul15b.ino:112:7: error:class DS1307’ has no member named ‘fillByYMD’
    sketch_jul15b.ino:115:15: error: no matching function for call to ‘DS1307::setTime()
    sketch_jul15b.ino:115:15: note: candidate is:
    In file included from sketch_jul15b.ino:3:0:
    /home/user/sketchbook/libraries/DS1307/DS1307.h:88:7: note: void DS1307::setTime(uint8_t, uint8_t, uint8_t)
      void setTime(uint8_t hour, uint8_t min, uint8_t sec);
           ^
    /home/user/sketchbook/libraries/DS1307/DS1307.h:88:7: note:   candidate expects 3 arguments, 0 provided
    sketch_jul15b.ino: In function ‘void loop():
    sketch_jul15b.ino:126:11: error:class DS1307’ has no member named ‘second’
    sketch_jul15b.ino: In function ‘void printTime():
    sketch_jul15b.ino:138:20: error:class DS1307’ has no member named ‘hour’
    sketch_jul15b.ino:142:20: error:class DS1307’ has no member named ‘minute’
    sketch_jul15b.ino:146:20: error:class DS1307’ has no member named ‘second’
    sketch_jul15b.ino:151:20: error:class DS1307’ has no member named ‘dayOfMonth’
    sketch_jul15b.ino:155:20: error:class DS1307’ has no member named ‘month’
    sketch_jul15b.ino:159:20: error:class DS1307’ has no member named ‘year’
     
    Вероятно, какая-то не та библиотека..
    Но все библиотеки, что перепробовал так или иначе говорили о том, что RTC не отвечает.

    У меня готовый модуль TroykaRTC. Там и кварц, и подтяжки SCL/SDA, и фильтр по питанию.


    В общем, устойчивое ощущение, что работоспособность модуля и нагрев DS1307 взаимосвязаны.
    Переполюсовки питания точно не было, насколько могу быть уверенным в своих действиях.
     
  11. atana

    atana Нуб

    Подключил отдельно RTC напрямую к стабилизированному источнику 5В - греется.
    Видимо, DS1307 дохлый.
     
  12. DIYMan

    DIYMan Guest

    Щас нехорошую вещь скажу, зато - правда: берёте DS1307 в руку, подходите к помойному ведру - и туда его, туда его! Чтобы даже не вспоминать потом!

    В век, когда давно есть DS3231 - грешно юзать телегу, запряжённую хромой лошадью.
     
    atana нравится это.
  13. atana

    atana Нуб

    Подскажите, есть готовые модули на его основе, продающиеся в Москве? Нужен срочно.

    Правда, кинув взгляд на datasheet, увидел, что он питается от 3.3В. Arduino NANO (mega328p) - от 5, I2C, соответственно, тоже будет 5-вольтовый.
     
  14. Tomasina

    Tomasina Сушитель лампочек Модератор

    где вы смотрели? В даташите допустимое питание от 2,3 до 5,5 В.
     
  15. DIYMan

    DIYMan Guest

    В Москве - не знаю, в Китае - валом. Сходу предположу, что есть в чипдипе за конскую цену.
     
  16. Tomasina

    Tomasina Сушитель лампочек Модератор

  17. DIYMan

    DIYMan Guest

    ООООХХХ...ть :eek: цена. Ну разве только если очень срочно :) Это супротив в пределах полтоса на али. Мда, сказка про три конца перестаёт быть актуальной - уже четвёртый приделывают :mad:
     
  18. Tomasina

    Tomasina Сушитель лампочек Модератор

    DIYMan нравится это.
  19. DIYMan

    DIYMan Guest

    Вы этта - так пугать не надо, пот холодный аж прошиб :)
     
  20. ostrov

    ostrov Гуру

    Чип и Дип и так офигевшие всегда были, но границ не знают. На "нашем всем" готовые модули с этой микрухой 33 рубля за штуку, куда уже дешевле?