Часы DS1307+LCD

Тема в разделе "Arduino & Shields", создана пользователем km77, 30 янв 2013.

  1. km77

    km77 Нуб

    Здравствуйте. Проблема такая: собрал для 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);
    }
     

    Вложения:

    • 3sLX3frci2Q.jpg
      3sLX3frci2Q.jpg
      Размер файла:
      304,8 КБ
      Просмотров:
      2.522
    • IMG_0791.JPG
      IMG_0791.JPG
      Размер файла:
      683,5 КБ
      Просмотров:
      2.208
    • IMG_0792.JPG
      IMG_0792.JPG
      Размер файла:
      654,2 КБ
      Просмотров:
      2.797
  2. HighDigital

    HighDigital Гик

    А само устройство даты правильно передает данные о времени суток и дате? может само устройство не корректно работает?
     
  3. HighDigital

    HighDigital Гик

    И ваш экран поддерживает кириллицу?
    Есть экраны которые это не поддерживают..
    И во вторых, русский язык выводится не "-фев-" а по кодам из таблицы к примеру lcd.print(/x43 /x37) и т.п
     
  4. HighDigital

    HighDigital Гик

    Сам не утверждаю, давно с экраном не работал. Рад был помочь
     
  5. km77

    km77 Нуб

    Что сделать чтобы заработал скетч как нужно?
    Библиотека с кириллицей как раз подключена.
     
  6. Unixon

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

    Библиотеки мало, кириллица должна быть зашита в знакогенератор дисплея.
    Какая модель дисплея? Фото обратной стороны покажите.
     
  7. km77

    km77 Нуб

    Каким образом можно сделать эту прошивку? Никак не соображу
    Фото дисплея:
     

    Вложения:

    • IMG_0793.JPG
      IMG_0793.JPG
      Размер файла:
      522,1 КБ
      Просмотров:
      1.129
    • IMG_0794.JPG
      IMG_0794.JPG
      Размер файла:
      486,6 КБ
      Просмотров:
      1.047
  8. Unixon

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

    Уже никак, шрифт там в ROM.
     
  9. km77

    km77 Нуб

    А вообще на такую модель дисплея я смогу кириллицу запустить?
     
  10. Unixon

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

    Нет, только если в графике залить дополнительные символы, но их там всего 8 можно наделать. Ну разве что если только решитесь на переделку (замену) контроллера дисплея...
     
  11. km77

    km77 Нуб

    Точно утверждаешь и знаешь это? А я тыкаюсь,пытаюсь,чтобы заработало.Бесполезно,только цифры,латиницу,а знаки препинания "-" ":" "/"можно хотя бы будет?
     
  12. Unixon

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

    На этот QC1602A в сети валяются кое-какие даташиты, там в конце есть таблица символов. Если при выводе символа с соответствующим кодом на экране ничего нет и в документации тоже ничего, значит там все-таки в памяти одни нули вместо кириллицы или какой-нибудь превдографики/иероглифов. Контроллер совместим с HD44780, его система команд не предусматривает возможность перепрограммирования всего знакогенератора, доступен только только небольшой кусок памяти под пользовательские символы.

    Мне неизвестно, существуют ли контроллеры, где это все похачено ради возможности целиком перешивать всю память знакогенератора. Сомневаюсь что производители дисплеев будут как-то нарушать совместимость ради этой возможности. Обычно дисплеи выпускаются в нескольких вариантах с разными зашитыми в них таблицами символов. Это отмечается в документации на соответствующие модели.
     
  13. km77

    km77 Нуб

    Спасибо за инфу ценную. А в кириллице получается только МЭЛТ работает или есть какие то еще иностранные прошиваемые индикаторы?
     
  14. Unixon

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

    Да так то любые могут быть с кириллицей, но это штука индивидуальная для каждой модели. Т.е. каждый раз заново нужно интересоваться, чем именно прошит контроллер конкретного дисплея.
     
  15. HighDigital

    HighDigital Гик

    У меня НЕ МЭЛТ, я покупал китайский, он стоит 300 руб в магазине, размеры 16х4.
     
  16. HighDigital

    HighDigital Гик

    Так же поддерживает все символы в ANCII таблице, включая кириллицу
     
  17. km77

    km77 Нуб

    Не прошился на русский,не показывал никак?
     
  18. km77

    km77 Нуб

    А что часы сами по себе даже не запустились и не идут как то связано может быть с русскими символами в скетче? Из-за чего это?
     
  19. Unixon

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

    Если часы не идут, с дисплеем это не связано. Можно проверить работу DS1307 по выходу SQW, он должен моргать раз в секунду. Схема часового модуля есть? Хоть там и 2,5 детали всего, но как они включены отсюда не видно. Может быть одна засада со схемой питания.
     
  20. km77

    km77 Нуб

    Схема а есть,вот на основе нее делался модуль.
    А выход SQW к чем уподключить нужно гна Ардуине ,чтобы проверить работу?
    А собиралось все по схеме в файле pdf,оттуда взяты только Ардуино,LCD и сам модуль DS1307.
    Из-за чего же такое может быть что ни часы не идут,ни вывод кириллицей не организуется? Что еще подправить можно в скетче?
     

    Вложения: