Здравствуйте. В разрабатываемом проекте используются 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); }
Отключил все лишнее - оставил только 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) тоже выдает нечитаемый результат. В чем еще может быть дело?
Этого не должно быть, совсем. С подключением ничего не напутали? Фото платы сделайте, если можно, в хорошем разрешении, поищем производственный дефект.
По перегреву нашел, что это может быть связано с конденсатором в цепи питания. На схеме он стоит, 100 нФ. Замена на 4.7 мкФ положительного эффекта не принесла. Паял, конечно, топором, но без криминала. Судя по виду, никаких соплей и коротышей нет, микросхема впаяна правильно. Фото как смог. https://drive.google.com/open?id=0B8HXKvmGTeliaHBLOUl0UHJOYUU https://drive.google.com/open?id=0B8HXKvmGTeliVkFQVWxzVDNqV1U
Вывод COM проверял с и без батарейками. Двумя разными, новыми, с напряжениями ХХ 2.9 и 3.2 В. Результат один. Прозванивал без батарейки.
Посмотрите код, у меня он работает. Про подключение в 4-ом сообщении есть информация, единственное, нужен кварц Хотя у Вас может уже готовый модуль.
Ошибка при компиляции: Код (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 взаимосвязаны. Переполюсовки питания точно не было, насколько могу быть уверенным в своих действиях.
Щас нехорошую вещь скажу, зато - правда: берёте DS1307 в руку, подходите к помойному ведру - и туда его, туда его! Чтобы даже не вспоминать потом! В век, когда давно есть DS3231 - грешно юзать телегу, запряжённую хромой лошадью.
Подскажите, есть готовые модули на его основе, продающиеся в Москве? Нужен срочно. Правда, кинув взгляд на datasheet, увидел, что он питается от 3.3В. Arduino NANO (mega328p) - от 5, I2C, соответственно, тоже будет 5-вольтовый.
ООООХХХ...ть цена. Ну разве только если очень срочно Это супротив в пределах полтоса на али. Мда, сказка про три конца перестаёт быть актуальной - уже четвёртый приделывают
Это расплата за "сегодня и в Москве" P.S. голую микруху за 1200 хотите? http://www.chipdip.ru/product/ds3231sn-real-time-clock-serial/
Чип и Дип и так офигевшие всегда были, но границ не знают. На "нашем всем" готовые модули с этой микрухой 33 рубля за штуку, куда уже дешевле?