Простые часы нереального времени

bwn
Offline
Зарегистрирован: 25.08.2014

Минимальная единица времени = 0. Меньше не бывает.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

bwn пишет:

Минимальная единица времени = 0. Меньше не бывает.

Глупости не говорите всуе

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

ua6em пишет:

bwn пишет:

Минимальная единица времени = 0. Меньше не бывает.

Глупости не говорите всуе

Иншалла.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

За более чем неделю отклонений во времени нет, укладываюсь в секунду, алгоритм работает )))

XREN
Offline
Зарегистрирован: 23.03.2017

Здравствуйте!

сразу предупрежу в ардуино валенок полный,подскажите как сделать такие же часы только на max7219(матрицы 8х8х4)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

сразу предупрежу - не знаю

с max7219 не знаком

XREN
Offline
Зарегистрирован: 23.03.2017

вот такой код:

// Текст для вывода на кластер модулей вводится через консоль
 
#include <SPI.h>
#include <Adafruit_GFX.h>
#include <Max72xxPanel.h>
 
int pinCS = 10; // Attach CS to this pin, DIN to MOSI and CLK to SCK
int numberOfHorizontalDisplays = 1;
int numberOfVerticalDisplays = 4;
 
Max72xxPanel matrix = Max72xxPanel(pinCS, numberOfHorizontalDisplays, numberOfVerticalDisplays);
 
String tape;             // строка для отображения
int wait = 60;          // Задержка в мс перед сдвигом картинки
int spacer = 1;          // расстояние в точках меджу символами
int width = 5 + spacer;  // Ширина шрифта 5 точек
 
 
String utf8rus(String source) // Перекодировка для поддержки русского языка в скетче
                              // через СОМ порт с клавиатуры и так русский работает
{
  int i, k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
 
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
            n = source[i]; i++;
            if (n == 0x81) {
              n = 0xA8;
              break;
            }
            if (n >= 0x90 && n <= 0xBF) n = n + 0x2F;
            break;
          }
        case 0xD1: {
            n = source[i]; i++;
            if (n == 0x91) {
              n = 0xB7;
              break;
            }
            if (n >= 0x80 && n <= 0x8F) n = n + 0x6F;
            break;
          }
      }
    }
    m[0] = n; target = target + String(m);
  }
  return target;
}
 
String Serial_Read() {
  unsigned char c;                 // переменная для чтения сериал порта
  String Serial_string = "";       // Формируемая из символов строка
  while (Serial.available() > 0) { // Если в сериал порту есть символы
    c = Serial.read();             // Читаем символ
    if (c == '\n') {               // Если это конец строки
      return Serial_string;        // Возвращаем строку
    }
    if (c == 0xB8) c = c - 0x01;   // Коррекция кодов символа под таблицу, так как русские символы в
    // таблице сдвинуты относительно стандартной кодировки utf на 1 символ
    if (c >= 0xBF && c <= 0xFF) c = c - 0x01;
    Serial_string = Serial_string + String(char(c)); //Добавить символ в строку
  }
  return Serial_string;
}
 
 
void setup() {
 
  Serial.begin(9600);
 
  tape = utf8rus("Введите текст"); // Строка отображаемая до ввода с клавы новой
  // Как раз случай вывода русского текста из программы
 
  matrix.setRotation(matrix.getRotation() + 1); // Поворот отображаемой картинки на 90 градусов
  matrix.setIntensity(1); // Яркость матрицы от 0 до 15
}
 
 
void loop() {
 
  if (Serial.available()) {
    tape = Serial_Read();
  }
 
  // стандартный вывод из примера библиотеки МАХ72ххPanel
  for ( int i = 0 ; i < width * tape.length() + matrix.width() - 2 - spacer; i++ ) {
 
    matrix.fillScreen(LOW);  // Задание цвета фона экрана (вне букв) LOW - темный, HIGH - светлый
 
    int letter = i / width;
    int x = (matrix.width() - 1) - i % width;
    int y = (matrix.height() - 8) / 2; // center the text vertically
 
    while ( x + width - spacer >= 0 && letter >= 0 ) {
      if ( letter < tape.length() ) {
        matrix.drawChar(x, y, tape[letter], HIGH, LOW, 1); // Задание цветов вывода надписи.
                                                           // Первый параметр HIGH цвет символов
                                                           // Второй LOW цвет фона
                                                           // Для инверсии поменять HIGH на LOW
                                                           // и LOW на HIGH
      }
 
      letter--;
      x -= width;
    }
 
    matrix.write(); // Отправка на экран
 
    delay(wait);
 
  }
 
 
 
}
как сюда вставить ваши часы нереального времени?)
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

а надо? потом придётся коэффициенты подбирать, возьмите платку на DS3231 и не мучайтесь, я просто клапауция чуть чуть троллил, он детскую ошибку в коде сделал, а признать гонор не даёт, понятно, что часы хоть на миллис хоть на прерываниях таймера дают абсолютно одинаковую погрешность при правильном коде, нужна более высокая точность хода два пути - аппаратный, взять DS3231 м программный, подобрав температурные коэффициенты корректировки и корректировать по предложенному мной алгоритму

XREN
Offline
Зарегистрирован: 23.03.2017

жаль,думал поможите(

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Я не работал с таким дисплеем, в наличии нет, был бы - помог, теоретически  не могу )))

Это не поможет?
 

bwn
Offline
Зарегистрирован: 25.08.2014

XREN пишет:

жаль,думал поможите(

Посмотрите в примерах библиотеки, там вроде было как выводить числовые переменные. Присваиваете им время, убираете скроллинг и выводите.

RegNo
Offline
Зарегистрирован: 21.06.2017

dimax пишет:

Тестовый скетч на обозрение, думаю всё ясно, вывод SQW модуля ds3231 подключен к входу D3.

     dimax,  можно узнать от Вас полную схему подключения LCD и его тип (артикул) ? Заранее спасибо. Этот дисплей на контактных электропроводящих резинках и отдельно без родной печатной платы телефона работать не будет  ?

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

RegNo, это родной LCD5110 (или вроде 3110), снятый с телефона. Качество изображения на порядок выше чем у китайской подделки. У него нет резинок, там позолоченные контакты, я припаял проводки к ним. Его можно отделить от держателя, будет тонкое стекло, которое можно просто приклеить на корпус.

RegNo
Offline
Зарегистрирован: 21.06.2017

dimax пишет:
RegNo, это родной LCD5110 (или вроде 3110), снятый с телефона. Качество изображения на порядок выше чем у китайской подделки. У него нет резинок, там позолоченные контакты, я припаял проводки к ним. Его можно отделить от держателя, будет тонкое стекло, которое можно просто приклеить на корпус.

У него интерфейс SPI ?

http://www.ebay.com/itm/84x48-Nokia-LCD-Module-Blue-Backlight-Adapter-PC...

 

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

с голубой подсветкой брать не советую, полный отстой

RegNo
Offline
Зарегистрирован: 21.06.2017

ua6em пишет:
с голубой подсветкой брать не советую, полный отстой
Выбор - недорогие китайские или дорогие "российские" МЭЛТ  с параллельным блин интерфейсом.  Подсветка какого цвета наиболее контрастна и этот LCD на 3,3 или 5В ?