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


Новости

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 доли 

 

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

864 дили = 25 сек

864 доли - это большой отрезок. Не хватит ни одного таймера отмерить такое время. Максимум что мы сможем отмерить 16 разрядным таймером - это 144 доли (~4 сек). Можно ограничиться и этим, но такая единичная величина все таки большевата. Охота большей универсальности. Из всей временной части за единицу отчёта мы выберем 16 долей. Некоторые варианты можно посмотреть по таб. 3:

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

 

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

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

Для отсчёта 16 долей на ATmega328P можно использовать прерывания таймера Т1 по переполнению TCNT (режим Normal) с предделителем 256 или 1024: 

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

сек 

погр., сек

 256  28 935  0,46296 -2,96Е-06
 1024  7 234  0,462976 1,30Е-05

 TCNT - сколько счётчик должен посчитать. Соответственно, что бы вызвать прерывание счётчик должен досчитать до hFFFF? т.е. до максимального значения. Этого можно добиться, например, отняв от максимального значения регистра TCNT нужное нам количество отсчётов. Получившееся число и будем записывать в регистр TCNT, например:

65 535 - 7 234 = 58 301

Т.о. отсчёт начнётся от значения 58 301 и через 7 234 отсчёта произойдёт переполнение счётного регистра и таймер выбросит запрос на прерывание. Что бы это процесс не прекращался, необходимо постоянно записывать начальное число (в нашем случае 58 301) в регистр TCNT, в прерывании, т.к. после переполнения счётный регистр TCNT устанавливается в ноль.

Это самый простой вариант, но от постоянного записывания значения в регистр TCNT можно избавиться, переведя таймер в режим CTC (сброс при совпадении). Тогда таймер будет работать на подобие ШИМ, на определённой частоте.

В режиме СТС можно использовать 16 разрядный таймер Т1:  

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

сек 

погр., сек

доли

погр., доли

64 57 869 0,4629600 -2,96Е-06 15,9998976 -1,02Е-04
 256 14 467 0,4629760 1,30Е-05 16,0004506 4,51Е-04
 1024 3 616 0,4629760 1,30Е-05 16,0004506 4,51Е-04

 

Погрешность в режиме Normal и СТС нарастающим итогом: 

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

 

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

  сек доли   сек доли
за часть -0,0002 -0,0083   0,0011 0,365
за сутки -0,0038 -0,1327   0,0169 0,5839
за месяц -0,1536 -5,3084   0,6758 23,3570
за лето -1,4016 -48,4393   6,1670 213,1329

 

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

За 864 доли лампочка загорится 54 раза (16 долей горит, 16 - погашена) и пройдёт ровно 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и разрядный модуль ССИ  с управлением по I2C ( AliExpress (67,39 руб)). Правда высота его 0,36 дюйм = 0,91 см.  Максимум мы займём 2+3 = 5 разрядов, а остальные 3 разряда можно использовать под свои нужды, например - температура от -99 до + 99 °С :). 

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

 

Будильник

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

 

Таймер

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

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

Карта EEPROM

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

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

 

Карта ножек

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

таб. 6 
 PС5  SCL

I2C, аппаратное включение. 

Скорость: 100 КГц

 PC4  SDA
     
     
     

 

 

ке рик икик. 

.

 режим Normal