Реле Tianbo - ресурс 10 млн переключений

Марсианские часы

alex [a] avtanski.com

Что вы сделаете если у вас пылится лишний LCD модуль с подсветкой, проводная 16-ти кнопочная клавиатура и микроконтроллер PIC16F877A? Часы Марсианина – Монстра - сразу же приходит на ум.

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Вы наверняка подумали – «В сети есть сотни часов на PIC контроллерах – нужно ли мне делать еще одни?!» Действительно, эти часы немного особенные:

  • Они имеют 16 таймеров, которые могут быть независимо поставлены на паузу и перезапущены и они могут считать как вперед, так и назад.
  • Имеется 16 будильников с конфигурируемыми звуками и действиями.
  • Таймеры могут показывать Земное, Марсианское, Юпитерское и т.д. время одновременно.
  • Как насчет сидерического времени, Лунных фаз, времени перемещения большого красного пятна Юпитера и чего либо периодического вообще?
  • Одновременное отображение 24 часового и Юлианского времен на десятичном дисплее.
  • Все изменения в конфигурации могут быть сделаны непосредственно с клавиатуры устройства, наличие компьютера необязательно.
  • Питание от сети со встроенным перезаряжаемым аккумулятором, так что вы можете носить часы с собой.

Оглавление

Конструкция

Процесс конструирования в картинках, шаг за шагом.
Работа с часами Как использовать часы – навигация в меню, установка таймеров и будильников, примеры.
Схематика Схемы, список элементов.
Код Ассемблерный код для PIC, настройка кода под другие детали (клавиатура, тактовая частота и т.д.).
How-To Примеры, полезные таблицы, ссылки, и т.д.
Другие проекты Некоторые другие проекты, над которыми я работал – в основном на PIC контроллерах.

В заключение, если вы хотите собрать Марианские часы, но у вас нет инструментов для программирования микроконтроллера, просмотрите mars base точка net, это другой проект, основанный на 4059 программируемом счетчике делителе и микросхеме часов с будильником MM5387/LM8361.

Конструкция

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

Магазин электронного хлама продал это всего за $2, дешевле чем корпуса из магазина хобби. Как бонус, он имел все коннекторы, нужные мне и значительную часть электроники модема, которая может быть повторно использована.

Время взять 10 кратное увеличительное стекло и переработать схему питания на плате и схему усилителя для внутреннего динамика. Другая потенциально полезная вещь – светодиоды с переди, вдоль по панели управления (я не использовал светодиоды в данном проекте, но решил оставить их на всяки случай). Оставшееся должно быть извлечено:

Это «облегченная» версия, после того, как я закончил с пайкой:

Время решить, что делать с портами сзади. Главный коннектор может быть использован для перепрограммирования PIC без извлечения его из коробки. Чтобы сделать так, я присоединил несколько штыревых разъемов к внутренней стороне разъема DB-25, так, что плата микроконтроллера позднее может быть к нему присоединена:

Затем прикрепим коннекторы к выводам стабилизированного напряжения 5V от питающей электроники модема. Другой коннектор прикрепим к встроенному усилителю динамика модема (чтобы проще было найти - LM386). Наконец, я подключил коннектор от перезаряжаемой 9-ти вольтовой батарейки через простой зарядник, составленный из диода и резистора 2,2к, к плате модема:

Для подключения PIC программатора я взял часть кабеля принтера и переделал его.

Плата, на которой размещается PIC контроллер и оставшаяся электроника очень проста. Так как у нас уже имеются усилитель динамика и схема питания, все что осталось это соединить провода. Это плата, во всем ее красно-черном великолепии.

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

Это уже смотрится как Часы Марсианина – Монстра. После некоторого программирования, нескольких бессонных ночей и небольшого количества магии оно наконец закончено:

Если я попытаюсь взять их с собой в путешествие, уверен, они эвакуируют аэропорт.

Работа с часами

Дисплей часов это 2х16 LCD модуль. Первая строка всегда показывает текущий выбранный таймер. Вторая строка используется для показа либо юлианского времени, либо выбора текущего меню.

Шестнадцать таймеров имеют имена TmA, TmB и т.д. вплоть до TmP. Здесь TmA это имя таймера, следующего за текущим временем. Вторая строка показывает то же самое время в юлианском формате (используется в астрономии и других науках). Клавиатура смотрится подобно этому:

Не лучшая раскладка, но это то, что я имел на руках, когда делал часы. Если вы решили воплотить этот проект и у вас есть клавиатура с другой раскладкой, изучите Использование Отличающейся Клавиатуры в секции Кода.

Пользовательский интерфейс часов организован в виде различных меню. Нажатие кнопок [DEL] и [TKO] позволит вам просмотреть пункты меню. При нажатии на [ENT] будет выбран пункт (и произойдет связанное с пунктом действие – откроется другое меню, установка значения и т.д.). выход из меню делается нажатием кнопки [DEL]. Это вызовет открытие предыдущего меню. Ниже приведена диаграмма различных меню часов, с последующим детальным описанием каждого меню:

Главное Меню – Выбор Таймера.

Сразу после включения питания часов, вы попадаете в меню «Выбор Таймера» (снимок экрана выше). В этом режиме вы можете просмотреть все 16 таймеров, от TmA до TmP (как и с любым меню, используйте кнопки [TKO] и [DEL] для выбора таймеров). Если вы не уверены, в каком меню вы находитесь, нажмите кнопку [ABT] несколько раз, это приведет вас в главное меню.

Установка времени [select timer, ENT]

Если вы хотите изменить что нибудь в таймере – установить время, установить будильник и т.д., выберете данный таймер и нажмите кнопку [ENT]. Это приведет вас к следующему меню с двумя опциями:

Когда опция Adjust Timer видна, вы можете использовать кнопку [0] чтобы поставить таймер на паузу или перезапустить таймер и кнопку [4], для того, чтобы переключить направление таймера (вперед или назад). Это будет воздействовать только на текущий выбранный таймер.

Когда опция Adjust Clock видна, вы можете делать установки для часов, которые влияют на все таймеры. Нажмтите кнопку [0] чтобы поставить на паузу или перезапустить часы. Нажатие кнопки [4] вызовет скачок часов вперед на 1 секунду. Таким образом вы можете задать правильное время не перезапуская каждый таймер отдельно.

Установки таймера [select timer, ENT]

Выберите таймер и нажмите кнопку [ENT] дважды (один раз чтобы получить Adjust меню и второй раз, чтобы выбрать опцию Adjust Timer). Появится меню со следующими опциями:

Если вы выберите опцию Set Timer и нажмете кнопку [ENT], вам будет показан экран, где вы можете ввести новое время. Введите время используя цифровый клавиши. Новое время будет установлено когда вы введете все шесть цифр (HH:MM:SS) или когда вы нажмете кнопку [ENT]. Нажатие кнопки [ABT] в любой момент отменит операцию и время не будет установлено.

Если вы выберите опцию Set Alarm, это позволит вам установить время будильника, звук и действие. Эта опция будет обсуждаться позднее.

Чтобы настроить таймер на какой ни будь другой, отличный от стандартного земного (24 часа), временной цикл, выберите опцию Set Cycle Lengt. Более детальная информация и примеры длин циклов (например, как заставить таймер считать марсианское время), находятся в разделе How-To, пункт «Установка длинны цикла таймера». Подтвердите установку новой длинны цикла кнопкой [ENT] или отмените операцию нажав кнопку [ABT] в любой момент.

Установки будильника [select timer, Возможно, формат этой картинки не поддерживается браузером., select "Set Alarm", Возможно, формат этой картинки не поддерживается браузером.]

Каждый таймер имеет будильник, связанный с ним. Это меню позволяет вам выбрать межде следующими опциями.

Чтобы установить время будильника выберите опцию Alarm Time и нажмите кнопку [ENT]. Как обычно, кнопка [ENT] подтверждает, а кнопка [ABT] отменяет операцию в любой момент.

Выбор опции Alarm Sound приведет вас к меню, где вы можете выбрать между следующими звуками: Pip, Peep, Whip and Silent. Активируясь, будильник будильник воспроизводит короткий зуммерный звук, длинный зуммерный звук или звук, звучащий как Whiiiiip! Если вы выберите Silent, будильник не будет воспроизводить звук.

Наконец опция Alarm Action позволяет вам выбрать, что должно произойти с таймером при срабатывании будильника. Вы можете выбрать следующие действия: None (нет действия, не считая воспроизведения звука), Reset (текущий таймер сбрасывается в 00:00:00 и счет продолжается), Stop (текущий таймер останавливается), Stop+Rst (таймер останавливается и сбрасывается 00:00:00).

Схематика.

схема
нажмите для увеличения

Загрузить схему в [высоком разрешении PNG | Масштабируемый формат метафайлов Windows (EMF)].

Замечания

  • Стабилизированный блок питания напряжением 5V состоит из стабилизатора напряжения и фильтрующих конденсаторов из схемы питания на плате модема.
  • Блок усилителя динамика это усилитель основанный на микросхеме LM386, который изначально был на плате модема. Динамик это внутренний динамик модема.
  • Порт PIC программатора предназначенный для перепрограммирования микроконтроллера без разборки часов. Адаптер DB25 в 6 контактный разъем (смотри картинку) не показан.
  • Если ваша клавиатура имеет раскладку отличающуюся от показанной, обратитесь к разделу Использование Другой Клавиатуры секции Код.
  • Я использовал 16-ти символьный 2-х строчный LCD модуль фирмы Techstar с подсветкой. Эти модули довольно таки стандартны, так что почти любой 16x2 LCD модуль будет работать. Подсветка это плюс но не необходимость.

Код

Программа для микроконтроллера написана на языке ассемблера. Я пытался сделать ее как можно более гибкой, иногда даже ценой увеличения размера кода. Я уверен, эту программу можно улучшать и улучшать, но, она работает и не слишком беспорядочна, этого для меня вполне достаточно. Я могу обновлять программу время от времени – удаляя ошибки и добавляя новые возможности. Если вы решите собрать эти часы, зайдите на этот сайт, чтобы скачать последнюю версию программы.

Mars Clock v.1.3, 2009/04/04
Законченный проект MPLab astro_clock.zip
Законченный HEX файл astro_clock.HEX
Главная программа astro_clock.asm
Описания клавиатуры KBD.h
Описания LCD модулей LCD.h

Установка точности таймера

Я потратил некоторое время настраивая точность часов и добился достаточно высокого уровня точности – менее чем секунда в неделю. Если точность ваших часов ниже этой, вы легко можете задать точность изменив константы TMR_STD_LO, TMR_STD_HI, TMR_XTR_LO, и TMR_XTR_HI, определенные в начале файла astro_clock.asm.

Во первых, как это работает. Каждый раз, когда таймер микроконтроллера Т1 переполняется, генерируется прерывание. TMR_STD_LO и TMR_STD_HI устанавливают начальную точку таймера, таким образом увеличение или уменьшение этих значений ускорит или замедлит таймер соответственно. Для 19-ти циклов таймера используются константы TMR_STD_LO и TMR_STD_HI, но в 20-м цикле таймер инициализируется константами TMR_XTR_LO и TMR_XTR_HI. Это позволяет использовать константы TMR_XTR_LO и TMR_XTR_HI для точных настроек.

Используйте константы TMR_STD_LO и TMR_STD_HI для грубых настроек. Текущее значение $0x66C5 – увеличение повысит скорость, уменьшение понизит ее. Я предполагаю, что вы будете изменять только байт TMR_STD_LO, но если вы используете резонатор, частота которого отличается от моего, вам возможно придется изменять оба.

Использование отличающейся клавиатуры.

Та, клавиатура, которую я использовал для часов (смотри расунок в секции Работа с часами) может отличаться от вашей. Если раскладка вашей клавиатуры не соответствует моей, отредактируйте описания кнопок в файле KBD.h. в этом файле все клавиши расположены начиная с верхнего левого угла и идут строка за строкой. Перерасположите эти описания в соответствии с раскладкой вашей клавиатуры, затем обновите шестнадцатеричные номера для каждой клавиши, так, чтобы они были последовательные.

Если вы планируете использовать альтернативные кнопки для навигации в меню, остановки, запуска и переключения направления таймеров, измените описания специальных кнопок в том же самом файле. Они появятся ближе к концу файла KBD.h.

How – To

Эта секция содержит некоторые примеры настройки часов, также как ссылки на множество полезных инструментов и сайтов. И, потому как я назвал их Марсианскими часами, мы начнем с…

Установка длины цикла таймера, или как ответить на вопрос, «Который час на Марсе?»

По умолчанию, каждый из 16 таймеров работает в стандартном 24 часовом цикле. Если вы хотите таймер, отслеживающий другой временной период (например, считающий марсианское время), вы должны изменить длину цикла таймера. Таймер будет так же показывать значения от 00:00:00 и до 23:59:59, но будет работать быстрее или медленнее, в зависимости от установленной длинны цикла. (если вы хотите таймер, работающий с нормальной скоростью, но перезапускающийся до достижения значения 23:59:59, используйте установку будильника для этого таймера с действием Reset. Смотрите секцию Установка Будильника в разделе Работа с Часами.)

Ниже вы найдете таблицу наиболее часто используемых значений длин цикла. Если вы хотите установить таймер на какой либо период, не показанные в таблице ниже, вычислите значение длины цикла, умножив число секунд в цикле на 4 и округлив до ближайшего целого. Возьмем, например, марсианский день из таблице ниже. Сутки на марсе это 24 часа, 39 минут и 35,24 секунды длинной. Это дает нам:

4 * ( 24*60*60 + 39*60 + 35.24 ) = 4 * 88 775.24 = 355 100.96 ≈ 355 101

Чтобы установить длину цикла таймера, выберите таймер, последовательно выберите опции Adjust Timer → Set Cycle Length и введите новое значение.

Название время Длинна цикла
Земные сутки 24:00:00 345 600
Сидерические земные сутки 23:56:04.1 344 656
Марсианские сутки 24:39:35.24 355 101
Сидерические марсианские сутки 24:37:22.66 354 571
Синодический лунный период 29.53059 дней 10 205 772
Сидерический лунный период 27.32166 дней 9 442 366
Период обращения большого красного пятна Юпитера приблизительно. 9 часов 53 минут 142 320

зададав правильную длину цикла вы можете установить таймер на марсианское время. Вы можете получить текущее марсианское время с 24х часовых Марсианских солнечных часов НАСА. Отличный ресурс для всех марсианских вещей это MarsBase точка net.

Веб сайт «Небо и телескоп» имеет информацию о перемещении большого красного пятна юпитера. Если эта ссылка больше не действует, посетите www.skyandtelescope.com и ищите там «GRS».

Что такое юлианское время?

Вторая строка на дисплее часов – десятичное число, которое представляет из себя время в юлианском формате. Это число - 0.0 в 12:00, в полдень, и оно увеличивается до 1.0 в 12:00, следующего дня. В полночь – 0.5. представление времени таким путем очень удобно для вычисления временных различий и вообще, с ним проще работать. Чем со временем, представленном в часах, минутах и секундах.

Юлианское время используется в астрономии. Здесь число не сбрасывается от 1.0 к 0.0 каждый день, оно остается увеличивающимся. Результат – уникальное число для любого момента времени. Так как эти часы не имеют даты, они всегда показывают ноль-точка-значение.

Как насчет лунных фаз?

Это одно из мест, где юлианское время вступает в игру. После установки длинны цикла таймера 10 205 772 (лунная фаза в четвертях секунд), вы можете поставить таймер так, что его юлианское представление будет соответствовать фазе луны. Например, 0.0 может означать новолуние, 0.25 – первую четверть, 0.5 – полнолуние и 0.75 третью четверть. Так, если вы видите число 0.58, вы будете знать, что это немного после полнолуния. Заметьте, что потому, как луна движется по траектории, не являющейся точной окружностью, значение которое вы видите на часах будет колебаться вокруг фактической фазы. Если вы видите, что часы показывают фазу луны на несколько процентов опережающую реальную, не беспокойтесь, очень скоро они синхронизируются снова.

Найдите текущую фазу луны здесь, затем, используя калькулятор справа, установите таймер (JavaScript должен выть включен в вашем браузере). Введите значение лунной фазы в процентах в третью строку и выберите, находиться ли луна в растущей или стареющей фазе, это даст вам правильное значение в формате ЧЧ:ММ:СС для таймера. Калькулятор также может конвертировать время в юлианском формате в формат HH:MM:SS.

Тот же самый принцип применим для других периодических событий, таких как перемещение большого красного пятна юпитера, движение спутников юпитера и тому подобные. Как только вы получите значение в юлианском формате, введите его в конвертер что бы получить значение в формате ЧЧ:ММ:СС для вашего таймера.

Как насчет чего нибудь более приземленного? Я хочу знать, сколько времени я трачу на упражнения/музыку практику/и т.д.

Установите таймер на обычные земные сутки (это значение по умолчанию для всех таймеров). Выберите таймер и нажмите [ENT]. На экране появится Adjust Timer. Поставьте таймер на паузу, установите время в 00:00:00. вернитесь в меню Adjust Timer. Используйте кнопку [0] чтобы запустить и поставить на паузу таймер, чтобы отследить сколько времени вы потратили на упражнения, игру на банджо, или что ни будь еще.

Могут ли они работать как кулинарный таймер.

Да. Я уверен, вы можете себе это представить. (пара ключевых моментов: (а) таймер может быть сконфигурирован для счета назад; (б) для каждого таймера есть конфигурируемый будильник.

Перевод: [IMG]/i/Image/wand.gif[/IMG] по заказу РадиоЛоцман

На английском языке: Mars Clock

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения:Полный вариант обсуждения »
  • Люди активно готовятся к полётам на марс. Ну, а кто не хочет лететь, может позаимствовать идею использования устаревшего оборудования. По-моему неплохо.
  • Точно марсианские часы (дизайн). Радует богатый набор функций...
  • А я думал... Под таким названием должно быть что-то действительно необычное и красивое, как минимум вращающиеся светодиоды.
  • Не знаю, как для Марса, но для любителей валютного рынка Forex самый раз, чтобы знать время начала и окончания торгов на различных биржах.