Часы DS1307 не идут и не устанавливаются
- Войдите на сайт для отправки комментариев
Здравствуйте. Проблема такая: собрал для Arduino Uno на макетке модуль из часов DS1307 и ЖК дисплея 16х2, залил с помощью Arduino 1.0.1 нижеприведенный скетч следующего содержания,который должен отображать по идее то что изображено на фото 2,он компилируется,заливается, но в итоге мало того что что ни часы ни идут,ни дата в нужном формате не отображается, еще и нули в обоих строчках и при том они не устойчиво горят,а мерцают.
Модуль подключал к цифровым входам,дисплей согласно статье в Амперке
http://wiki.amperka.ru/схемы-подключения:подключение-текстового-экрана
Фото того что имею на данный момент также прикрепляю к теме.
Никак не пойму что делаю не так,время и дату так и не смог установить, в чем проблемы и ошибки могут быть явные? Какие будут ваши мнения?
//****************************************************************** // Программа часов на DS1307 и LCD 16x2 //****************************************************************** #include <LiquidCrystalRus.h> // Подключение библиотеки для LCD с кириллицей #include <DS1307.h> //Подключение библиотеки для DS1307 // Указываем пины подключения LCD 16х2 к Arduino // Можно указать любые пины, в соответствии с фактическим подключением #define pinRS 14 // RS к аналоговому пину 0 #define pinE 15 // E к аналоговому пину 1 #define pinDB4 10 // DB4 к цифровому пину 10 #define pinDB5 11 // DB5 к цифровому пину 11 #define pinDB6 12 // DB6 к цифровому пину 12 #define pinDB7 13 // DB7 к цифровому пину 13 // Указываем пины подключения DS1307 к Arduino #define pinSDA 2 // SDA к цифровому пину 2 #define pinSCL 4 // SCL к цифровому пину 4 DS1307 rtc(pinSDA, pinSCL); // Подключаем часы DS1307 Time t; //Объявление класса t типа Time LiquidCrystalRus lcd(pinRS, pinE, pinDB4, pinDB5, pinDB6, pinDB7); //Подключаем дисплей //*********************************************************************** //Блок настроек, выполняется однократно void setup() { rtc.halt(false); // Запускаем ход чаов lcd.begin(16, 2); // Инициализация работы с дисплеем размером 16х2 } //******************************************************************* //Объявляем функцию установки даты и времени void ustanovkaChasov() { rtc.setDOW(6); // Установка дня недели, пн-1, вт-2 и т.д. rtc.setTime(14, 11, 0); // Установка времени (час, минута, секунда, 24 ч.) rtc.setDate(6, 10, 2012); // Установка даты (день, месяц, год) } //************************************************************** // Основной блок программы, выполняется бесконечно, циклично void loop() { // Опрос часов для получения значений даты и времени t = rtc.getTime(); lcd.clear(); // очистка экрана, не обязательно, но на всякий случай // Вывод единиц в сегменте единиц дней if (t.date<=9)//если едициц дней меньше-равно 9, то выводим на 1 шаг правее { lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(1, 0); lcd.print (t.date);} else // иначе (т.е. если единиц дней больше 9, то выводим на 1 шаг левее { lcd.setCursor(0, 0); lcd.print (t.date);} //Отображение текущего месяца lcd.setCursor(2, 0); //указываем место печати названия месяца switch (t.mon) // в зависимости от значения месяца печатаем название { case 1: lcd.print("-янв-"); break; case 2: lcd.print("-фев-"); break; case 3: lcd.print("-мар-"); break; case 4: lcd.print("-апр-"); break; case 5: lcd.print("-мая-"); break; case 6: lcd.print("-июн-"); break; case 7: lcd.print("-июл-"); break; case 8: lcd.print("-авг-"); break; case 9: lcd.print("-сен-"); break; case 10: lcd.print("-окт-"); break; case 11: lcd.print("-ноя-"); break; case 12: lcd.print("-дек-"); break; } //Отображение текущего года гггг lcd.setCursor(7, 0); // указываем место печати значения года lcd.print(t.year); // печатаем год // Отображение текущего дня недели lcd.setCursor(12,0); //указываем место печати дня недели switch (t.dow)// в зависимости от номера дня недели выводим на экран { case 1: lcd.print("/ПН/"); break; case 2: lcd.print("/ВТ/"); break; case 3: lcd.print("/СР/"); break; case 4: lcd.print("/ЧТ/"); break; case 5: lcd.print("/ПТ/"); break; case 6: lcd.print("/СБ/"); break; case 7: lcd.print("/ВС/"); break; } // Отображение времени чч:мм:сс lcd.setCursor(3,1); lcd.print(rtc.getTimeStr()); // время выводится готовой строкой с разделителями ":" delay(50); }
Вообще SDA/SCL это A4,A5 и произвольно их ставить нельзя. Перекиньте "часики" на них и все заработает (скетч не смотрел, но это увидел).
Вообще SDA/SCL это A4,A5 и произвольно их ставить нельзя. Перекиньте "часики" на них и все заработает (скетч не смотрел, но это увидел).
Вот тема, может быть будет полезно. http://arduino.ru/forum/programmirovanie/ds1307-pokazyvayut-strannoe-vremya-kotoroe-stoit#comment-22002
Мне очень понравилась предложенная maxim библиотека. И там замечательные примеры. Установка часов, старт, стоп, все через монитор.
Много всего перебробовал, но часы по-прежнему стоят показывают 2000 и 00:00:00. Проблема видимо в SDA SCL линиях,как обнаружить ее,проверить и устранить?
А это?
Желтый и зеленый... На контакты Analog IN A4 A5!!! после заливки послать "на" R в мониторе :)
Будут останавливаться - емкость параллельно питанию 5вольт.
А это?
Желтый и зеленый... На контакты Analog IN A4 A5!!! после заливки послать "на" R в мониторе :)
Заливал в IDE 1.0.1 Выдает вот,что
Analog IN A4 A5 кажут бред? Ну наоборот.
Таким образом:
А что это за циферень слева?! В окне ArduinoIDE?! Крайний левый столбец строк?
Старая библиотека удалена?
В какой версии все же надо проверить твой код? Скачал IDE 1.0.3,проверил в нем,библиотеки на DS1307 изначально там не было,добавил туда-там не компилится. В 1.0.1 не пробовал.
У меня 1.0.2 ... все работает как ... часы! Ты не ответил - код в IDE скопировал вместе нумерацией строк? Это не пройдет!
код вытаскивается без нумерации кнопочкой <> в правом верхнем углу окошка с кодом.
У меня минуты вместо 01; .... 09 кажут 1....9, без нуля. Как бы исправить без "мороки про строки"?
У меня минуты вместо 01; .... 09 кажут 1....9, без нуля. Как бы исправить без "мороки про строки"?
Форматироваием вывода примерно в таком духе:
if (minute < 10) {serial.print("0"); serial.print(minute);}
"А-аа!!! - Семён Семёныч...!" Но это слишком просто... Спасибо, Андрей. Интересно, а что ж я собрался городить?! Интересно...
В свое время достаточно много времени убил на настройку RTC DS1307. Пробовал подключить на 4-5 аналоговые порта безуспешно. Как оказалось в Arduino Mega нужно подключить в разъемы comunication, в 20 и 21-ый разъемы с надписью SDA и SCL, после у меня все заработало. Может кому-то пригодится.
В свое время достаточно много времени убил на настройку RTC DS1307. Пробовал подключить на 4-5 аналоговые порта безуспешно. Как оказалось в Arduino Mega нужно подключить в разъемы comunication, в 20 и 21-ый разъемы с надписью SDA и SCL, после у меня все заработало. Может кому-то пригодится.
Дима, ты просто СПАСИТЕЛЬ :)
Сам парился с неделю пытаясь понять почему не идут данные с реал-тайма. Все перепробывал: менял батарею (думал сдохла), укорачивал провода до часиков до ардуинки - невкакую!
А тут случайно наткнулся на твой коментарий, пришёл домой тупо переткнул проводки... и О ЧУДО! Все заработало.
Спасибо, ещё раз!
Вопрос снят