Главная » Микроконтроллеры
Призовой фонд
на октябрь 2020 г.
1. 1500 руб
Сайт Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 150 руб.
От пользователей


Двусторонний теплопроводящий скотч. Ширина 8, 10, 12 или 20мм. Длина намотки 5, 10 или 25м

Делаем светодиодные часы CxemWatch-v1 на ATmega328p

Речь пойдет о светодиодных часах, построенных на чипе ATmega328p. Это первая модель, пока не имеет каких либо дополнительных функций, однако проста для повторения и собрана на доступных деталях.

CxemWatch

Электрическая схема.

Электрическая схема часов

Основой схемы является контроллер ATmega328p-au. В левой части обвязка незамысловатая, состоит лишь из необходимых деталей. Конденсаторы C1, C2 - фильтры питания. Источником является 3-вольтовая батарейка CR2032. В нижней части слева предусмотрены контакты для настройки часов, M - минуты, H - часы (замыкать на контакт V). Номиналы подтягивающих резисторов R13, R15, R16 допускается отклонять.
Почти ко всем цифровым выводам (PD2-PD7, PB0-PB5) подключены светодиоды (LED1-LED12), которые будут осуществлять индикацию часов и минут. По задумке, индикация происходит при нажатии на тактовую кнопку (Key1). Всё остальное время светодиоды будут выключены, чтобы не потреблять энергию.
Тактирование решил сделать также, как на многих платах ардуино - от керамического резонатора (X1 на схеме). Он имеет очень маленькие размеры и работает без внешних конденсаторов.
На схеме предусмотрено два разъема для программирования - UART и SPI (сверху и снизу соответственно).

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

Плата разрабатывалась в EasyEDA.

Плата часов

Часы построены на чип-элементах, Конденсаторы и резисторы в корпусе SMD0805. Более мелкие использовать не стал, т.к. их сложнее паять, а еще перестраховался на случай если детали не приедут. 0805 продаются в местном радиомагазине. По краям сделал вырезы под ремешок, надежно усилив металлизацией. 4 отверстия, если честно забыл зачем оставил... Думаю, можно на стоечках закрепить тонкое оргстекло для защиты деталей.

Функция просмотра платы (см.на рисунке) позволяет оценить, как изделие будет выглядеть в реальности и даже прикинуть цвет маски. Мне понравился синий. По итогу, затратил много времени на разработку платы, результатом доволен.

Далее, я экспортировал печатную плату в формате гербер. Именно в этом формате нужно отправлять на изготовление.

Заказ печатной платы

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

Раскрыв скрин вы увидите выбранные мной параметры платы, которые содержат информацию о габаритах, количестве слоев, толщине платы, ширине проводников и зазоров между ними и многое другое. Это детально было описано в видеоролике. Обратите внимание, что изменение некоторых пунктов отразится на цене, например слишком маленькая ширина дорожек или отверстий, золочение контактов и т.п. Таким образом сайт сформировал стоимость заказа и доставки. После добавления заказа в корзину появляется окно, где нужно загрузить созданные ранее гербер-файлы. Плата еще раз пройдет проверку, после чего нужно заполнить адрес доставки, естественно не русскими буквами, а транслитом. Применил купон на 5 долларов и осталось к оплате всего 6. На тот момент это было чуть больше 400 рублей.

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

И самое главное, печатные платы.

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

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

Собранное устройство.

Плата полностью припаяна. Отсутствует лишь кварц, помеченный как X1 около контроллера, потому что первоначально хочу запустить часы на внутреннем генераторе.

Программирование.

Для программирования данных часов по бокам отведены контакты. Слева SPI, который необходим для заливки загрузчика (bootloader), но также можно использовать для прошивки.
А справа контакты UART.

Контроллер я припаял новый, чистый, а значит первым делом нужно записать загрузчик. И в качестве программатора был использован USBasp, но ничто не мешает использовать в роли программатора плату arduino uno, nano или другую (Arduino as ISP).

Сначала я хочу проверить как поведут себя часы без внешнего кварца. Контроллер будет настроен для работы от внутреннего осциллятора, частотой 8 МГц.

Если вкратце, то была использована среда разработки ArduinoIDE в которую добавлен пакет MiniCore, чтобы для примененного контроллера можно было выставить тактовую частоту, указать параметры питания и кое что еще не прибегая к ручному выставлению фьюзов. Подсказка: скачанный архив MiniCore распаковать в папку C:\Users\User\Documents\Arduino\hardware\


 

Итак я записал загрузчик и теперь контроллер будет работать от внутреннего генератора 8 МГц и настроен на питание от трехвольтовой батарейки.
Записать программу можно было этим же программатором, но контроллер с уже залитым загрузчиком мы можем прошивать с помощью USB-TTL конвертера.
У меня их два: на базе CH340 и на PL2303 (они были показаны на картинке выше). Выполняют одну и ту же функцию, служат для связи контроллера с компьютером. Жалко, что у них нет контакта DTR, который бы автоматически дергал reset при прошивке. Придется вручную. Для корректной прошивки, нужно кратковременно подключить контакт сброс (RST) на минус (GND) в тот момент, когда завершится компиляция скетча и на экране появятся надписи. В противном случае IDE выдаст ошибку. Точно такая же печаль происходит и с покупными платами arduino pro mini, там при загрузке нужно нажать кнопочку на плате.

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

CxemWatch-v1 - программа была детально описана в видеоролике. Если вкратце то управление портами производится через прямое обращение к регистрам. Часы построены на функции millis, которая отсчитывает количество миллисекунд с момента начала выполнения программы.

Отрывок:

Проходит 1000 мс, переменная перезаписывается, ко времени добавляется 1 секунда. При достижении 60 секунд, секунды обнуляются, ко времени прибавляется 1 минута. Также 60 минут превращаются в один час. Выводится естественно в 12 часовом формате, потому что на плате 12 светодиодов.

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

Если наступает один час и кнопка нажата, то включается светодиод подключенный ко второму пину - PD2. Такая запись может показаться странной, но на самом деле всё просто. Взгляните на рисунок ниже.

Каждый порт имеет 8 выводов. Отсчет идет справа-налево.

Обработка минут расписана немного сложнее. Во первых, чтобы отличить на часах минутный светодиод от часового я решил сделать индикацию минут миганием. Часы просто светятся, а минуты мигают. В этом участвует всё та же функция millis. Светодиод мигает каждую секунду, погасая на 50 мс.

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

Случилась проблема.

Далее я измерил точность, и что и требовалось ожидать, часы сильно отставали, т.к. напомню контроллер работал от внутреннего генератора. Потом я перешел на внешний кварц, поначалу все было хорошо. Я много раз перепрошивал часы, по ходу дела немного корректировал и дорабатывал программу. Вскоре мне надоело вручную делать сброс, я стал прошивать устройство программатором USBasp используя программу для заливки ProgISP (т.е. сохранял hex-файл из ArduinoIDE, а заливал через ProgISP). После десятка успешных загрузок, в какой то момент, по непонятной причине контроллер накрылся. Потом я припаял новый контроллер и ситуация повторилась. Две атмеги закирпичились... Получил сообщение Chip Enable Program Error и что то связанное с частотой. На форумах описывалась подобная ситуация и выход заключался в перепрошивке самого программатора, но он не поддался... Отбросив танцы с бубном с программатором за 1$ я решил поступить проще. Просто позаимствовал готовый контроллер с платы arduino и кварц тоже взял от туда. Хоть это и не совсем правильно, потому что ардуинка 5-вольтовая с частотой 16 МГц.

Последний штрих.

Далее я нашел тянущийся материал и пришил к нему липучки.

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

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

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

На фото не понятно, где часы, а где минуты, т.к. в кадр попало одновременное свечение светодиодов, но для наглядности ниже прилагаю гифку.

Минутный светодиод мигает, пятнадцать минут второго.

Настройка.

Для настройки времени на плате присутствует 3 контакта.
H-часы, M-минуты. Нужно пинцетом замкнуть нужный из них на плюсик.

Переключение происходит с небольшой задержкой, это сделано специально.

Что вышло, то вышло..

По итогу часы всё равно отстают. Керамический резонатор оказался не точным, осциллограф показал частоту чуть меньше чем 16 МГц (~15.9 МГц). Из за этого часы отстают на 5 минут в сутки. Но самый главный недостаток в большом энергопотреблении. В холостую без светодиодов часы кушают 5 мА, это небольшая цифра, но если вспомнить примененный источник питания, то понятное дело, надолго его не хватит. Уменьшить потребление программно у меня пока не хватило навыков.
В будущем хочу продолжить данную тему и сделать новую улучшенную версию часов.

Смотрите видео на ПаяльникTV.

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
U1 МК AVRATmega328P-AU1 TQFP32Поиск в магазине ОтронВ блокнот
R1-R12 Резистор200-300 Ом12 SMD0805Поиск в магазине ОтронВ блокнот
R13 Резистор
5.1 кОм
1 SMD0805Поиск в магазине ОтронВ блокнот
R14 Резистор
10 кОм
1 SMD0805Поиск в магазине ОтронВ блокнот
R15, R16 Резистор
5.1 кОм
2 SMD0805Поиск в магазине ОтронВ блокнот
C1 Конденсатор10 мкФ1 SMD0805Поиск в магазине ОтронВ блокнот
C2, C3, C4 Конденсатор0.1 мкФ3 SMD0805Поиск в магазине ОтронВ блокнот
LED1-LED12 СветодиодVf не более 2.5В12 SMD0805 (применен красный)Поиск в магазине ОтронВ блокнот
X1 КварцCSTCE16M0V53Z-R01 Использован на 16МГц, но можно на 8МГцПоиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (7) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+1
Александр #
Идея супер! И внешний вид шикарный.
Но разрешите парочку замечаний. Нужно было замутить асинхронный таймер на часовом резонаторе, а cpu тактировать от внутреннего rc. Тогда отставания бы не было вообще.
Сам контроллер загонять в спячку, чтобы выходил из неё только чтобы плюсовать секунды и показывать время. А кнопку для этого повесить на внешнее прерывание. Батарейки в таком режиме хватит года на 3-4
Ответить
0

[Автор]
rafo #
Спасибо за замечания! В принципе, при отсутствии индикации секунд можно и не просыпаться каждую секунду, а плюсовать значительно реже. К сожалению, для внешнего прерывания тут придется менять разводку платы. По поводу часового кварца, если я правильно понимаю нужно МК перевести на внутреннее тактирование, вместо штатного припаять 32768 Гц и настроить Таймер 2.
Ответить
+2
Александр #
Обычно делается так: таймер (не помню какой у этой Меги) запускается в асинхронном режиме. В этом случае он тактируется от своего резонатора. Кварц 32768, с делителем 128 этот таймер будет переполняться ровно за секунду. Поэтому и секунда, а не минута.
CPU тактируется при этом от внутреннего rc на 8МГц, он почти все время спит. В спящем режиме есть возможность просыпаться по переполнению таймера. Проводите расчет секунд, минут и часов и сразу снова спать. Это десяток тактов- копейки для батарейки и контроллера.
А вот как вывести контроллер из спячки для индикации, если кнопка висит не на внешнем прерывании, это надо подумать.
Ответить
0
AlexQ #
То есть, разъём акума будет упираться в руку, создавая дискомфорт?
Ответить
0

[Автор]
rafo #
То есть именно так. Вот такая непродумка. Но если продеть ремешок как показано на фото, руке нормально. Я не спец по корпусам, тут только 3D принтер поможет.
Ответить
+1
verbkinm #
5мА это очень много! У меня контроллер вместе с модулем tm1637 ест 1,5 мА, но там всё время горят индикаторы (тоже часы). Для экономии энергии уменьшите частоту МК. Это можно делать програмно, что бы не менять фьюзы. Ещё советуют, чтобы ноги МК не оставались в неопределённом состоянии, я их подтягиваю внутренним резистором. А по поводу прерывания - посмотрите в сторону прерывания PCINT, может поможет!
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическая мощность?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
USB осциллограф DSO-2090 Модуль измерения тока на ACS712 (30А)
вверх