Здравствуйте. Проблема такая: собрал для Arduino Uno на макетке модуль из часов DS1307 и ЖК дисплея 16х2, залил с помощью Arduino 1.0.1 нижеприведенный скетч следующего содержания,который должен отображать по идее то что изображено на фото 1,он компилируется,заливается, но в итоге мало того что что ни часы ни идут,ни дата в нужном формате не отображается, еще и нули в обоих строчках и при том они не устойчиво горят,а мерцают. Модуль подключал к цифровым входам,дисплей согласно статье в Амперке http://wiki.amperka.ru/схемы-подключения:подключение-текстового-экрана Фото того что имею на данный момент также прикрепляю к теме. Никак не пойму что делаю не так,время и дату так и не смог установить, в чем проблемы и ошибки могут быть явные? Какие будут ваши мнения? Код (Text): //****************************************************************** // Программа часов на 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); }
А само устройство даты правильно передает данные о времени суток и дате? может само устройство не корректно работает?
И ваш экран поддерживает кириллицу? Есть экраны которые это не поддерживают.. И во вторых, русский язык выводится не "-фев-" а по кодам из таблицы к примеру lcd.print(/x43 /x37) и т.п
Библиотеки мало, кириллица должна быть зашита в знакогенератор дисплея. Какая модель дисплея? Фото обратной стороны покажите.
Нет, только если в графике залить дополнительные символы, но их там всего 8 можно наделать. Ну разве что если только решитесь на переделку (замену) контроллера дисплея...
Точно утверждаешь и знаешь это? А я тыкаюсь,пытаюсь,чтобы заработало.Бесполезно,только цифры,латиницу,а знаки препинания "-" ":" "/"можно хотя бы будет?
На этот QC1602A в сети валяются кое-какие даташиты, там в конце есть таблица символов. Если при выводе символа с соответствующим кодом на экране ничего нет и в документации тоже ничего, значит там все-таки в памяти одни нули вместо кириллицы или какой-нибудь превдографики/иероглифов. Контроллер совместим с HD44780, его система команд не предусматривает возможность перепрограммирования всего знакогенератора, доступен только только небольшой кусок памяти под пользовательские символы. Мне неизвестно, существуют ли контроллеры, где это все похачено ради возможности целиком перешивать всю память знакогенератора. Сомневаюсь что производители дисплеев будут как-то нарушать совместимость ради этой возможности. Обычно дисплеи выпускаются в нескольких вариантах с разными зашитыми в них таблицами символов. Это отмечается в документации на соответствующие модели.
Спасибо за инфу ценную. А в кириллице получается только МЭЛТ работает или есть какие то еще иностранные прошиваемые индикаторы?
Да так то любые могут быть с кириллицей, но это штука индивидуальная для каждой модели. Т.е. каждый раз заново нужно интересоваться, чем именно прошит контроллер конкретного дисплея.
А что часы сами по себе даже не запустились и не идут как то связано может быть с русскими символами в скетче? Из-за чего это?
Если часы не идут, с дисплеем это не связано. Можно проверить работу DS1307 по выходу SQW, он должен моргать раз в секунду. Схема часового модуля есть? Хоть там и 2,5 детали всего, но как они включены отсюда не видно. Может быть одна засада со схемой питания.
Схема а есть,вот на основе нее делался модуль. А выход SQW к чем уподключить нужно гна Ардуине ,чтобы проверить работу? А собиралось все по схеме в файле pdf,оттуда взяты только Ардуино,LCD и сам модуль DS1307. Из-за чего же такое может быть что ни часы не идут,ни вывод кириллицей не организуется? Что еще подправить можно в скетче?