Ваш браузер устарел. Рекомендуем обновить его до последней версии.


Новости

2018.06.04

 САНПРТО было обновлено

Смотреть

2018

 Запустился новый проект по гибридному усилителю звуковой мощности

Смотреть

Славяно-европейские часы (СЕЧ)

Славяно-европейские часы (СЕЧ)

Опубликовано 23.09.2018

Будем создавать Славянское времяисчисление с возможностью переключения на западно-европейское время (ЗЕВ) с использованием микроконтроллера.

Начальные данные:

  • Микроконтроллер: Arduino Nano с установленным кварцем на 16 МГц;
  • Отображение: ССИ;
  • Будильник: да;
  • Таймер: да.

Запишем соотношения времени:

таб. 1 
 пп В единице времени     Славь          ЗЕВ         Единиц   
1)   Суток 1 1 в сутках
2) Часов 16
24 в сутках
3) Частей/минут 144 60 в часах
4) Долей/секунд 1296 60 в частях/минутах

 

Соотношения между Славянским и Европейским временем: 

таб. 2 
 пп В сутках     Славь          ЗЕВ       ЗЕВ/Славь прим. Славь/ЗЕВ  прим.
1) Часов 16
24 1,5 в 1 часе 1,5 европейского часа 0,25

в 1 часе ЗЕВ  укладывается ровно четверть

Славянского часа

2) Частей/минут 2 304 1 440 0,625
в 1 части 0,625 минут (37,5 сек) 1,6 в 1 минуте чуть больше полутора части 
3) Долей/секунд 2 985 984 86 400 0,028935...   34,56  в 1 сек - 34,56 доли 

 

Выводить каждую долю на экран не имеет смысла, так как глаз не успеет за сменой цифр. За одну секунду должно смениться примерно 34 доли, а чувствительность глаза лежит в приделах 28 кадров (изменений) за секунду (в лучшем случае) потом, череда изображений становится слитным. Динамика глаза примерно 0,7 сек. 

Если проанализировать эти данные и прогнать все возможные значения, то выявится только одно однозначное соответствие с целыми числами. Остальные соответствия будут дробными. И так:

864 дили = 25 сек

864 доли - это большой отрезок. Возьмём не периодическое число 108 долей. Некоторые варианты можно посмотреть в таб. 3:

таб. 3 
 доли    сек
9 0,26041(6)
16 0,4(629)
27 0,78125
108
3,125
144 4,1(6)
864 25,000

Так как мы используем готовый китайский модуль Ардуино, то там уже стоит внешний кварц на 16 МГц. Поэтому, ядро микроконтроллера будет тактироваться именно этим внешним кварцем.

Для отсчёта 108 долей на ATmega328P будем использовать прерывания таймера Т1 в режиме СТС с предделителем 1024 (15 625 Гц). Регистр сравнения необходимо установить так: OCR1A = BEBB. С переворотом вывода ОС1А (PORTB.1). 

Таким образом, время будет тикать в микроконтроллере с частотой 3,125 сек, а период на внешнем контакте равен 6,25 сек. Время будет вестись в славянском измерении, а будильник из христианского времени переводиться в славянское.

 

таб. 4  
 предделитель  TCNT

сек 

погр., сек

       

 

 

таб. 5  
 предделитель  OCR1A

сек 

погр., сек

доли

погр., доли

           

 

 

таб. 6  
  погрешность в режиме Normal
(0,46296 сек;   -2,96E-06)

 

погрешность в режиме СТС
(0,462976;   1,30Е-05)

  сек доли   сек доли
           

 

Проверка часов

За 864 доли лампочка загорится 8 раз (108 долей горит, 108 - погашена) и пройдёт ровно 25 секунд.

Учитывая нестабильность кварца, температуру и луну мы введем корректирующий байт через каждую часть равную ±0,0127 (127/10 000).

 

Расчёт в эксель.

 

Отображение информации - ССИ

Для отображения Славянского времени надо:

  1. часы  - 2 цифры
  2. части - 3 цифры
  3. доли  - 4 цифры
    Итого: 2+3+4 = 9 цифр.

Время можно выводить на 9 разрядов ССИ с помощью сдвигового регистра с защелкой. Можно взять три трёх разрядных модуля с общим катодом, например, на AliExpress (30 руб). Высота 0,56 дюйм *2,54 = 1,42 см. Но придётся делать обвязку - лень.

Так как части будут меняться за 37,5 секунд  (таб. 2) (довольно часто)  и учитывая, что мы делаем простой будильник, то нам нет необходимости выводить доли. Тогда можно использовать готовый 8и разрядный модуль ССИ  с управлением по I2CAliExpress (67,39 руб)). Правда высота его 0,36 дюйм = 0,91 см.  Максимум мы займём 2+3 = 5 разрядов, а остальные 3 разряда можно использовать под свои нужды, например - температура от -99 до + 99 °С :). 

Можно мигать разделительной точкой между часами и частями через каждые 108 долей (3,125 сек). Так и поступим.

 

Будильник

~Три простых переключателя со светодиодной подсветкой. Для включения и настройки трёх разных будильников. Один можно включать на работу, другой для переключения на особые случаи, командировки или др., третий, например, на выходные. Трёх будильников должно хватить, чтобы раз настроил, а потом только включаешь какой тебе нужно.

 

Таймер

На корпусе больша'я кнопка с фиксацией для включения режима "таймер". Таймер начинает с долей, потом части + доли, потом часы + части.

 Отображение начинается с крайне левой позиции.

Карта EEPROM

Определим содержимое ЕЕПРОМ. 

таб. 5 
   Имя  Тип  Значение             Описание
 ver byte  версия часов 
 ver1
byte  - резерв 
       
       
       

 

Карта ножек

Подключение к ножкам: 

таб. 6 
 PС5  SCL

 Отображение времени.

 I2C, аппаратное включение. Скорость: 100 КГц

 PC4  SDA
 PB1     Тактовый вывод долей (3,125cек)
 PD6    Будильник (OC0A)
 PC0    Последовательное переключение м/ж часами/частями (подтяг. R)
 PC1    Увеличить значение (подтяг. R)
 PC2    Уменьшить значение (подтяг. R)
 PC3    Переключение время/будильник 1/2/3 (подтяг. R)
 PD2  INT0  Запустить "секундомер" / Сбросить, переключиться на время
 PD3  INT1   Переключить время СЕЧ 

 

 

ке рик икик. 

.

 режим Normal