Тайминг

Тема в разделе "Iskra JS, Espruino, Йодо", создана пользователем Игорь Начинающий, 12 мар 2017.

  1. sys

    sys Злобный Буратино Модератор

    Да. начнет нарастать. По всему остальному советую взглянуть в документацию:

    - Using the hardware real-time clock (RTC) in STM32 F0, F2, F3, F4 and L1 series of MCUs:
    http://www.st.com/resource/en/application_note/dm00025071.pdf

    - Using the hardware real-time clock (RTC) in low-power modes with STM32 microcontrollers:
    http://www.st.com/resource/en/application_note/dm00226326.pdf

    - Спецификация:
    http://www.st.com/resource/en/datasheet/stm32f405rg.pdf

    - Сайт по нашему МК (откуда все и взято):
    http://www.st.com/en/microcontrollers/stm32f405rg.html
    "...
    Clock, reset and supply management
    – 1.8 V to 3.6 V application supply and I/Os
    – POR, PDR, PVD and BOR
    – 4-to-26 MHz crystal oscillator
    – Internal 16 MHz factory-trimmed RC (1%
    accuracy)
    – 32 kHz oscillator for RTC with calibration
    – Internal 32 kHz RC with calibration
    ..."
     
    Последнее редактирование: 28 мар 2017
  2. Konkery

    Konkery Гик

    Было очень любопытно проверить действительно ли iskrajs имеет на борту rtc, как вы указали.
    и в принципе достаточно объявить объект типа Date, один раз проинициализировать и дальше
    работать с реальным временем (возможно и не очень точным),
    Был в командировке, по приезду закинул в iskrajs пару сторочек кода для проверки, и в результате
    ...ноль. Время в объявленном объекте"стояло".
    тестовый код:
    Код (Javascript):
    var curdate = new Date('2011-10-20T14:48:00');
    setInterval("console.log(curdate.toUTCString())", 1000);
    На скриншоте видно, что время "стоит", версия прошивки видна. Прошу пояснить
    что нужно сделать для того что бы как вы писали:
    "Да. начнет нарастать..."
    если можно пример кода. Замечу что приведенные все приведенные вами ссылки
    ведут к документации на кристалл, но между возможностями собственно кристалла
    и возможностями реализованной на нем, платформы мягко говоря большие различия.
    На Вики по iskraJS я также нигде не нашел описания о том что объекты Date тактируются
    внутренним источником.

    upload_2017-4-22_22-7-16.png
     
    Игорь Начинающий нравится это.
  3. sys

    sys Злобный Буратино Модератор

    Все верно - есть ньюансы :) Не судите строго - возможно я не совсем верно понял ваш предыдущий вопрос. Класс Date у нас отвечает только за удобную обработку времени - получить и представить в том виде в каком желаете. Вы создали объект, который хранит в себе время и ничего с ним не делает. Вы можете использовать его для дальнейшего хранения и обработки.

    Если хотите установить время на внутренних часах используйте функцию setTime(время в секундах по unixtime).

    Чтобы при прошивке скрипта время на плате автоматически выставлялось по системным часам вашего ПК: зайдите в настройки IDE и поставьте галочку в Communications -> Set Current Time

    Простейший способ получить "внутреннее" время в секундах - getTime()

    У платы нет батарейки, так что при потере питания внутренние часы сбросятся на 0 или на то время которое установит setTime() скрипта или то, которое заложено опцией Set Currnet Time (по сути тотже setTime()) при прошивке скрипта на плату. Можно конечно настроить хранение времени во внешней памяти (eeprom, microSD), создать систему резервного питания, но это уже кто как хочет.

    Так что ваш код надо преобразовать:
    Код (Javascript):

    //устанавливаете время в секундах прошедших с нуля часов 1 января 1970
    setTime(1319122080);

    //для получения даты-времени можно использовать (new Date()).toUTCString(),
    //а можно просто Date().toUTCString(). На данный момент и то и то работает одинаково...
    setInterval("console.log((new Date()).toUTCString())", 1000);
     
    или, если надо поработать с текущим временем
    Код (Javascript):

    setTime(1319122080);

    setInterval(function(){
      var time = new Date();
      console.log(time.toUTCString());
    }, 1000);
     
    P.S. Для более разнообразной работы со временем есть модуль/библиотека DateExt.js - http://www.espruino.com/DateExt

    P.P.S. Главное, что необходимо помнить, что внутренние (по сути системные) часы повсеместно используются самой системой (setInterval, setTimeout, digitalPulse, Waveform и т.д и т.п.). Поэтому сильно злоупотреблять не стоит :)
     
    Последнее редактирование: 23 апр 2017
    caracal, arkadyf и Konkery нравится это.
  4. Konkery

    Konkery Гик

    Спасибо, за разъяснение !