Как стать автором
Обновить

Комментарии 120

А где взять такой контроллер, может, он есть где-нибудь в устройствах, которые имеются дома?
В готовых устройствах не встречал. Хотя и не искал специально. Если вам ближе PIC, то его тоже можно заставить работать от 1.5 вольт. В конце концов, если навесить еще одну батарейку, подойдет практически любой контроллер.
Мне пока ничего не ближе :-) Но Ваш пост вдохновил. Спасибо.

Наконец у меня нашлись время и желание реализовать такие же часы, как в статье — почти 7 лет прошло!


Только с ходу на ATtiny13A код не заработал. Проект компилировался (AVR/GNU C Compiler 5.4.0), двоичный файл через AVRDUDE записывался, но дальше инициализации дело не шло.


Почти час провозился, пока не установил причину. Нашёл статью, в которой описана работа с данными в программной области — в объявлении которых фигурирует макрокоманда PROGMEM:


avr-libc: Data in Program Space


Для работы с такими данными нужно использовать функции pgm_*. Заменил следующую строчку:


next_tick_no += intervals[interval_no];

на:


next_tick_no += pgm_read_byte(&intervals[interval_no]);

а также включил в проект заголовочный файл, содержащий объявление макрокоманды PROGMEM и определения функций pgm_*:


#include <avr/pgmspace.h>

и всё заработало, как часы! (Пардон за каламбур.)


Кроме того прочитал внимательно техническую спецификацию ИС, и удалось ещё больше сократить энергопотребление.


Если верить моему 250-рублёвому ЦММу, то за счёт отключения аналогового компаратора потребление тока микросхемой упало примерно на 53 микроампера. Отключение модуля АЦП однако ничего, кажется, не дало, но я этот код всё равно оставил:


void configLowPower() {
    /* Power down the Analog Comparator.
    From 7.1.1 Idle Mode:
        If wake-up from the Analog Comparator interrupt is not required,
        the Analog Comparator can be powered down by setting the ACD bit 
        in the Analog Comparator Control and Status Register – ACSR.
         This will reduce power consumption in Idle mode. If the
         ADC is enabled, a conversion starts automatically when this 
         mode is entered.

    From 13.2.2 ACSR– Analog Comparator Control and Status Register,
    Bit 7 – ACD: Analog Comparator Disable:
        When this bit is written logic one, the power to the Analog 
        Comparator is switched off. This bit can be set at any time 
        to turn off the Analog Comparator. This will reduce power
        consumption in Active and Idle mode. When changing the ACD bit, 
        the Analog Comparator Interrupt must be disabled by clearing
        the ACIE bit in ACSR. Otherwise an interrupt can occur when 
        the bit is changed.
      */
    ACSR &= ~_BV(ACIE);
    ACSR |= _BV(ACD);

    /* 
    From 7.3 Power Reduction Register:
        Modules can be shut down in Idle and Active modes,
        significantly helping to reduce the overall
        power consumption.

    See also:
        19.1 Supply Current of I/O Modules, for examples.
    */
    ADCSRA &= ~_BV(ADEN);   // The ADC must be disabled before shut down
    PRR |= _BV(PRADC);      // Shut down ADC;
}

Функцию нужно вызвать однократно из главной процедуры во время инициализации.


Это что касалось программной части. Теперь насчёт аппаратной.


Для механизма на моих часах оказалось достаточно импульса длительностью 78 миллисекунд. Но посмотрим, как они себя поведут по мере дальнейшей разрядки батарейки — уже неделю работают без останова.


По поводу конденсатора. Во всех источниках, которые мне попались, пишут, что как раз таки наоборот — у электролитических конденсаторов, к коим относятся и танталовые, ток утечки намного выше, чем у керамических и плёночных конденсаторов. Кроме того у танталовых по сравнению с другими типами конденсаторов выше значения диэлектрической абсорпции.


Источники — используйте Wayback Machine, если статей по ссылкам в будущем не окажется:


  1. Lowest Leakage capacitor type — edaboard.com.


  2. Design femtoampere circuits with low leakage — Part 2: Component selection — EDN Network.


  3. Capacitor Characteristics and Capacitor Specifications — ElectronicsTutorials.


  4. Capacitor leakage and design for low energy battery powered devices — Electrical Engineering @ Stack Exchange.


  5. Dielectric absorption — Wikipedia.



Преимуществами танталовых конденсаторов является их бо́льшая емкость при меньших размерах, более высокие надёжность и долговечность. Но есть и недостатки, два из которых я уже привёл.


Так или иначе танталовый конденсатор в моих краях — унобтаний. Поставил пока керамический емкостью 0,1 µF. Похоже, это самый ходовой вариант в роли Decoupling (или Bypass) конденсатора — как по-русски называется конденсатор в этой роли, не знаю. Позже заменю его на полипропиленовый.


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


Ещё один момент отмечу для новичков — к коим я и себя, разумеется, причисляю. Когда вы выбираете внешний тактовый сигнал для работы ИС, то для программирования вам понадобится источник сигнала частотой выше 32 768 Гц, иначе большинство программаторов просто не смогут «говорить» с чипом на такой низкой скорости.


Я для этой цели на макетную плату добавил ещё пару ATtiny13A, которые генерируют сигнал прямоугольной формы через восьмибитный таймер/счётчик с ШИМ: один — ~32 кГц, второй — несколько мГц. Но вы можете использовать любую другую ИС с ШИМ — не обязательно AVR. Например, такой чип всего за два рубля — EEVblog #1132 — The 3 Cent Microcontroller!.


Код самого простого генератора сигнала для ATtiny13A, можете использовать его в своих проектах:


#include <avr/io.h>
#include <avr/sleep.h>

void slowClock() {
    TCNT0 = 0;  
    OCR0A = 17;
    TCCR0A = _BV(COM0A0) | _BV(WGM01) | _BV(WGM00);
    TCCR0B |= _BV(WGM02);
    TCCR0B |= _BV(CS01);    // 9.6 MHz / 8 = 1.2 MHz
}

void fastClock() { /* Unprogram the CKDIV8 fuse for full speed */
    TCNT0 = 0;
    OCR0A = 0;
    TCCR0A = _BV(COM0A0) | _BV(WGM01) | _BV(WGM00);
    TCCR0B |= _BV(WGM02);
    TCCR0B |= _BV(CS00);
}

int main(void) {
    /*  The Data Direction Register bit for the OC0x pin (DDR_OC0x) 
    must be set as output before the OC0x value is visible on the pin.
    */
    DDRB = _BV(PB0);

    //slowClock();
    fastClock();

    set_sleep_mode(SLEEP_MODE_IDLE);
    sleep_enable();

    sleep_mode();
}

Просто подключите вывод OC0A (PB0 на ATtiny13A) ко вводу CLKI на вашем микроконтроллере и сможете программировать его любым программатором.


Надеюсь, кому-то эта информация пригодится.

Посмотрите на картриджи своего принтера. В некоторых «перезаправляемых» стоят именно эти (ATtiny13) контроллеры.
Как-то слишком дорого выдирать их из снпч/перезаправляемых… В магазине радиодеталей они 70 руб стоят. Правда сначала их нужно найти.
Если в Москве, то есть вот тут вроде:
ATtiny13A-PU 40 рублей
*Здесь картинка с буханкой хлеба и троллейбусом*

А так весьма забавно получилось.
Не скажите, у меня, например, часы "Да какая разница!" с обвалившимися цифрами и идут в обратную сторону как на видео.
Рандомный ход секундной стрелки их здорово урасит.
Шикарно! Где купили? Или Вы сами делали?
В сувенирных лавках ищите, но имейте в виду, что идущие обратно часы не хило рвут шаблоны :)
НЛО прилетело и опубликовало эту надпись здесь
У меня еще минималистичней. К вопросу «как ты смотришь время?» я уже привык, как и к тому, как определять время по этим часам :)

image
М… может я тупой, не не понял в чем проблема?
Эти часы еще нормальные, вот различные часы, на которых время, дата и все прочее написано в двоичной системе, причем не сразу догадаешься где какое показание, вот это да, уже сложнее определить время.
Жуть, товарищи!
Ведь и так когда слежу за секундной стрелкой кажется что она странно движется.
А еще они тикают тоже неравномерно :)
Во, следующий этап сделать чтобы они тикали равномерно, но стрелки шли так как на видео, будет действительно улетно, как-будто в зрении лаг такой )))
Это связано с нелинейностью восприятия информации вашими глазами. Часто информация о кадре со сместившейся стрелкой еще не успела поступить к вам в мозг, т.к. совпала по времени со временем «обновления». Прочитал об этом в какой-то научной книге, но не могу вспомнить в какой.
Хочу такие часы с зеркальным циферблатом и таким неравномерным ходом! Хочу их в своем кабинете в офисе повесить — пусть заходящий народ с ума сходит. :D
Обычные ритмично тикающие часы не всем мешают заснуть. Но это… можно подарить кому-то из врагов. Главное проследить чтобы он поставить их у себя в комнате. Доолго он будет вечерами слушать как «гуляют» эти часы. :)
Еще круче сделать, чтобы днём они шли нормально, а ночью — неравномерно.
Тогда уже надо ставить микрофон, чтобы они шли неравномерно только когда становится очень тихо. Когда «жертва» начинает засыпать и слух обостряется — начинаются приколы :D
И датчик освещенности еще можно. Всё в ваших руках, делайте :)
И пулеметные турели!
нейротоксины же…
Пулеметные турели с нейротоксинами :)
«Экспериментальным путем было установлено, что минимальный интервал между импульсами составляет 1/4 секунды» — это, получается, ограничение контроллера?
Это ограничение механики. Если дергать быстрее, шестеренки не успевают провернуться и стрелку просто колбасит на месте.
Следующий шаг — поменять местами стрелки. Чтобы часовая показывала секунды, минутная часы, а секундная — часы. Вот тогда будет порядочек. И цифры отзеркалить. Вот.
Поменять местами стрелки стрелки уже сложнее, у каждой свой диаметр оси, придется переходники делать. А идея хорошая.
Спасибо.
Я думаю проще изготовить новые стрелки.
Если и секундная и минутная, как Вы предложили, будут показывать часы, то это действительно будет жестоко.
НЛО прилетело и опубликовало эту надпись здесь
Смотреть на реакцию гостей, взглянувших узнать время *trollface*
НЛО прилетело и опубликовало эту надпись здесь
Есть много бессмысленных вещей, сделанных just for fun, от еще одной мир не рухнет. Если вы привыкли считать иначе, пусть целью этого проекта будет демонстрация работы AVR при сверхнизком напряжении питания.
НЛО прилетело и опубликовало эту надпись здесь
Я бы купил те, что на фото. Знать бы адрес магазина
Так гуглите «часы с обратным ходом» или «античасы», их куча везде продается.
Кто-то очень умный, намного умнее, чем тот, что обучал бесенка, создал для приемной патриция особенные часы. Они тик-такали, как и все часы, но против всех обычных часовых правил тик-так их был нерегулярным. Тик-так-тик… а потом явная задержка на долю секунды дольше, чем до того… так-тик-так… а потом тик на долю секунды раньше, чем вы того ожидали. После десяти минут ожидания мыслительные способности даже самых опытных и подготовленных посетителей падали до нуля. Патриций, наверное, хорошо заплатил часовщику.
Пратчетт — «Ноги из глины».
Я думал будет на механике, что-то типа
image
а мысля хорошая… и не надо довешиывать нчего и с питанием проблемы решать
Пол часа пялился на картинку, завораживает…
Здорово, теперь руки зачесались самому такое смастерить.
Отмерили полчаса по картинке или свверялись с часами?
Помнится, в журнале Моделист-Конструктор предлагали ставить такие овальные шестерни на велосипед, вроде как усилий меньше, а скорость выше становится. Даже расчеты и чертежы были
Профики, которые гоняются, сейчас ставят себе овальные большие шестеренки. На трансляциях соревнований можно увидеть, но они, конечно, не настолько овальны =) А смысл там в том, чтобы в «мертвых» точках (верхнее и нижнее положение педали) было проще её прокрутить.
НЛО прилетело и опубликовало эту надпись здесь
Ветка из Лепры на Хабре.
Жаль меня там нет… Нашел гифку в другом месте ;-)
Вы еще стрелки поменяйте: часовую на секундную и наоборот, — тогда вообще будет полный набор.
У меня ребенок поиграли с моими часами — теперь у меня секундная стрелка идет так же, как на гифке. При этом время показывают правильно.
Думал в ремонт нести — а тут оказывается тенденции меняются и теперь это модно :)
Разберите — вдруг ATmini найдете!)))
Только Tiny, а не мини.
Сорри :)
– Какие у вас странные часы, – сказала Алиса, с большим интересом наблюдавшая за манипуляциями Зайца, заглядывая ему через плечо. – Показывают число, а который час – не показывают!

– А с какой стати? – буркнул Шляпа. – Разве часы обязаны все показывать? У тебя часы показывают, какой год?

– Конечно, нет, – начала Алиса с полной готовностью, – но ведь…

– Но ведь, – перебил ее Шляпа, – ты не скажешь, что они негодные?
пост, в котором я наконец-то узнал, что за магическая константа такая, 32 768 Гц, спасибо.
И да, моя аритмия от таких часов была бы в восторге )
Интересно, а сколько они с такой батарейкой протянут? Микроконтроллер жрет некисло, по сравнению со шататной микросхемой.
Измерить ток не удалось, поэтому поживём — увидим.
Основной потребитель энергии — двигатель, а он жрет одинаково, что с контроллером, что со штатным генератором. Tiny13A, кстати, ест на удивление мало. При внешнем тактировании на 32 кГц — меньше 10 мкА, а в спячке — меньше микроампера. Источник, стр. 127, 130.
А, так он засыпает? Ну тогда вопрос снимается.
Ну и да, 10 мкА тоже нормально. Не обратил внимание, что при такой низкой частоте будет соответствующее потребление.
Не, для красоты эффекта надо не циферблат в обратную сторону, а чтобы стрелка секундная иногда проскакивала в обратную сторону, но с сохранением оборота за 60 секунд
Хотел так сделать, но конструкция двигателя позволяет ему вращаться только в одну сторону.
Если поменять направление напряжения на обмотке, они не будут от этого обратно идти?
Нет. Нужно подавать попеременно, то плюс, то минус, при этом он крутится в одну и ту же сторону. Вероятно, это за счет несимметричного магнитопровода. Или магнит в роторе специально кривой, не знаю.
магнитопровод несимметричный, там есть едва заметный скос. Сам недавно ковырял часы но для другой идеи.
Батарейка у вас красивая :)
Ага, такие батарейки будто специально для съемок выпускают, чтобы в рекламе никто не обвинил. В Икее продаются, кстати.
Меня бы такие часы жутко нервировали.
У дешевых китайских будильников секундная стрелка идет быстрее вниз от 0 до 30 секунд, чем вверх от 30 до 59. Безо всяких вмешательств.
гравитация неумолима
У меня до сих пор висит на стене самая лёгкая в изготовлении версия часов, выносящих мозг. Просто повешенные круглые часы вверх ногами. Вместо 12 перевернутое 6, и так далее. Тоже неплохой эффект вызывает у гостей. И делать ничего не надо.
Еще электронные часы можно перевернуть вверх ногами :)
Часы сумасшедшего Шляпника. :)
Очень напоминает движение планет по орбите, то замедляясь, то снова набирая обороты.
Нет, в движениях планет гораздо больше плавности и порядка. Но вашу идею можно развить: взять часы с эллиптическим циферблатом и заставить стрелку двигаться в соответствии с законами Кеплера. Отличный подарок какому-нибудь любителю астрономии получится.
И чтобы эллипсы были с разным эксцентриситетом и направлением большой оси. Как следствие циферблат нужен будет для каждой планеты-стрелки.
Если я не ошибаюсь, угловая скорость планет таки постоянна. В связи с этим-то и меняется скорость движения по орбите. Таким образом стрелке достаточно идти точно по кругу, удовлетворяя законам Кеплера.
Ошибаетесь, к сожалению.
http://skywatching.net/astro/kepler.php:
Чем ближе планеты к Солнцу, тем больше линейная и угловая скорости их обращения вокруг Солнца.
Согласен. Спутал.
Восхитительно :)
Чтобы побороть ограничение памяти, разбивайте не минуту, а 15 секунд), длину интервала храните в битах — по 4 бита в байт войдет 2 комплекта по 16 различных варинтов — от 1/4 до 4 секунд. Также можно хранить не в 1/4, а в интервалах 1/2 секунды и умножать на 2 сдвигом на 1 бит.
В общем 64 байта тут вполне достаточно будет, если слегка поразмышлять.
А часики получились забавные. Слегка нервные. )
очень крутой концепт!
Не думал, что бывает что-то лучше, чем часы, идущие в обратную сторону. Оказывается, бывает! :)
Это очень клёво!
Лучше сделать период повтора, например 43 или 47 секунды. Каждую минуту будет сдвиг и повторение не будет заметно.
сдвиг будет заметен визуально. человек не компьютер, чтобы ждать [43,60] и [47,60] секунд для повторения периода. можно поиграться с длительностью часа, например умножать каждую минуту исходное 47 на 53 по модулю 130 и получать количество секунд в текущей минуте. а у сумме выйдет sum([(47*(53**i))%130 for i in range(60)]) == 3600 == 60*60
Можно сделать примерно такой алгоритм. Задержку генерировать случайно, но при этом хранить в специальной переменной суммарную величину отставания/опережения. Как только эта величина выходит за допустимые рамки (30 секунд, например), каждый раз вычитать/прибавлять к случайной задержке один-два «тика», чтобы сместить случайные длительности в нужную сторону. Думаю, должно влезть в память без проблем.
Спасибо за идею, надо будет попробовать.
я бы предложил сдвигать по кругу точки сдвига
Не-е-е, то, что они идут назад — сразу выдаёт всю затею. Обычные, с рваным ритмом, круче в 10 раз.
Класс! Всегда «завидовал» таким людям как автор. Мне, чтобы удивить приходящих в офис, нужно повесить обычные часы на потолок, ну или на дерево за окном.
Сразу подумал, что это что-то полезное. Вроде как у всех время свое и идет по разному. Например утром пролетает быстрее к обеду замедляется, потом снова ускорение и снова медленнее. Теория относительности так сказать. Но как подстроить ход таких часов под свои внутренние часы и для чего это нужно? ))))
Супер! Но зачем?!
Вы уже третий (или четвертый?), кто это спрашивает :) Абсолютно низачем, примерно как The most useless machine.
Я делал что-то похожее, но как упражнение в кружке программирования на QBasic.
Смысл заключался в имитировании гравитации на секундную стрелку.
Циферблат разделен на 6 зон по 30 градусов: 0-2, 2-4, 4-6, 6-8, 8-10, 10-0.
При этом было 4 поведения стрелки:
0-2 и 4-6: 1,6Гц
2-4: 2Гц
6-8 и 10-0: 0,625Гц
8-10: 0,5Гц

Получалось что средняя частота — 1Гц и часы идут правильно. А поведение стрелки намекало на гравитацию, в правой части циферблата стрелка падала вниз с бОльшей скоростью. А в левой части циферблата устало карабкалась вверх.
Что-то не сходится у вас. Смотрите, в каждом секторе стрелка проходит одно секундное деление за:
0-2 и 4-6: 0,625 с
2-4: 0,5 с
6-8 и 10-0: 1,6 с
8-10: 2 с
Каждый сектор состоит из 10 делений (6*10=60). Тогда время полного оборота стрелки будет:
6,25 + 5 + 6,25 + 16 + 20 + 16 = 69,5 с, а не 60, как должно быть.
Подвох тут в том, что в «медленных» секторах стрелка находится дольше, чем в «быстрых», а значит «медленные» сильнее влияют на среднюю скорость. Простое усреднение частот приведет к ошибке.
Верно!
Мы никогда не ставили общий посчёт под сомнение. Ээх, где же Вы были 15 лет назад? =)
НЛО прилетело и опубликовало эту надпись здесь
статья хорошая. хотя признаться, начиная читать статью, думал Вы реализуете идею методом спиливания зубьев главной шестерни… ну чтобы как бы стрелка проскальзывала.
Ну и я влезу с идеями визуально неповторимости интервалов — перебирать элементы массива не последовательно, а с каким-то шагом k, взаимно простым с 60. Это гарантирует, что будут перебраны все интервалы. Забить десяток таких чисел и период последовательности будет уже 60*10=600 секунд
у Патриция из АнкМапорка стояли часы которые тикали совершенно рандомно… первая же асоциция
угу… хорошо пишет…
А я делал такой RFID-tag



Так, что вполне реально питать от малого напряжения. Пост зачётный. Даже горящий вопрос «а нафига» висит в воздухе :).
Во-вторых, фильтрующий конденсатор следует поставить танталовый, с минимальным током утечки.


Это точно фильтрующий конденсатор, а не резервный (оба шаблона описаны здесь)?
О терминологии можно спорить долго. Тот конденсатор, что по вашей ссылке называется фильтрующим, я всегда называл разделительным. А тот, что по питанию — фильтрующий или сглаживающий.
Чтобы не было кривотолков, исправил на «конденсатор в цепи питания».
Хорошо. Я с позиции новичка задал вопрос. Спасибо, что попытались внести ясность.
Я правильно понял, что вы этот конденсатор установили в своей схеме, чтобы резкое изменение в потреблении питания не отразилось на значении напряжения во всей схеме, т. е. чтобы оно было постоянно равно, скажем 1,8 вольт?
Совершенно верно, чтобы в момент включения двигателя не было просадки напряжения питания. Только 1.8 вольт там не будет. При свежей батарейке 1.4-1.5, а при севшей 0.8-1.0.
Лет 20 назад в одном из корпусов ФИАНа была обычная для учреждений того времени система часов: первичные и сеть вторичных, управляемая по проводу импульсами напряжением 24 вольта раз в минуту.
Первичные часы были местными мастерами переделаны таким образом что шли немного быстрее с 9 утра до 12 дня и с часа дня до 6 вечера, сохраняя суточный цикл. Таким образом немного увеличивалась длительность обеда и появлялась возможность свалить с работы минут на 20 раньше без палева.
А идею Вы случайно не Пратчеттали в книжке? У лорда Ветинари в приёмной именно такие висят
Случайно, нет. Изначально вообще планировалось переделать таким образом электронные часы (со светящимися цифрами). Про лорда Ветинари узнал из комментов к этому топику.
Забавно, как идеи пересекаются
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории