Site Loader

Содержание

Часы на Atmega8 и семисегментном индикаторе

Данные электронные часы, построенные на микроконтроллере Atmega8, оснащены легко читаемым светодиодным дисплеем, будильником с функцией повтора, функцией восстановления работы после отключения питания.

Характеристики часов

  • формат отображения времени: часы, минуты;
  • будильник с функцией повтора;
  • простое управление с помощью 2 кнопок;
  • поддержка работы от батарейки;
  • напряжение питания: 7…12В / 0,2 A;
  • размеры двух печатных плат: 60×21 мм, 58×44 мм.

Принципиальная схема часов показана на рисунке ниже. Схема часов должна быть запитана постоянным напряжением в диапазоне  7…12В.  Это может быть любой блок питания с нагрузкой по току не менее 200 мА.

Диод VD1 (1N4007) защищает схему от неправильной полярности подключения входного питания. Внешнее входное напряжение подается на стабилизатор DA1 (7805), а конденсаторы C3…C7 выполняют роль фильтра питания.

Работой часов управляет микроконтроллер Atmega8, а в качестве часов реального времени применена микросхема типа PCF8583. Связь PCF8583 с микроконтроллером осуществляется через I2C интерфейс.

В качестве дисплея используется модульный четырехзначный семисегментный дисплей с общим анодом. Дисплей подключается непосредственно к выводам микроконтроллера через ограничительные резисторы R1…R12.

К разъему CON5 платы можно подключить зуммер с генератором, который будет выступать в качестве звукового сигнала будильника. К клеммам SA1 и SA2 печатной платы подключаются кнопки, которые служат для ввода настроек и обслуживания часов.

Настройка времени и будильника

При нажатии кнопки SA1 попадаем в меню часов «Set1», где у нас есть возможность установки текущего времени, а еще одно короткое нажатие кнопки SA1 переводит нас в меню установки времени будильника «Set2».

Для выбора и изменения настроек служит кнопка SA2. После выбора как в режиме настройки времени, как и в режиме установки будильника на дисплее начнет мигать первая цифра, после чего можно установить десятки часов с помощью кнопки SA2.

Электрический паяльник с регулировкой температуры

Мощность: 60/80 Вт, температура: 200’C-450’C, высококачествен…

Очередное нажатие SA1 вызовет мигание второй цифры и с помощью SA2 можно установить единицы часов. Последующие два нажатия SA1 позволят установить десятки минут и единицы минут. Во время установки часов и минут устанавливается всегда только одна цифра. Пятое нажатие SA1 возвращает часы к нормальной работе. Также продолжительное время отсутствия нажатия кнопок завершает процедуры установки.

Во время работы часов длительное нажатие кнопки SA2 производит включение/выключение будильника. В момент активации будильника, на несколько секунд отображается время его запуска. Состояние будильника сигнализирует точка, размещена в четвертом разряде. Если будильник активен, этот индикатор горит.

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

По истечении 5 минут сигнал будильника будет запущен снова. Снова нажатием любой кнопки, его можно отложить еще на 5 минут, и т. д.

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

Работа часов протестирована в Proteus:

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

Скачать рисунок печатной платы, прошивку, модель в Proteus (34,7 KiB, скачано: 3 094)

Простые часы на микроконтроллере ATMega328p

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

Сам по себе проект ничего особенного собой не представляет — микроконтроллер Atmega328p и часы DS3231. Более-менее интересный момент только один — индикатор с общим анодом, но подключен к MAX7219, которая управляет индикаторами с общим катодом. Пришлось немного заморочиться с отображением цифр.

Хочется отметить (в первую очередь для себя, на будущее):

  • Откомпилированный код занимает чуть больше 3Кб, так что вполне можно было использовать Atmega8. Не самая большая проблема, конечно
  • Вот конкретно эти кнопки — ужасны. Использую их уже во второй поделке и плююсь. Срабатывания нечеткие, контакты ужасно дребезжат. На помойку.
  • Вследствие этого попрыгал с устранением дребезга — это лучше делать аппаратно, нежели программно.
  • Таймер DS3231 хороший, в одном корпусе с кварцем. Программируется очень просто. Один момент — в даташите прописано, что после каждого блока данных надо ждать ACK, но при этом оно зависает намертво. Зато прекрасно работает с NACK. Видимо, где-то глюк, но разбираться лень.
  • Разъем Micro USB показался мне более удобным и надежным. В предыдущих часах Mini USB и он уже разболтался, еле держит. Хотя часы — не мобильный телефон. Каждый день их никто туда-сюда не дергает.
  • Разъем программатора с шагом 1.27 мм тоже неплох в плане занимаемого места. Однако собственно разъем нужно подобрать какой-нибудь другой. Обычные pin head до одурения хлипкие.
  • Фоторезистор и динамическое управление яркостью — это очень, очень хорошо. В результате часы нормально читаются и на солнце, и ночью.

Встроенный в микросхему часов таймер имеет на борту датчик температуры, который безбожно врет. Возможно, это просто дефект конкретной микросхемы. А так больше никаких сюрпризов не было.

Собранная схема жрет в пике порядка 0.05А. В темноте — еще меньше.

Исходники и схема лежат в моём репозитории на гитхаб.

Простые часы на микроконтроллере AVR

Схема и программа очень простых часов на микроконтроллере AVR с использованием микросхемы реального времени DS1307

Доброго дня уважаемые радиолюбители!
Приветствую вас на сайте “Радиолюбитель“

Сегодня, уважаемые радиолюбители, вашему вниманию предлагается очень простая схема часов на микроконтроллере AVR и часов реального времени с последовательным интерфейсом I2C DS1307

.

Конструкция собрана на микроконтроллере ATyni26 (просто именно этот МК был под рукой). Но вы можете применить любой другой МК, главное чтобы у него было 13 свободных входов – 11 для вывода текущего времени на четырехразрядный семисегментный светодиодный индикатор и 2 вывода – на кнопки установки и коррекции времени.

Схема часов:

В схеме применены следующие детали:
— Микроконтроллер – ATyni26 в DID корпусе
– Часы реального времени – DS1307 в DIP корпусе
– Кварц – 32,768 кГц, с входной емкостью 12 пф (можно взять с материнской платы компьютера), от этого кварца зависит точность хода часов
– резервное питание DS1307 – 3 вольтовый литиевый элемент CR2032

– 4-разрядный семисегментный светодиодный индикатор – FYQ-5641UB -21 с общим катодом (ультраяркий, голубого цвета свечения)
– все транзисторы – NPN-структуры, можно применить любые (КТ3102, КТ315 и их зарубежные аналоги), я применил ВС547С
– микросхемный стабилизатор напряжения типа 7805
– все резисторы мощностью 0,25 ватт
– полярные конденсаторы на рабочее напряжение 50 вольт
Ток потребления устройством составляет до 30 мА.
Для питания конструкции можно использовать любое ненужное зарядное устройство от телефона или подходящий блок питания с выходным напряжением 7-9 вольт.
Общение микроконтроллера с часами DS1307 происходит по шине I2C и организовано программным путем.
Батарейку резервного питания часов DS1307 можно и не ставить, но в этом случае, при пропадании напряжения в сети, текущее время придется устанавливать заново.
Печатная плата устройства не приводится, конструкция была собрана в корпусе от неисправных механических часов. Светодиод (с частотой мигания 1 Гц) служит для разделения часов и минут в конструкции.

Работа программы.
Тактовая частота работы микроконтроллера – 1 мГц (заводская установка, FUSE-биты трогать и устанавливать не надо). Размер программы – 1 килобайт.
При запуске программы происходит:
— запуск таймера Т0 с предустановленной частотой СК/8 и вызовом прерывания по переполнению (при такой предустановленной частоте вызов прерывания происходит каждые 2 миллисекунды)

– инициализация портов (порты РА0-6 и РВ0-3 настраиваются на вывод, РА7 и РВ6 на ввод)
– инициализация шины I2C (выводы РВ4 и РВ5)
– при первом запуске, или повторном запуске при отсутствии резервного питания DS307, проверяется 7 бит (СН) нулевого регистра DS1307 и происходит переход в первоначальную установку текущего времени. При этом, кнопка S1 – для установки времени, кнопка S2 – переход к следующему разряду. Установленное время – часы и минуты записываются в DS1307 (секунды устанавливаются в ноль), а также вывод SQW/OUT (7-й вывод) настраивается на генерацию прямоугольных импульсов с частотой 1 Гц
– разрешается глобальное прерывание
– программа переходит в цикл с опросом копки S2
При переполнения счетчика таймера Т0 программа переходит к обслуживанию прерывания (каждые 2 мс):
– считывается текущее время с DS1307 которое записывается в четыре переменные SRAM (десятки часов, единицы часов, десятки минут, единицы минут)
– подпрограммой вывода текущего времени производится динамическая индикация текущего времени на светодиодном индикаторе
– при нажатии кнопки S2 программа запрещает глобальное прерывание и переходит в подпрограмму коррекции времени (кнопками S1 и S2 устанавливаются десятки и единицы минут, затем, с 0 секунд, нажатием кнопки S2 происходит запись уточненного времени в DS1307, разрешение глобального прерывания и возвращение в основную программу).

Примененные в схеме часы DS1307 позволяют выводить на индикацию секунды, минуты, часы, день недели, дату и год.
Если в схеме вместо светодиодных индикаторов применить LCD дисплей, к примеру WH0802 (двухстрочный, с выводом восьми символов в строке) или аналогичный, то можно организовать полноценные часы с полным выводом текущего времени, а питание устройства организовать от гальванических элементов или аккумуляторных батарей.

Расположение выводов микроконтроллера ATyni26:

Расположение выводов DS1307:

Типовая схема подключения D1307:

Рекомендуемая схема подключения кварца к DS1307:

Общение микроконтроллера с часами реального времени DS1307 организовано программным путем, поэтому в схеме можно применить микроконтроллер у которого нет аппаратного модуля I2C.

Программа написана в среде Algorithm Builder, и если вы используете эту программную среду, то сможете ознакомиться с алгоритмом общения микроконтроллера с другими устройствами по шине I2C (в алгоритме подробно прокомментирована каждая строчка).


  Даташит DS1307 на русском (312.1 KiB, 1,972 hits)

  Часы на ATyni26 в Algorithm Builder (8.2 KiB, 1,904 hits)

  Программа часов на ATyni26 в HEX коде (3.1 KiB, 1,770 hits)

  Схема часов в формате sPlan7 (119.3 KiB, 7,130 hits)



Часы-термометр на микроконтроллере ATmega8. V 2.0

Ага 🙂 опять часы.

    Что есть:
  • Два датчика температуры DS18B20.
  • Термостат с тремя временными зонами.
  • 10 будильников на каждый день недели.
  • Отсрочка сигнала, если будильник не отключить, срабатывает примерно через 5 мин.
  • Два будильника на отдельную ножку мк, вклоткл нагрузки.
  • Выбор отображения температуры (гашение не значащего нуля).
  • Яркость индикатора настраивается для дневного и ночного времени.
  • Изменяемый параметр плавно меняет яркость.
  • При пропадании 220 вольт потребление от батарей меньше 40 микроампер.
  • Будильник срабатывает при любом режиме питания.
  • Часы могут последовательно показывать до 8 режимов.
  • В схеме можно использовать индикаторы с общим анодом или катодом.

В часах есть возможность последовательно показывать 8 режимов, для которых выбирается один из десяти форматов отображения и время его показа.

Форматы отображения.
0

Число, День недели, Часы-минуты.

1

Часы-минуты-секунды.

2

Часы-минуты.

3

Часы-минуты, День недели.

4

Число_месяц_день недели.

5

Температура 1 датчик, Температура 2 датчик.

6

Температура 1 датчик (датчик дома).

7

Температура 2 датчик (датчик на улице).

8

Температура 1 датчик, Часы-минуты.

9

Температура 2 датчик, Часы-минуты.

A

Температура 1 датчик, Температура 2 датчик.

b

Температура 1 датчик, Температура 2 датчик.

В режимах где не указываются десятые градуса, точка определяет больше 0,5 гр..


Кнопка F — выход из режима. Выбор 3 основных режимов.
Кнопка SET — вход в выбранный режим. Далее переход к следующему параметру (мигающему полю).
Кнопка PLUS — плюс/on. В режиме SETUP листать главные меню.
Кнопка MINUS — минус/__(off). В режиме SETUP листать главные меню.

Все режимы, кроме нулевого и режима таймера, имеют завершение по времени. Если не было нажатий более 30 секунд, устанавливается режим ноль.

Режим 0
нажать F
SET — вход в режим будильников.
F
SET — вход в режим быстрой настройки термостата.
F
SET — вход в режим настроек.
F
Режим 0

Режим CALLS

on/__-будильник вкл/откл.
Дни недели, в которые сработает будильник (здесь в 6 и 7 день будильник выключен).
Будильники для управления нагрузкой.
Будильники A B вкл/откл. вывод call a_h мк. С его помощью вывод call a_h можно устанавливать до 23 часов 59 минут.
Устанавливается время, часы-минуты-секунды, на которое включится вывод call a_h. Затем идет установка дней.

Режим быстрой настройки термостата.

Слево-направо.
Температура первого датчика (термостат только по первому датчику).

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

Р1 — вывод термостата включен.
Р0 — выключен.
При изменении данного параметра, функция термостата отключается (чтоб не путалась под ногами и не перехватывала управление)..

В этом режиме, когда не редактируются параметры (нет мигающего поля), нет автозавершения по времени (режим наладки).

Режим SETUP.
Для записи значений в EEPROM нужно все значения в подрежиме подтвердить нажатием SET.
Пример: LIGHT    ->SET-> L.ooooo  ->SET-> НО4Ь L.2  ->SET->    LIGHT .

Главные меню режима SETUP.
ЧАСЫ PLUS MINUS листать основные режимы меню SETUP.
SET — вход в выбранный режим, далее переход к следующему параметру.
Что бы выйти из выбранного режима нажать F.
PORT
T-Stat
УSt SEE
УSt БУД
SIGNAL
LIGHT
DS18B20
СБРОС НАС.

Режим часы.

Устанавливаются: минуты, часы, день недели, число.
Месяц.
Корректировка секунд. Нажатие MINUS сбрасывает секунды в ноль. Если секунд было больше 31, то минуты инкрементируются.
Коррекция хода часов. Данная величина прибавляется или вычитается каждый час. Шаг 0.008 секунды. (50 значений), максимальное значение 0.391. Пример расчета: при коррекции равной нулю измеряется уход часов, например за 5 дней часы убежали на 3 секунды, тогда коррекция ровна 3/(5*24)=0.025.

Режим PORT.

Port Установить/сбросить ножку будильника A..H. call a_h.

Режим настроек термостата.

Режим Уст SEE.

В нулевом режиме часы показывают попеременно до 8 режимов, для которых выбирается один из десяти форматов отображения и время его показа (верхняя таблица).
P1 выбор режима.
r0 выбор одного из десяти форматов отображения.
r0-003 время, которое будет виден выбранный режим.
При времени равном 000 режим выключен.

Режим УSt Буd. Установки будильника.

Bip сигнал будильника — ШИМ.
Pin сигнал будильника — уст в 1 вывод буд.
Oba Шим и вывод.
Отсрочка сигнала.
Задаётся число отсрочек сигнала.
При откл. отсрочке (00) будильник выключается нажатием любой клавиши.
При вкл. отсрочке сигнала будильник откл. кнопкой F, при нажатии кнопок SET PLUS MINUS сигнал отключается, но опять сработает примерно через 5 минут.
При активной отсрочке сигнала, в нулевом режиме, мигает точка последнего разряда.
Отключение отсрочки (при отсутствии сигнала). В режиме 0, нажатие SET вкл. этот режим. Наличие активной отсрочки индуцирует символ о на 4 знакоместе. Нажатие PLUS MINUS выключает отсрочку.

Режим DS18B20.

Датчики температуры DS18B20.
Режим показывает, как определилось подключение датчиков, и настраивает датчики на разрешение 12 бит.
Выбор отображения температуры.
1 — 07.5
2 — &nbsp 7.5 гашение нуля.
on — датчик подключен 3 проводами;
PA.- паразитное питание, датчик подключен 2 проводами;
— — датчик отсутствует.
При выходе из этого режима датчики настраиваются на разрешение 12 бит.

Режим Light.

Настраивается яркость для дневного времени.
Для ночи.
Ночное время.

Режим Сигнал.

SIGNAL после входа в режим кнопками плюс/минус выбирается:
budil. S или button. S
соответственно частота ШИМ для будильника и кнопок.
При входе в эти подрежимы на индикаторе:
H004.L000.
Частота генерируется в режиме быстрой шим(CTC mode). Верхний порог задается регистром OCR1A1. H004-старший байт L000-младший байт.
Что бы отключить сигнал от нажатия кнопок — установить H000 L000.
Если в режиме УSt Буd.выбрана опция PIN, для будильника шим сигнал выводится не будет.

Режим Сброс настроек.

По нажатию SET: Установка по умолчанию основных переменных в программе, обнуление всех будильников. Запись этих значений в EEPROM.

Действия в нулевом режиме.

F — выбор режима.
SET — режим отмены отсрочки сигнала
PLUS — режим Уст SEE.
MINUS — установка будильников.


Каждый час, на одну секунду, устанавливается вывод PB2(16).

Для экономии, в режиме питания от батарей запрещается отсрочка сигнала.


Схема.

Из схемы можно исключить конденсаторы к кварцу, если запрограммировать fuse бит CKOPT.

Датчик температуры можно подключить двумя проводами, для этого у датчика нужно замкнуть GND c VDD, при этом включается режим паразитного питания. Такой способ удобно применять для датчика, который расположен на улице. По программе перед каждым циклом чтения температуры выполняется проверка на замыкание и на присутствие датчика. При любом криминале вывод мк. переводится в Z состояние, на индикаторе: —.
Если первый датчик используется в режиме термостата, то он должен быть подключен 3 проводами.

Если будильник настроить на включение вывода, то можно использовать чип от музыкальной открытки.


При прошивке мк установите биты CKSEL3..0 в 0011 (внутренний RC генератор 4 Meg ). посмотреть для PonyProg. Cбросить основные переменные в программе — SETUP -> СБРОС НАС. -> SET.


Паяем простые электронные часы на базе ATmega328P

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

Честно говоря, поначалу я хотел сделать электронные часы основанными на микросхемах стандартной логики 74xx и таймере 555. То есть, безо всяких микроконтроллеров. Как оказалось, это вполне реально, и потребует всего лишь пары логических И. Однако, такие часы оказались не очень точными. С помощью потенциометров можно установить частоту таймера очень близкой к 1 Гц, но недостаточно близкой. Мои эксперименты показали, что за год такие часы начнут врать часов на 8, и это в лучшем случае. Плюс к этому, такие часы физически будут занимать больше места, чем основанные на микроконтроллере, не говоря уже о том, что их функционал будет крайне сложно расширить (скажем, добавить будильник). В итоге от идеи полностью аналоговых часов пришлось отказаться. Тем не менее, рекомендую подумать над схемой таких часов в качестве упражнения.

Первая версия часов, основанная уже на ATmega328P, выглядела так:

Как извлечь микроконтроллер из Arduino мы знаем благодаря заметке Как собрать Arduino прямо на макетной плате. Семисегментные индикаторы и счетчики 4026, надеюсь, вы узнали. К сожалению, у микроконтроллера недостаточно пинов для того, чтобы управлять всеми индикаторами напрямую, а как это сделать без использования счетчиков 4026 мы еще не проходили.

Принцип работы следующий. Раз в 50 мс микроконтроллер просыпается, шлет всем счетчикам Reset, а затем посылает каждому из них сигналы инкремента в количестве, соответствующем цифре, которую должен отобразить индикатор, подсоединенный к счетчику. То есть, на самом деле индикаторы сбрасываются и выставляются заново 20 раз в секунду, но визуально это совершенно незаметно.

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

Код прошивки:

#include <Arduino.h>

/* inc/dec buttons */
const int HINC_PIN = A5;
const int HDEC_PIN = A4;
const int MINC_PIN = A3;
const int MDEC_PIN = A2;

/* pin to 4026 IC’s reset inputs */
const int RESET_PIN = 5;

const int DOT_PIN = 8;

/* pins to 4026 IC clock inputs */
const int HPIN_H = 10;
const int HPIN_L = 9;
const int MPIN_H = 7;
const int MPIN_L = 6;

/* current time */
int hour = 0;
int min = 0;
int sec = 0;
int msec = 0;

bool hinc_released = true;
bool hdec_released = true;
bool minc_released = true;
bool mdec_released = true;

unsigned long prevMillis;

void setup()
{
  pinMode(HDEC_PIN, INPUT);
  pinMode(HINC_PIN, INPUT);
  pinMode(MDEC_PIN, INPUT);
  pinMode(MINC_PIN, INPUT);

  pinMode(RESET_PIN, OUTPUT);
  pinMode(DOT_PIN, OUTPUT);

  pinMode(HPIN_H, OUTPUT);
  pinMode(HPIN_L, OUTPUT);
  pinMode(MPIN_H, OUTPUT);
  pinMode(MPIN_L, OUTPUT);

  prevMillis = millis();
}

void displayTime()
{
  digitalWrite(RESET_PIN, HIGH);
  digitalWrite(RESET_PIN, LOW);

  digitalWrite(DOT_PIN, (sec & 1) ? HIGH : LOW);

  for(int i = 0; i < min % 10; i++)
  {
    digitalWrite(MPIN_L, HIGH);
    digitalWrite(MPIN_L, LOW);
  }

  for(int i = 0; i < min / 10; i++)
  {
    digitalWrite(MPIN_H, HIGH);
    digitalWrite(MPIN_H, LOW);
  }

  for(int i = 0; i < hour % 10; i++)
  {
    digitalWrite(HPIN_L, HIGH);
    digitalWrite(HPIN_L, LOW);
  }

  for(int i = 0; i < hour / 10; i++)
  {
    digitalWrite(HPIN_H, HIGH);
    digitalWrite(HPIN_H, LOW);
  }
}

void loop()
{
  unsigned long currMillis;
  unsigned long delta;

  delay(50);

  currMillis = millis();
  delta = currMillis — prevMillis;
  prevMillis = currMillis;
  msec += delta;

  while(msec >= 1000)
  {
    msec -= 1000;
    sec++;
    if(sec == 60)
    {
      sec = 0;
      min++;
      if(min == 60)
      {
        min = 0;
        hour++;
        if(hour == 24)
          hour = 0;
      }
    }
  }

  displayTime();

  if(digitalRead(HDEC_PIN) == LOW)
  {
    if(hdec_released)
    {
      hdec_released = false;
      hour—;
      if(hour < 0)
        hour = 23;
    }
  } else
    hdec_released = true;

  if(digitalRead(HINC_PIN) == LOW)
  {
    if(hinc_released)
    {
      hinc_released = false;
      hour++;
      sec = msec = 0;
      if(hour > 23)
        hour = 0;
    }
  } else
    hinc_released = true;

  if(digitalRead(MDEC_PIN) == LOW)
  {
    if(mdec_released)
    {
      mdec_released = false;
      min—;
      sec = msec = 0;
      if(min < 0)
        min = 59;
    }
  } else
    mdec_released = true;

  if(digitalRead(MINC_PIN) == LOW)
  {
    if(minc_released)
    {
      minc_released = false;
      min++;
      sec = msec = 0;
      if(min > 59)
        min = 0;
    }
  } else
    minc_released = true;
}

Процедура millis() возвращает количество миллисекунд, прошедшее с момента запуска микроконтроллера. Мы не можем считать, что между двумя вызовами delay(50) в процедуре loop() проходит ровно 50 миллисекунд, так как исполнение остального кода вносит значимую задержку. При таком подходе часы быстро начнут врать. Поэтому мы измеряем реально прошедшее время при помощи millis().

Питание я решил подавать по USB. Мне не хотелось постоянно менять батарейки, а USB-кабелей и зарядников в любом доме нынче в избытке. Плюс у меня есть USB-аккумулятор, благодаря которому часы не перестанут идти, если внезапно отключат свет. Но если вам больше нравятся батарейки, часы будут прекрасно работать от двух батареек AA или одной CR2032.

Плата, как несложно догадаться по форме дорожек, была разведена вручную. Изначально я пытался сделать ее при помощи ЛУТ. Но поскольку это был мой первый опыт изготовления двухсторонней печатной платы, я не учел, что расстояние между отверстиями и дорожками на обратной стороне стоит сделать побольше. Пару отверстий я просверлил не совсем под прямым углом. В итоге на обратной стороне сверло вышло вовсе не там, где нужно, повредив дорожки. Я пытался исправить ошибку, навешивая «сопли», но не преуспел — плата так и осталась нерабочей. Изготовление двухсторонней платы 11x9 см занимает довольно много времени. Поэтому вместо того, чтобы переделывать плату, я просто заказал ее на Резоните.

Если вы полны решимости сделать такие же часы и собираетесь изготовить плату при помощи ЛУТ, советую переделать плату в одностороннюю. На второй стороне почти нет дорожек, вместо них можно использовать обычные провода. Если же вам интересно поупражняться в изготовлении двухсторонних плат, советую ее слегка увеличить, хотя бы до 12x10 см, и сделать так, чтобы дорожки на обратной стороне были как можно дальше от каких-либо отверстий. Травление двухсторонних плат происходит так. Травиться первая сторона, вторая при этом заклеивается скотчем. Сверлиться три отверстия. Тонер на вторую сторону наносится по ним. Затем первая сторона заклеивается и травиться вторая.

Исходники двух версий прошивок, для часов с секундами и без, а также исходники платы в формате EAGLE вы найдете в этом репозитории на GitHub. Стоит отметить, что на самом деле часы лучше делать совсем не так. Как уже отмечалось, можно обойтись вообще без счетчиков 4026. Большинство компонентов можно заменить на компоненты для поверхностного монтажа. За счет этого часы получаться компактнее, их будет проще сделать ЛУТом, и отверстий придется сверлить намного меньше. Кроме того, раз уж мы все равно использовали микроконтроллер, стоит добавить в часы будильник и термометр, а также синхронизировать время при помощи GPS. Увы, мы со всем этим еще не знакомы, но непременно скоро познакомимся.

А какие улучшения предложили бы вы?

Дополнение: См также заметки Научился выводить текст на ЖК-индикатор из Arduino и Два способа мультиплексирования светодиодов на примере микроконтроллеров AVR.

Метки: AVR, Электроника.

ЧАСЫ НА ATMEGA

   Всем привет! В этой статье мы поговорим о том, как сделать простые, а самое главное достаточно точные часы на микроконтроллере Atmega8. Простота в этих часах в том, что их может собрать любой начинающий радиолюбитель, хоть немного разбирающийся в микроконтроллерах. Проект возможен как вариант для первой сборки схемы на микроконтроллере. Минимум времени, минимум затрат, минимум нервов 🙂

Схема часов на Atmega8


    Для сборки устройства нам понадобятся:

— Кварц на 32768 МГц 1 шт
— Микроконтроллер Atmega8 1шт.
— Семисегментный светодиодный индикатор с общим катодом 4-х разрядный.
— Две обычные кнопки (не фиксирующиеся)
— Панелька под микросхему (28 ног)
— Провода, или же шлейф.
— И, естественно, программатор, чем будем програмировать МК.

   Прошивку скачать можно тут — вот ссылка на файл. Для программирования берите любую подходящую схему. Вобщем приступим к сборке часов… Резистор из схемы можно исключить. Паяем провода к панельке соответственно схеме и кварцевый резонатор.


   Далее паяем выводы к индикатору. Индикатор у меня 9-ти разрядный, т.к 4х разрядный сгорел, пришлось использовать какой был… Но не забываем про то, что можно сделать его и из двух индикаторов 2-х разрядных, один 4-х разрядный, из одноразрядных 4-х штук можно сделать 4-х разрядный, подсоединив паралельно все ноги кроме общего катода.


   Теперь очередь кнопок для регулировки времени. Паяем к 27 и 28 ногам микроконтроллера Atmega8.


   И припаиваем на общий (минус) остальные выводы от кнопок, хорошо герметизируем, дабы не было КЗ.


   Часы сделаны и готовы к использованию. Осталось поместить в корпус. Ниже, можно посмотреть видео работы данных часов, точность часов совподает с реальными, сверял, и ставил на недельную работу, часы не убежали и не отстали ни на минуту!

Видео — часы на МК


   Блок питания подбирайте исходя из типа индикаторов и установленногой яркости (тока). Можете вообще использовать батарейки. Но лучше собрать отдельный блочок — в корпусе с часами. С вами был [PC]Boil.

   Форум по микроконтроллерам

   Форум по обсуждению материала ЧАСЫ НА ATMEGA

Часы

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

Автомобильные часы — вольтметр на ATtiny261

Этот простой прибор предназначен для установки в автомобиль и включает в себя функции отображения времени и напряжения бортовой сети в пределах 10… 16B.

Автор: u33

7 0
[0]

Часы на газоразрядных индикаторах

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

Автор: BARS_

991 4.9
[9]
Похожие статьи:

Таймер присутствия на PIC16F628A

Таймер присутствия каждый день на определенное время включает свет, создавая эффект присутствия. А также часы с резервным питанием.

Автор: VIG

4 0
[0]

Часы на газоразрядных индикаторах с ATmega8

Часы размещены в деревянном корпусе, сделанным «Под старину» — настоящее украшение для любого дома! В конструкции используются четыре газоразрядных индикатора LC513. Для точного расчета времени применена микросхема PCF8583. Сердцем устройства является микроконтроллер ATMega8. Чтобы не настраивать заново время при отключении питания, используется электролитический конденсатор высокой емкости. Лампы питаются от напряжения 150В.

Автор: dossalab

25 0
[0]
Похожие статьи:

LED часы на ATtiny2313 и DS1307

LED часы на семисементных индикаторах на микроконтроллере ATtiny2313 и микросхеме DS1307. Считают время даже когда выключены!

Автор:

139 4.4
[5]
Похожие статьи: 2012 г.

Часы на Arduino с использованием стандартного индикатора

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

Автор: Т@р@с

2 0
[0]

Электронные часы-будильник на газоразрядных индикаторах и МК

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

Автор: crazzian

408 4.9
[7]
Похожие статьи:

Модернизация бортового компьютера на ATmega8

После публикации статьи Бортовой компьютер (часы, двухканальный термометр, вольтметр на ATmega8 и LCD 16х2) прошел уже почти год, и за это время я получил много писем с просьбами изменить прошивку под нужды пользователей. Я решил добавить в схему устройства кнопки, организовать меню с настройками, чтобы каждый мог настроить БК под себя.

Автор: u33

382 5
[6]
Похожие статьи: Весь список тегов

AVR Смотреть v2 | Hackaday.io

Здесь я покажу вам, как я подготовил свой файл макета для переноса тонера.

Это довольно просто, но не особо прямолинейно.

Начав с готового макета платы в орле, щелкните значок отображения слоев.

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

щелкните «Нет», затем выберите только верх, низ, контактные площадки и переходные отверстия.

Ваш обзор теперь будет выглядеть так:

После того, как у вас есть это представление, пора экспортировать изображение.

Щелкните файл> экспорт> изображение

Установите произвольно высокое разрешение. Я использую где-то около 1024. Обязательно проверьте окно, так как это сэкономит место. НЕ проверяйте монохромный! Сохраните изображение и выйдите из орла.

Откройте изображение в gimp.

  1. добавьте альфа-канал, нажав «Слой»> «Прозрачность»> «Добавить альфа-канал».
  2. Используйте инструмент выбора цвета, чтобы выделить весь черный цвет, затем нажмите «Удалить».

3. Теперь выберите «Нет».Наша цель — распечатать один лист и сложить его пополам, выровнять слои, а затем согнуть, чтобы мы могли просто вставить пустую доску для переноса тонера. Итак, чтобы сделать это, нам понадобится способ выровнять слои. Для этого мы добавим направляющие на каждом конце. это могут быть простые крестики или что-то более сложное, если по одному на каждом слое в одной и той же позиции. Для этого я использую пару окторпов.

Обратите внимание, что в версии для печати я немного отредактировал дизайн и использовал более крупный жирный шрифт для выравнивания octothorpes.

Также это хорошее время для размещения любых символов или рисунков. Я просто использую свои инициалы, используя шрифт halo. Я печатаю их белым, чтобы они были выгравированы. (Хорошая практика — сохранить как можно больше меди, чтобы сэкономить травитель, но это просто быстрее.)

Далее идет извилистая часть, разделяющая и переворачивающая слои.

4. Объедините все слои вниз. затем измените размер холста на 200% ширины, 100% высоты, не центрируйте. Используйте изображение> размер холста.

скопируйте видимое изображение, используя Edit> Copy visible

Вставьте его как новый слой, используя Edit> Insert as> new layer

В диалоговом окне слоев выберите дублированный слой, щелкнув по нему.

Отразите слой по горизонтали, используя слой> преобразовать> отразить по горизонтали.

Если вы уменьшите масштаб, вы должны увидеть следующее:

левое изображение будет нижним слоем, правое и обратное изображение будет верхним. Помните, что у орла красный — это верх, синий — низ, а зеленый — переходные отверстия. Это будет важно.

4. Удалите части, не относящиеся к слою.

Для нижнего (левого) слоя вы хотите удалить сплошной красный цвет, оставив зеленый, синий и фиолетовый.для этого используйте инструмент выбора цвета и щелкните КРАСНУЮ область. (сначала убедитесь, что у вас выбран правильный слой!) нажмите «Удалить», чтобы сделать область прозрачной.

Затем выберите другой слой и сделайте то же самое для синего.

5. объедините слои, щелкнув правой кнопкой мыши верхний слой и выбрав объединить вниз. Затем переключитесь на монохромный, щелкнув Цвета> порог. сдвиньте ползунок вправо, пока доска не станет черной. и нажмите ОК.

Теперь просто сгладьте изображение, используя Image> Flatten image.

6. Последние детали. Если хотите, заполните переходные отверстия заливкой из ведра.

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

7. Экспорт! щелкните файл> экспортировать как. Выберите формат переносимого документа, дайте ему имя и сохраните его! (не ставьте галочки)

Еще не печатайте!

Далее готовим бумагу к печати.

DIY Digital Wristwatch — Zak’s Electronics Blog ~ *

Основным стимулом для этого проекта было увидеть, сколько я могу втиснуть, с точки зрения аппаратного и программного обеспечения, в устройство, подобное наручным часам, размером не больше самого дисплея .OLED-дисплей был выбран из-за того, что он имеет толщину всего 1,5 мм и не требует подсветки (каждый пиксель излучает свой свет), а в основном потому, что он выглядит круто. Изначально в часах планировалось установить дисплей с диагональю 0,96 дюйма, но оказалось слишком сложно разместить под ним все, что я хотел. Увеличение размера до 1,3 дюйма было идеальным.



Схема наручных часов


На аппаратной стороне часы содержат микроконтроллер Atmel ATmega328P, регулятор 2,5 В, Maxim DS3231M RTC, 1.Монохромный OLED-дисплей 3 ″ 128 × 64, 2 светодиода (красный и зеленый), зуммер, 3-позиционный переключатель для навигации, питание от LiPo-аккумулятора емкостью 150 мАч, который можно заряжать через USB и 2 печатных платы (хотя одна печатная плата используется только как подъемник для OLED).

ATmega328P использует свой внутренний генератор 8 МГц и работает от линейного стабилизатора 2,5 В. Его ток потребления составляет около 1,5 мА в активном состоянии и 100 нА в спящем режиме.

DS3231M RTC — это превосходный чип, размещенный в небольшом 8-выводном корпусе, который включает в себя встроенный резонатор MEMS с температурной компенсацией с точностью ± 5 ppm (± 2 минуты 40 секунд в год).Требовались только развязывающий конденсатор и несколько дополнительных подтягивающих резисторов. RTC подключен так, что вместо подачи питания на вывод VCC он подается на вывод Vbat, что снижает потребление тока с примерно 100 мкА до 2,5 мкА.
К сожалению, этот чип, кажется, очень трудно достать по разумной цене, если вы не в США. Пришлось получить свои в качестве образцов.

В цепи зарядки батареи используется Microchip MCP73832 вместе с некоторыми дополнительными компонентами для распределения нагрузки, при которых батарея может заряжаться без вмешательства в нее остальной части часов.

Вы могли заметить на схеме, что светодиоды напрямую подключены к микроконтроллеру без каких-либо резисторов. Внутренние полевые МОП-транзисторы микроконтроллера имеют сопротивление включения около 40 Ом, поэтому при напряжении питания 2,5 В и светодиодах с 2 В f через светодиоды проходит около 12,5 мА. Я хотел бы иметь синий светодиод, но падение напряжения для них обычно превышает 3 В, что потребовало бы дополнительных резисторов и полевого МОП-транзистора.

Поскольку микроконтроллер работает на 2.5V необходимо немного снизить напряжение батареи, чтобы получить показания АЦП. Это делается с помощью простого делителя напряжения. Однако с делителем напряжения, подключенным к батарее, через него будет постоянно протекать ток около 350 мкА, это огромная трата энергии. Был добавлен P-MOSFET (и некоторое преобразование уровня напряжения для него, о котором я забыл в первой версии, поэтому он всегда оставался включенным), поэтому делитель можно включать только при необходимости.

Используемый стабилизатор 2,5 В — это Torex XC6206, выбранный в первую очередь из-за его крошечного тока покоя, составляющего всего 1 мкА.
Почему линейный регулятор, а не импульсный? Импульсные регуляторы, на которые я смотрел, имели КПД не менее 80% при нагрузке 2 мА, но этот КПД быстро упал до менее 50% при нагрузке 100 мкА. Поскольку устройства, подключенные к регулятору, потребляют 2–3 мкА в спящем режиме, импульсный стабилизатор работал бы очень плохо по сравнению с линейным регулятором. Эффективность линейного регулятора 2,5 В составляет 60% при входном 4,2 В до 83% при входном 3 В.

Нижняя сторона

Верхняя сторона, под дисплеем

Итак, в нашем распоряжении есть красивый OLED-дисплей и 32 Кбайт программного пространства. Разве мы не можем иметь больше, чем просто время и дату?

Много времени было потрачено на оптимизацию кода рендеринга, которая, короче говоря, включает в себя копирование растровых изображений из флэш-памяти в буфер кадра в ОЗУ и отправку буфера кадра через SPI на OLED.Конечным результатом была возможность поддерживать 100+ кадров в секунду почти во всех областях часов с 8-мегагерцовым AVR. Однако, поскольку анимация основана на кадрах, а не на времени, и для экономии энергии, частота кадров ограничена 60 кадрами в секунду.

Некоторые из основных анимированных элементов:

  • ЭЛТ-анимация при входе и выходе из спящего режима (похожа на ЭЛТ-анимацию, которая есть на некоторых смартфонах Android).
  • Основные временные числа имеют эффект тикера.
  • Меню имеют анимацию прокрутки влево / вправо, и при выборе параметра текущее меню выпадает с экрана, а следующее выпадает.
  • Установите до 10 сигналов тревоги.
    Количество сигналов тревоги ограничено только объемом доступной EEPROM.
  • Каждый будильник имеет час, минуту и ​​дни недели, когда он должен быть активен.

Меню сигналов тревоги

Breakout

Автомобиль dodge

Фонарик
Включает все OLED-пиксели и светодиоды, также имеет режим стробоскопа

Секундомер

3 Регулятор громкости канала

    таймаут
  • Яркость дисплея
  • Анимации
    Вы же не собираетесь их выключать, правда?

Настройки громкости

В «активном» режиме микроконтроллер пытается максимально уйти в спящий режим.В режиме ожидания контроллер будит каждую миллисекунду, чтобы увидеть, нужно ли что-то обновлять, если нет, он возвращается в режим ожидания, это обычно занимает менее 100 мксек, если дисплей не нуждается в обновлении. В этом режиме потребляемый ток может составлять от 0,8 до 2 мА, в зависимости от того, сколько времени требуется для отрисовки кадров (быстрое время отрисовки кадра = больше времени в режиме ожидания).

В «спящем» режиме микроконтроллер выключает OLED-дисплей и переходит в спящий режим с пониженным энергопотреблением, в котором он просыпается только нажатием кнопки, сигналом RTC или подключением USB.В этом состоянии микроконтроллер потребляет ~ 100 нА.

В спящем режиме общий ток, потребляемый часами, составляет около 6 мкА. В активном режиме потребляемый ток может варьироваться от 2 мА до более 70 мА, хотя обычно потребляемый ток составляет 10 мА.


Срок службы батареи в различных режимах
Емкость батареи: 150 мАч
Минимум
(спящий режим)
Типичный
(основной дисплей времени)
Высокий
(фонарик)
6uA
2,85 года
10 мА
15 часов
64 мА
2 часа 20 минут

Если часы находятся в активном режиме в среднем 1 минуту в день (с 5-секундным таймаутом сна, который будет проверять время 12 раз в день) и все каналы громкости установлены на минимум, часы должны работать около 1 года и 4 месяцев без подзарядки.


Пробой по току (типовой) 8,5190 500192 мА / 9018 мА / и т. 1uA
Деталь Ток
ATmega328P (спящий / активный) 100 нА / 1,5 мА
OLED (спящий / активный)
DS3231M RTC 2,5 мкА
Диод Шоттки (D1) (обратная утечка) 1 мкА
Регулятор (ток покоя) 1 мкА
Всего (спящий / активный) 6.1uA / 10mA

В первой версии было несколько проблем:

  • Добавлено преобразование уровня для P-MOSFET АЦП.
    Без преобразования уровня P-MOSFET всегда был включен. Чтобы выключить P-MOSFET, напряжение затвора должно быть примерно на том же уровне, что и напряжение его источника (который подключен к батарее), но микроконтроллер выдавал только 2,5 В.
  • Добавлен понижающий резистор затвора для полевого МОП-транзистора, управляющего эхолотом.
    Затвор полевого МОП-транзистора был плавающим, когда микроконтроллер был запрограммирован, что приводило к включению полевого МОП-транзистора и пропусканию неимпульсного тока через звуковой сигнализатор, что, вероятно, не годилось для него.
  • Большие контактные площадки для разъема MicroUSB.
    Обычно разъемы SMD MicroUSB имеют пайки по бокам и должны иметь дополнительные контактные площадки под пайкой, но, поскольку они припаяны вручную, нижняя часть недоступна. Без дополнительных площадок для пайки разъем USB шатался, поэтому некоторые контакты разъема в конечном итоге сломали паяные соединения. Чтобы решить эту проблему, я увеличил боковые контактные площадки для пайки так, чтобы разъем можно было припаять по всей его стороне, а не только за язычок. Больше никаких шатких разъемов.

Из 3 OLED-дисплеев 2 погибли через несколько минут после подключения к часам. Один с Ebay, другой с AliExpress. Я до сих пор не уверен, почему они умерли, может просто китайское качество? Тот, который работал, тоже был с Ebay.

  • Программирование через USB.
    На данный момент нужно воткнуть 4 провода в плату (программирование SPI) и потом надеяться, что они не выпадут при программировании.
  • Добавьте датчик уровня топлива IC.
    На данный момент уровень заряда батареи определяется по ее напряжению, это не очень точный метод определения оставшегося заряда батареи.
  • Другой микроконтроллер.
    Текущая прошивка использует ~ 28 КБ из 32 КБ доступного программного пространства в ATmega328P, другой микроконтроллер с дополнительным пространством для программ и, вероятно, потребуется больше оперативной памяти, чтобы добавить больше вещей, например, калькулятор пространство программы). Тем не менее, ATmega328P имеет больше всего программного пространства для AVR в 32-контактном корпусе TQFP, и чтобы иметь больше программного пространства, мне пришлось бы использовать 44-контактный AVR. Интересно выглядит ATmega1284.
  • Регулятор переключения, регулятор нагнетательного насоса или, может быть, гибридное решение?
    Линейный регулятор, который используется в настоящее время, не особенно эффективен, а импульсные регуляторы не очень хороши с низким потреблением тока. Возможно, регулятор накачки заряда или гибридное решение для переключения между линейным регулятором для спящего режима и импульсным регулятором для активного режима?
  • Случай какой-то?
Исходные тексты доступны на GitHub
nF 9019 9019 9019 9019 9019 9019 9019 9019
Схема Деталь / значение Описание Количество
U1 Atmel ATmega328CP Микроконтроллер зарядное устройство IC 1
U4 XC6206P252MR 2.Регулятор LDO 5 В 1
U2 DS3231MZ + RTC 1
Q1, Q2 DMP1045U P-9019 DM019 9019 9019 9019 9019 9019 9019 N-MOSFET 2
D1 ZLLS410 Диод Шоттки 1
D2 TS4148 Высокоскоростной диод 1 Конденсатор 1
C4, C6, C7 100nF Конденсатор 3
C3, C8, C9, C10 C10 2,2 мкФ Конденсатор 1
C1, C2, C11 4,7 мкФ Конденсатор 3
R4, R8, R10 100 R6 2.7K Резистор 1
R5 7.5K Резистор 1
R7 10K Резистор 1
R2, R3, R11 47K Резистор 3
R9 390K Резистор 1
Резистор сетевой 1
LED1 LED (зеленый) LED 1
LED2 LED (красный) LED 1
LS1 Магнитный датчик LS1 Магнитный датчик 1
SW1 3-позиционный переключатель навигации 1
Разъем MicroUSB (Ebay) 1
OLED1 OLED (Ebay / AliExpress) 1 1
Основная плата 1
Плата подъемника дисплея 1
1

Показано на
Atmel, HackADay, Electronics Lab, adafruit

Водонепроницаемость до 0 метров!

Бинарные часы ATmega8

Бинарные часы ATmega8 Главная ==> AVR-EN ==> Приложения ==> Бинарные часы Diese Seite на немецком языке:

Обзор

  1. BCD-дисплей как альтернатива 7-сегментному дисплею
  2. Контроллер Der
  3. Блок питания
  4. Крепление Der
  5. Программное обеспечение Die
  6. Руководство пользователя

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

Концепция этих часов восходит к тем временам. Отображаемые числа необходимо сложить вместе и не всегда можно использовать как числа на 7-сегментном дисплее. Сложение двоичных единиц, двоек, четверок и восьмерок сохраняет ваши мозг работает.

Вот как выглядят часы в 24:00:

Все лампы в часах выключены. Темно, но только на одну короткую секунду.

Теперь давайте посмотрим на другое время.Сейчас 23 часа 59 минут 47 секунд.

Теперь числа слева, которые являются степенями два, вступите в игру. Самая левая десятичная дробь — это два, так что 2 лампы горит. Второй десятичный знак равен пяти, поэтому горят 4 лампы и 1 лампа, в сумме получается пять. И так далее в течение 10 минут, минут, 10 секунд. и секунды.

Недостающие лампы, такие как 4- и 8-ламповые 10-х, вызвано нашей сумасшедшей системой даты и времени. Система времени основан на древней дюжине (12) и пятикратном это (60, по-немецки: Шок, я не могу найти английский термин для этого, похоже, это время истекло).Эти древние системы счисления сохранились и в наше время системе (и в британской монетной системе), хотя совершенно ненужно. Это то, что делает компьютер программирование в наши дни так сложно.

А теперь сравним эту систему отображения с обычным Семисегментная система отображения. Чтобы отображать время с помощью в указанном выше разрешении нам понадобится шесть из тех 7-сегментных дисплеев, которые включают 42 светодиода (фактически 48 с десятичная точка, которая нам здесь не нужна). В бинарным часам нужно всего 20 светодиодов, половина от обычного система отображения.Ресурсы и текущее потребление делится вдвое. По тем временам это был очень веский аргумент.

Ученые-компьютерщики называют наш шестизначный двоично-десятичный код. Тот означает цифру в двоичном коде. Мы увидим в главу Программное обеспечение, для которого это отличная пища микроконтроллеры, и что он используется для обработки эта еда превосходно.

Почему именно контроллер?

Сначала рассмотрим классический тип CMOS Xtal. управляемые 7-сегментные часы:

Это означает набор из 12 интегральных схем с 14 или по 16 контактов (всего около 160 контактов), 42 угольные резисторы и шесть 7-сегментных дисплеев с 42 светодиода.Эти компоненты составляют полный стандарт Печатная плата (160 на 100 мм). Плюс примерно 350 токопроводящих пути. Настоящая могила CMOS, дорогая и сложная.

Это все (кроме светодиодов и резисторов) подходит в один микроконтроллер с 28 контактами (менее одну десятую из 12 микросхем) и нужен лишь небольшой кусочек программное обеспечение (для активации внутреннего таймера) и некоторый предохранитель настройки внутри контроллера (для активации встроенного Xtal осциллятор).

Выбор контроллера

Современный ботаник по поводу микроконтроллеров говорит: «О да, используйте для этого Arduino! »Просто потому, что он знаком только с этим, не знает ничего, кроме этого и кажется странным, если вы предлагаете другой микроконтроллер чем ATmega324P.»Разве ATmega8 не слишком стар? для новых дизайнов? «- один из самых актуальных аргументы, чтобы присоединиться к его собственной зависимости. Он начинает немедленно его C-кодирование и понимает, что его могущественный библиотека не поддерживает высечку битов BCD. Пока он понимает, что контроллер внутренне знает BCD очень ну, он провел много часов интенсивных исследований и деятельность в блогах. С этого момента он делает несколько встроенных ассемблер, чтобы подогнать свою мощную библиотеку к простому и прямолинейная математика BCD.

Другие, не зависимые люди, теперь управляют Windows64- или Linux64- Селектор АРН.

В разделе «Clock src» выбираем осциллятор Xtal и в секции «I / O» 20 Контакты ввода / вывода для светодиодов.

Вот что мы получаем: с этим справятся несколько контроллеров. (и: да, ATmega324 входит в их число).

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

Схема

Это схема двоичных часов.Скорее простой и доступный, и соответствует всем нашим потребностям.

Вместо Xtal с 2,4576 МГц практически любой другой можно использовать тип, который делится на 1024 без каких-либо остаток, который можно разделить на целое число до 65536, чтобы получить один. Xtal прикреплен к соответствующему входные контакты ATmega8, с двумя керамическими конденсаторами 22 пФ добавлены для облегчения раскачивания.

Шесть цифр BCD прикреплены к портам D, B и C. способ, который упрощает математику внутреннего контроллера. Только портбит PD7 немного перекрывается, с этим можно справиться с некоторыми сдвиг влево и вправо немного.

Чтобы запрограммировать флэш-память ATmega8 в системе, Добавлен плагин ISP6.

В этой схеме светодиоды работают в режиме стока. С рабочее напряжение 5 В, ток светодиода

I Светодиод = (5 — 2 — 0,2) / 270 * 1000 = 10,4 мА
Если бы горели все 20 светодиодов, ток составил бы 207 мА. Максимальный ток ATmega8 составляет 300 мА через Контакт GND, так что все в порядке.

Для облегчения монтажа был добавлен 20-контактный штекер, который соединяет светодиоды к плате контроллера.Распиновка этого штекера упрощает светодиодную пайку плоского кабеля.

Катоды 8- и 4-светодиодов подключены к контакту 1 к 8 штекера, 2- и 1-светодиоды с контактами с 9 по 20. Все аноды подключены и оснащены дополнительным кабелем что ведет непосредственно к источнику питания.

Расчет размеров

Как было описано выше, нам нужно немного больше, чем 200 мА для всех светодиодов. Чтобы получить реальные средние значения, весь день был смоделирован в электронной таблице для всех 86399 секунд в сутки, а количество светодиодов было рассчитано.Горят не более 14 светодиодов (например, 17:37:37 и 17:57:37). Следующее распределение имеет место:

В среднем горят 7,3 светодиода, максимум — более одной минуты составляет 11,7. Это соответствует 76 мА соотв. 122 мА более одной минуты. Это намного меньше, чем нереально Корпус с 20 светодиодами.

В коробке самалгунди ранее вышедшей из строя электронной В проектах я нашел трансформатор 2 * 7,5В на 3,6ВА. К проверьте, достаточно ли этого, предоставленное программное обеспечение здесь был использован для моделирования напряжений.

При максимальном потреблении 200 мА напряжения подходят для управления регулятором 7805.Более чем 10 В постоянного тока, которое подает блок питания, с пульсации 0,5 В, все в порядке. Тепловая мощность, которая регулятор выдает максимум 1,68 Вт, поэтому достаточно небольшого радиатора.

Схема блока питания

Это схема блока питания.

Эти компоненты подходят к небольшой макетной плате и могут быть вставлен в финальную коробку.

Испытание под нагрузкой блока питания

Чтобы убедиться, что блок питания выживает даже драматические условия (например, периоды жары), которые я тестировал это в течение нескольких часов с нагрузкой 300 мА (два резисторы 33 Ом-2 Вт параллельно).Трансформатор и радиатор сильно нагреваются в этих условиях, но не слишком жарко.

Выше 400 мА пульсации на регулируемом 5 В становится невыносимым, 480 мА, что трансформатор поставляет, непригодны для использования с регулятором 7805. Вместо трансформатор на 9 В. Но это все за пределами потребностей здесь.

Компоненты смонтированы на макетных платах, которые подходят точно в пластиковую коробку.

Преимущество 20-контактного разъема состоит в том, что две части, контроллер и светодиоды, можно разместить отдельно.

Светодиодная часть в верхней части коробки выглядит так:

Припаивание светодиодов к плоскому кабелю упрощается за счет размещение штырей вилки. Моя первая версия была две ошибки проводки.

Программное обеспечение здесь в формате asm, в формате HTML здесь.

Структура программы

Программа выполняет следующие шаги:
  1. Инициализация оборудования,
  2. Таймер, прерывания и спящий режим,
  3. Второе прерывание и время, преобразование в формат отображения
  4. Включите генератор Xtal с предохранителем.

Начинается

Поскольку программа использует режим прерывания, стек должен быть инициирован. Поскольку ATmega8 имеет более 256 байт SRAM, должны быть установлены старший и младший байт указателя стека.

Все порты должны быть определены как выходы, для которых их бит направления должен быть установлен. Для всех портов установлено значение от одного до Избегайте случая с включенными 20 светодиодами.

Таймер, прерывания и спящий режим

Таймер работает с предделителем 1024 и в режиме CTC. (сброс таймера на Compare-Match A).Сравнение совпадений значения A выводятся из частоты Xtal, поэтому автоматически приспособлены к изменениям тактовой частоты.

Xtal может работать с другой частотой, как указано в следующая таблица. Обратите внимание, что Xtals с более чем 10 МГц не подходят для версий V / L. ATmega8 или для рабочего напряжения ниже 5 В.

<5 МГц 5 10 МГц> 10 МГц
2,048 5,0688 10.24
2,097152 5,12 11,0592
2,4576 6,144 12,288
3,072
3,072 6,4 6,5190 7,3728 18,432
4,096 7,68 19,6608
4,194304 8,388608
4.9152 9,216
9,8304

Если должен использоваться Xtal, отличный от 2,4576 МГц, измените постоянные часы соответственно.

Какой бы ни использовался Xtal, предохранитель в любом случае необходимо заменить. (увидеть ниже).

После запуска таймера с портом записи TCCR1B сравнение должно быть разрешено прерывание совпадения. Чтобы остановить весь контроллер активность в период отсчета таймера, сон включен режим ожидания. В этом режиме просыпается прерывание CPU, выполняет процедуру обслуживания прерывания и отправляет снова заснуть.Конечно, выполнение прерываний должен быть включен установкой флага I. в статусном порту.

Второе прерывание и время

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

Две версии для этого включены в исходный код:

  1. Время кодируется как упакованный BCD с младшим полубайтом. будучи единицами, тем выше клев десятки.
  2. Время кодируется как двоичное, со значениями между 0 и 59 (минуты и секунды) или 0 и 23 (часы).
Если коммутатор pbcd один, то собрана версия 1. Если не, собрана бинарная версия 2.

Время хранится в регистрах rSec, rMin и rHour. В при каждом прерывании секунды увеличиваются.

В случае версии 1 (упакованный BCD) необходимо добавить шесть Зарегистрируйтесь, чтобы определить, больше ли нижний полубайт, чем девять. В этом случае устанавливается флаг H (полупереполнение) и верхний полубайт правильный после добавления.Если нет, то шесть нужно снова вычесть, потому что нижний полубайт не превышает девяти и является правильным без добавления шести.

Чтобы проверить, достигнуто ли 60 или 24, выполняется сравнение с упакованным двоично-десятичным представлением этих чисел (которые равны 0x60 соответственно. 0x24 в шестнадцатеричном формате. Если регистр достигает эти значения (перенос не устанавливается после сравнения) регистр очищается, а следующий регистр (rMin, rHour) увеличивается.

Преобразование в выходной формат довольно просто в том, что случай, потому что числа в регистрах прямо BCD отформатируйте и поместите, после инвертирования всех бит, в порт светодиода выходы.

В двоичном режиме регистры увеличиваются до их содержимого. достигает двоичных 60 или 24. В этом случае они очищаются и следующий более высокий регистр (rMin, rHour) увеличивается. Так увеличивается время в двоичном формате немного проще, но преобразование двоичного файла в выходной формат BCD для управления светодиодами немного сложнее.

В этом случае мы должны преобразовать двоичный файл в упакованный BCD. Это делается путем первого деления двоичного файла на десять (просто вычитая 10, пока не произойдет перенос).Количество вычитаний это верхний полубайт упакованного BCD, оставшаяся часть деление — это нижний полубайт. В примере:

   Двоичный: 49d или 0x31 шестнадцатеричный
   Деление на 10: 4 раза (49-10-10-10-10-10, остаток 1)
   Верхний полубайт = 4, SWAP перемещает 4 из нижнего полубайта в верхний полубайт.
   Нижний полубайт = 1
   ИЛИ Верхний полубайт и нижний полубайт объединяют BCD, результат = 0x41
 
В обоих случаях регистры результатов должны быть инвертированы, потому что светодиод горит, если порт бит низкий.Это делается с помощью инструкция COM.

Включить генератор Xtal

Для включения генератора xtal соответствующий предохранитель в ATmega8 необходимо переделать, как показано на рисунке.

Либо выберите низкий (менее 1 МГц), либо средний (от 1 до 10 МГц) или высокой частоты (более 10 МГц).

Если вы решите подарить двоичные часы кто-то другой, вам нужно руководство пользователя. Я разработал такой руководство в формате OpenOffice здесь и преобразовал его в PDF здесь.

© 2017 г., http: // www.avr-asm-tutorial.net

Смарт-часы на базе ATmega328, изготовленные по индивидуальному заказу, отслеживают абсорбцию ацетаминофена путем анализа пота

Инженеры из инженерной школы Самуэли Калифорнийского университета в Лос-Анджелесе и Стэнфордской медицинской школы разработали умные часы, способные отслеживать метаболизм лекарств пользователем — анализируя его пот.

«Мы хотели создать носимую технологию, которая могла бы отслеживать профиль лекарств внутри тела непрерывно и неинвазивно», — объясняет ведущий исследования, доцент Сэм Эмаминеджад.2Таким образом, мы можем подобрать оптимальную дозировку и время приема для каждого человека. И, используя этот подход персонализации, мы можем повысить эффективность терапевтического лечения ».

Изготовленные на заказ умные часы с датчиком пота могут отслеживать уровень лекарств пациента. (📷: Lin et al)

« Эта технология — игра -изменитель и значительный шаг вперед в реализации персонализированной медицины », — добавляет соавтор профессор Рональд В. Дэвис. «Новые фармакогеномные решения, которые позволяют нам выбирать лекарства на основе генетического состава людей, уже показали свою полезность для повышения эффективности лечения.Таким образом, в сочетании с нашим носимым решением, которое помогает нам оптимизировать дозировку лекарств для каждого человека, теперь мы можем по-настоящему персонализировать наши подходы к фармакотерапии ».

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

Специальная печатная плата питается от микроконтроллера ATmega328. (📷: Lin et al)

Пользовательские часы включают в себя как встроенную ЖК-панель для мониторинга в реальном времени, так и соединение Bluetooth для передачи во внешнюю систему сбора данных для последующего анализа. Все они управлялись микроконтроллером на базе Microchip ATmega328, соединенным с 16-битным цифро-аналоговым преобразователем Texas Instrument DAC8552, усилителем передаточного сопротивления Linear Technology LT1462 и 12-битным аналого-цифровым преобразователем TI ADS1015 с Для связи используется модуль Bluetooth Wurth Electronik AMB2621.

Полное исследование опубликовано на условиях закрытого доступа в Proceedings of the National Academy of Sciences (PNAS) .

OLED Часы

Abstract

Проект OLED Watch был вдохновлен умными часами, такими как Pebble. Пытаясь воссоздать и спроектировать индивидуальную сборку, я скомпилировал несколько своих небольших проектов, чтобы собрать OLED-часы.

Я написал отчет по этому проекту и разместил его на GitHub.

Модули

OLED-дисплей — это 1,3-дюймовый монохромный дисплей от Adafruit. Он может взаимодействовать с микроконтроллером через I2C или SPI, но я решил использовать I2C, чтобы минимизировать количество проводов.

Модуль часов реального времени — это настраиваемая коммутационная плата, использующая микросхему DS1307 RTC. Модуль включает в себя подтягивающие резисторы для связи I2C с микроконтроллером и монетную батарею 2032, чтобы отслеживать время, даже когда он не подключен к микроконтроллеру.

Модуль ATmega328p — это коммутационная плата для микроконтроллера AVR ATmega328p с резонатором 16 МГц, LDO (стабилизатор напряжения) 5 В и разъемами, обеспечивающими легкий доступ к контактам ввода-вывода и питания микроконтроллера.

Модуль часов реального времени — это настраиваемая коммутационная плата, использующая микросхему DS1307 RTC. Модуль включает в себя подтягивающие резисторы для связи I2C с микроконтроллером и монетную батарею 2032, чтобы отслеживать время, даже когда он не подключен к микроконтроллеру.

Модуль ATmega328p — это коммутационная плата для микроконтроллера AVR ATmega328p с резонатором 16 МГц, LDO (стабилизатор напряжения) 5 В и разъемами, обеспечивающими легкий доступ к контактам ввода-вывода и питания микроконтроллера.

Прототипирование

С помощью перемычек «мама-мама» модули были подключены без особых дополнительных усилий, и OLED-часы можно было легко установить на запястье.

Версия 2.0

Печатная плата

После тестирования дизайна я приступил к созданию схемы EAGLE и созданию одноплатного дизайна.

Текущее состояние

Я решил прекратить производство этой модели и перейти к новому дизайну, обновив микроконтроллер до микроконтроллера со встроенными возможностями Bluetooth.Микроконтроллер со встроенным Bluetooth позволил бы OLED Watch стать умными часами и уменьшил бы размер схемы, поскольку дополнительные схемы для Bluetooth не потребовались бы.

Решения только для модуля Bluetooth:

  • CC2540 (Texas Instruments)
  • nRF51822 (Скандинавские полупроводники)
  • nRF8001 (Скандинавские полупроводники)

Модули SoC с микроконтроллерами и встроенным решением Bluetooth:

  • RFduino (ARM M0) (совместимость с Arduino)
  • нРФ51822 (АРМ М0)

Кроме того, после разработки этого проекта я разработал коммутационные платы для OLED-дисплеев, так что я мог интегрировать эту схему в одноплатные OLED-часы и приобрести OLED-дисплей прямо у производителей, а не у Adafruit, и снизить стоимость и ненужные схемы, которые включает модуль Adafruit, но мой дизайн не требует.

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

% PDF-1.4 % 62 0 obj> эндобдж xref 62 76 0000000016 00000 н. 0000002968 00000 н. 0000003070 00000 н. 0000003337 00000 н. 0000003511 00000 н. 0000003691 00000 н. 0000003903 00000 н. 0000004113 00000 п. 0000004289 00000 п. 0000004659 00000 н. 0000004751 00000 п. 0000043458 00000 п. 0000043648 00000 п. 0000044274 00000 п. 0000044738 00000 п. 0000072705 00000 п. 0000072900 00000 п. 0000073445 00000 п. 0000073839 00000 п. 0000075279 00000 п. 0000075460 00000 п. 0000075750 00000 п. 0000075902 00000 п. 0000076557 00000 п. 0000077247 00000 п. 0000077895 00000 п. 0000078582 00000 п. 0000079269 00000 п. 0000079916 00000 н. 0000107508 00000 н. 0000107708 00000 н. 0000108280 00000 п. 0000108703 00000 п. 0000109380 00000 п. 0000109994 00000 н. 0000110185 00000 н. 0000110762 00000 н. 0000111184 00000 н. 0000137787 00000 н. 0000137973 00000 п. 0000138594 00000 н. 0000139050 00000 н. 0000152161 00000 н. 0000152367 00000 н. 0000152726 00000 н. 0000152956 00000 н. 0000182253 00000 н. 0000243516 00000 н. 0000263936 00000 н. 0000330067 00000 н. 0000350065 00000 н. 0000352423 00000 н. 0000374360 00000 н. 0000376707 00000 н. 0000386794 00000 н. 0000401802 00000 н. 0000424979 00000 н. 0000465826 00000 н. 0000478635 00000 н. 0000480237 00000 п. 00004 00000 н. 0000531062 00000 н. 0000542723 00000 н. 0000586963 00000 н. 0000597908 00000 н. 0000648083 00000 н. 0000687739 00000 н. 0000808209 00000 н. 0000966126 00000 н. 0000966149 00000 н. 0000966172 00000 н. 0000966194 00000 п. 0000966217 00000 н. 0000966240 00000 н. 0000966263 00000 н. 0000001816 00000 н. трейлер ] >> startxref 0 %% EOF 137 0 obj> поток xb«b«c`2D @ (ǀp

Использование симулятора и отладчика AVR Studio 5 »maxEmbedded

Автор: Mayank, 13 июня 2011 г., Atmel AVR, Микроконтроллеры |

Здравствуйте, друзья.Поскольку теперь вы знаете, как создавать и строить свой проект с помощью AVR Studio 5, вы можете узнать, как отлаживать и моделировать свой код с помощью AVR Simulator. Симулятор AVR Studio 5 имеет следующие особенности:

  • Он поддерживает программную эмуляцию любого реального устройства AVR без его фактического подключения.
  • Он дает доступ ко всем периферийным устройствам реального MCU, но не к внешним устройствам.
  • Итак, если вы хотите подавать внешние сигналы, вам нужно сделать это самостоятельно, либо вручную обновив регистры, либо создав файл стимулов.

Теперь давайте рассмотрим следующий пример кода, чтобы объяснить функциональность симулятора AVR.

 #include 

int main (пусто)
{
    uint8_t counter;
    DDRB = 0xFF;
    в то время как (1)
    {
        счетчик ++; // вставляем точку останова здесь <-----
        PORTB = счетчик;
    }
} 
  • Теперь щелкните меню Debug , а затем нажмите Start Debugging and Break . Если изначально отладчик не выбран, AVR Studio 5 попросит вас выбрать Debug Tool . AVR Simulator всегда доступен в качестве опции. Выберите его и нажмите ОК .

Инструмент отладки

  • После этого начинается отладка и останавливается в начале main (). Вы можете увидеть желтую стрелку, определяющую текущую выполняющуюся строку.
  • Давайте поместим точку останова в главную и начнем выполнение. Выделите счетчик переменных в counter ++, щелкните его правой кнопкой мыши, перейдите к Breakpoint и затем щелкните по Insert Breakpoint .

Вставить точку останова

  • Теперь нажмите кнопку play ( F5 ) или нажмите Continue из меню Debug , чтобы перейти к точке останова.
  • Теперь посмотрите на затронутые регистры в представлении ввода-вывода . Если у вас не открыто окно ввода-вывода, вы можете выбрать его на панели инструментов Debug или в меню окна Debug .

Просмотр ввода / вывода

  • Здесь перечислены все периферийные функции.Мы можем отслеживать любые изменения в программном обеспечении, а также манипулировать значениями для ввода.
  • Теперь, когда счетчик изменяет значение PORTB, прокрутите вниз в окне ввода-вывода и щелкните PORTB.

Выберите PORTB в окне ввода / вывода

  • Щелкнув PORTB, вы увидите три регистра, назначенных для операций PORTB: PINB, DDRB и PORTB. Вы также можете просмотреть их текущие значения.
  • Сплошной блок представляет «1», тогда как пустой блок представляет «0».
  • Так как это начало main (), мы определили DDRB = 0xFF, все блоки заполнены. Вы также можете посмотреть его стоимость там.
  • Теперь нажмите кнопку воспроизведения. Цикл повторяется один раз и останавливается в точке останова. Вы можете видеть, что значения PINB и PORTB изменились на 0x01. Это потому, что после одной итерации counter = 1.

Выполняется отладка (1)

  • Красный блок указывает на изменение значения бита. Если это сплошной красный блок, значит, там было изменение с 0 на 1.Если это просто красный контур, то все наоборот.
  • Еще раз нажимаем на play. Вы сможете увидеть следующие последовательности.

Выполняется отладка (2)

Выполняется отладка (3)

Выполняется отладка (4)

  • Теперь, если вы хотите изменить некоторые другие регистры (кроме тех, которые были изменены кодом), просто щелкните соответствующий регистр и измените его значение.
  • Скажем, например, вы хотите изменить значение DDRD.Щелкните PORTD и укажите любое значение, которое хотите. Вы также можете щелкнуть соответствующие биты, чтобы переключить значения.

Внесение внешних изменений

Итак, теперь мы закончили с основами AVR Studio 5. В AVR Studio 5 есть более продвинутые функции отладки, которые включают внутрисистемную отладку, которая является своего рода отладкой во время выполнения, в отличие от программной эмуляции, о которой мы узнали в этом посте.

alexxlab

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *