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

Ранее я описал методы работы микроконтроллера от Texas Instruments, msp430g2553 с различными устройствами. Это были устройства индикации (на контроллерах hd44780 и tm1638), датчик температуры ds18b20, и часы реального времени ds1394. Теперь настало время объединить эти девайсы. Так уж получилось, что у меня уже была плата, на которой добрыми китайцами собран 7-сегментный индикатор, управляемый контроллером tm1638, и, недолго думая, я решил изготовить плату, которая бы конструктивно подходила к плате индикации от добрых китайцев. Вот, что из этого у меня вышло:





Это — сама плата. Как водится, — прекрасно получилось её изготовить с помощью фоторезистивной технологии. Не обошлось без одной не очень приятной мелочи — после лужения оказался одна лишняя перемычка, которую почти не было видно, между двумя стабилизаторами — на 5 и на 3,3В, из-за этого микроконтроллер при включении питался от 5В, это его чуть не убило. Я сначала грешил на сам стабилизатор, даже пару раз его поменял, пока не обнаружил этот досадный волосок из припоя.

Получилась в итоге вот такая конструкция:



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



Сопряжение индикатора, питающегося от стабилизатора на 5В, с микроконтроллером msp43g2553, работающим от 3,3В, получилось само собой, так как у драйвера индикатора выход данных выполнен на внутреннем ключе с открытым истоком. Необходимо было только демонтировать подтягивающие резисторы на самой плате индикатора (выполнены сборкой, обозначенной «R1»). Нужно при этом учесть, что в этом случае блок индикации может потреблять до 0,2А от источника на 5В. Если питать часы от источника, скажем, на 12В, то стабилизатор будет неплохо греться (выделяемая мощность до 0,2*(12-5) = 1,4Вт)



Для управления внешней нагрузкой есть 2 выхода, каждый из которых может управлять нагрузкой до 0,1А, к ним можно подключать например реле, или как у меня, — светильник/ночник в виде шара. События, управляющие нагрузкой, пока можно менять, только изменяя программу, позднее в планах написать что-то более универсальное и чтобы управлялось непосредственно с часов. Напряжение питания внешней нагрузки можно менять с помощью джампера на плате часов, варианты — 5В и напряжение источника.



Также предусмотрены дополнительные выводы с контроллера на перспективу (их можно использовать например как входы) и разъём для программирования, кнопка сброса на плате.

UPD: Добавил схему:


Верхний разъём 3,5мм на плате — для подключения датчика ds18b20, нижние два — подключение нагрузки. Питание часов осуществляется с помощью бывшего зарядного устройства от мобильника (оно выдаёт около 6,8В и ток до 0,8А).
Резисторы R11 и R12 не используются, вместо них — внутренние резисторы подтяжки. Так же на схеме нет индуктивности, которая установлена на плате в качестве перемычки. На плате предусмотрена возможность питания индикатора как от 5В, так и от 3,3. Для этого можно менять положение перемычки, идущей к питанию индикатора.

Исходный код проекта часов на микроконтроллере msp430g2553. Печатная плата в Sprint Layout.

Такая вот вундервафля-всё-в-одном.

видео работы:

Комментарии (71)

RSS свернуть / развернуть
Эта плата на Tm1638 хорошая. И по функционалу и по стоимости. Одно мне в ней не понравилось: пайка. Припой тугоплавкий, трудно разъем IDC-10 выпаивать.
0
Скорее всего он просто бессвинцовый, поэтому и трудно. Помогает если его немного разбавить обыкновенным припоем. Просто добавляешь сверху какой нить ПОС-60, прогреваешь, а потом как обычно. Если в какой то момент плохо идёт — ещё добавляешь.
0
Ага, я так и делал :)
0
Ещё можно предварительно снять пластиковую часть разъёма, а потом по отдельности отпаять каждый штырёк куда проще.
0
А схема? :) Без неё ни исходник, ни плата как бы ни к чему…
+1
Схема пока в голове, в процессе рисования. Она тут скорее из разводки вырисовывается, чем наоборот.
0
Напротив, исходник — главное. Схему и так сообразить несложно, она вполне типовая. Или реверсировать по трассировке — это куда проще, чем реверсировать исходник по кексу.
0
Гы… Ну давайте теперь без схем всё выкладывать… Плат и исходников достаточно…
Для вас это может и проще, но сайт как бы про ИЗИ электронику, тут полно людей для которых и типовая схема — откровение. Когда полный комплект — делать то проще…
0
Я не говорю, что схему не надо выкладывать. Но самого меня она особо не заинтересовала — все нужное я посмотрел на плате.
Я говорю, что главное в такой конструкции — исходник, а не схема. И я уже упоминал в комментариях, хотя и не здесь, как я отношусь к конструкциям такого рода со схемой, но без исходного кода.
0
Вот это, кстати, да. Бывает, что девайс интересный, хотелось бы попробовать повторить, но при отсутствии исходника всё желание как рукой снимает.
0
Когда полный комплект — делать то проще…
Повторить — ни схема, ни исходник не нужен. Хватает трассировки и кекса.
0
Ну вообще, да. Я в первую очередь делал разводку, и делал её, как удобнее было. А уже потом в программе поменял порты и пины.
0
Нарисовал схему. На ней не показаны светодиоды индикации состояния пинов 1.3 и 1.0 с разъёмом.
0
Это — сама плата.
Не надо таб стабилизатора термобарьерами отгораживать, он рассчитан на пайку к охлаждающему полигону. Ну и второму не помешал бы полигон под падом (хотя от него меньший ток потребляется, как я понимаю, так что несущественно в данном случае).
Получилась в итоге вот такая конструкция
Где светофильтр взял?
оно выдаёт около 6,8В и ток до 0,8А
Не маловато для 7805?
0
  • avatar
  • Vga
  • 06 июля 2013, 12:30
на втором совсем микроскопическая нагрузка. А с первым вышел конфуз. Я делал разводку под определённый стабилизатор, у которого была распиновка «вход-земля-выход». А когда его установил, — выяснилось, что он дохлый. Другого с такой же распиновкой не нашёл, — пришлось вообще на весу колхозить.
Светофильтр получился из обложки для сшивки томов документов и двустороннего скотча :)
Не маловато для 7805?
Там 1117, у него минимальная разница — 1,2В, так что вполне достаточно должно быть.
0
Там 1117, у него минимальная разница — 1,2В, так что вполне достаточно должно быть.
Тогда нормально. Просто у тебя распиновка под 7805. Но для 1117 тоже надо сделать полигон под ухом. Только уже не земляной.
0
а 1117 с такой распиновкой существуют?
0
В смысле? Насколько я знаю, у них на ухе выход. А земля на ухе из мне известных только у 78xx.
0
В sprint layoute стандартный корпус для 1117 как раз почему-то с землёй на «ухе». Я и повёлся, сделал плату, а потом уже заглянул в ДШ.
0
Там же вроде только land pattern, без указания где кто. По крайней мере в стандартной библиотеке. А в нестандартной ошибка может быть запросто.
0
да, в какой-то из дополнительных библиотек был.
0
Кстати, зачем было ставить LM1117-ADJ? Я бы поставил LM1117-3.3.
0
Я бы тоже поставил, но у меня на тот момент были только «adj»
0
Сорцы неплохо оформлены. Небольшой хинт: в большинстве сред и редакторов есть крыжик «Replace tabs with spaces». Его желательно включить. Тогда не будет подобного безобразия:
0
  • avatar
  • Vga
  • 06 июля 2013, 13:37
Спасибо, поищу крыжик :) Хотя редактор вроде и так автоматом расставляет отступы.
0
Автоматом, да. Но с крыжиком он будет при сохранении заменять таб, чья длина не фиксирована, на пробелы, гарантируя сохранение форматирования в любом редакторе. В частности, те строки, что на скрине имеют правильные отступы (т.е. все кроме трех подчеркнутых) имеют пробельные отступы, а подчеркнутые индентованы табом (да, у меня таб — два спейса).
0
крутил-крутил настройки редактора и поломал всё форматирование… (:
0
А конкретней? Что крутил, где крутил, что получил?
0
ответил можно сказать, — чуть ниже
0
в большинстве сред и редакторов есть крыжик «Replace tabs with spaces». Его желательно включить.
Ненавижу, когда приходиться работать с исходниками, выровненными пробелами.
0
Ненавижу работать с исходниками, выровненными табами и превратившимися в кашу (сабж на скрине в этом плане весьма приличный).
И чем тебе мешают пробелы?
+4
Тем что среды редактирования охотно табы меняют на пробелы, и потом работают с ними как с пробелами, не учитывая ни каких форматирований и пр. И получается такая каша как на скрине, и хуже. И именно после того, как «особо умная» среда начинает подменять табы на пробелы. Потому как функционал подмены у них лишь для галочки, а не для пользования.
Второй момент — контролю версий сносит голову напрочь, от таких вот замен табуляций на пробелы плюс немного редактирования. Восстановить историю изменений не представляется возможным в принципе. А поскольку большенство кода, с которым я работаю, было писано во времена отсутствия автозамен, ответ очевиден — такие автозамены недопустимы.
А если файл содержит единый стиль, то все прекрасно видно. Будь то пробелы, будь то табуляции. И поскольку с табуляциями у меня не возникает вышеозначенных проблем, я использую табуляции.
-1
Это уж точно. Лучше бы я ничего не крутил с этими отступами :(
0
Повезло. С табами еще и не такое происходит порой. И да, смешивание табов и пробелов дает еще худший результат, так что либо одно, либо другое. Но как раз из-за описанных выше причин, предпочитаю, все-таки, пробелы. Они, по крайней мере, не превращаются в незнамо что на экране при других настройках табуляции. Увы, но стандартные когда-то 8 пробелов на таб давно уже не стандарт (да и в реальной жизни они весьма неудобны), а это открывает поле для самодеятельности. От довольно часто встречающихся 4 пробелов на таб и (значительно реже, но все же попадающихся) 2-х пробелов на таб, до всякой экзотики типа 3 пробела на таб (а мне доводилось работать в конторе, где это было корпоративным стандартом).
+1
Увы, но стандартные когда-то 8 пробелов на таб давно уже не стандарт (да и в реальной жизни они весьма неудобны), а это открывает поле для самодеятельности.
К этому стоит добавить еще, что в непрограммерских редакторах табы вообще не фиксированного размера, а смещают на ближаюшую колонку, кратную N.
0
Ух ты, у меня Eclipse непрограммерский. Он смещает на ближайшую колонку кратную 8!
Ну нифига себе, ещё и Borland Builder/Delphi были непрограммерскими, ту же фигню делали. Сейчас наверное пофиксили сиё недоразумение, да?

P.S.: Это я к тому, что не стоит поспешно отвечать на все посты. Порою следует прочитать и подумать.
0
О, забавно. Кажется, на самом деле так не только непрограммерские редакторы работают, но и программерские. Я думал, что размер таба в программерских фиксирован (и что забавно, за 10 лет использования дельфи ни разу не заметил обратного, пока целенаправленно не проверил). Впрочем, смешанное табо-пробельное форматирование от того лучше не становится, скорее наоборот.
Плюс к тому, Delphi и Notepad++ по разному интерпретируют табы, несмотря на одинаковые настройки. А еще дельфи по разному себя ведет при открытии файла, в котором есть табы и при вводе таба в ней (впрочем, это как раз может объясняться снятой галкой «use tab»).
+1
P.S.: Это я к тому, что не стоит поспешно отвечать на все посты. Порою следует прочитать и подумать.
Не стоит опровергать того, что не утверждается в реплике. Я не говорил что программерские ведут себя не так, я говорил что так себя ведут непрограммерские.
0
И получается такая каша как на скрине, и хуже. И именно после того, как «особо умная» среда начинает подменять табы на пробелы.
Насколько я знаю, каша возникает не из-за подмены, а из-за несоответствия размера таба в редакторе, в котором создавалось и редактора, в котором побилось. Конвертация в пробелы испортит только если конвертирует редактор с другими настройками нежели тот, где форматировалось — именно поэтому желательно сразу сохранять с чисто пробельным форматированием.
Ну а если код уже готовый и со смешанной индентацией — перед автозаменой надо просто выставить правильный tab size (если, конечно, форматирование еще не сбито)
Второй момент — контролю версий сносит голову напрочь, от таких вот замен табуляций на пробелы плюс немного редактирования.
По идее, изменения в whitespace контроль версий должен понимать. Ну и если сравнить ревизии внешним диффером — они часто имеют опцию игнорирования whitespace.
А если файл содержит единый стиль, то все прекрасно видно. Будь то пробелы, будь то табуляции. И поскольку с табуляциями у меня не возникает вышеозначенных проблем, я использую табуляции.
С единым в обоих случаях хорошо, да… Не считая того, что я ни разу не видел чисто табовой индентации — всегда впишутся пробелы. Часто автоматически — средой. И практически всегда в результате — вот такая каша, особенно во вставках кода в статье/посте/комментарии. Поэтому всегда использую чисто пробельную индентацию — она бьется только если редактор примется выкусывать whitespace из начала/конца строк или текста (этим иногда грешит местный тег code, например, а также попытки вставить код без тега code).
+1
Табы или пробелы — древний холивар. Внесу свои пять копеек. При смешивании подходов — получается фигня. Добиться чистых «табов» проблематично. Например, при размере таба в 4 пробела, между двумя табами может стоять 3 пробела, и визуально этого не заметишь, пока не откроешь текст в редакторе с другим размером таба. И вычищать эти пробелы, потом, дело не благодарное. Поэтому, ИМХО, вариант с пробелами более универсальный.

Касательно системы контроля версий — я, честно говоря, не видел чтобы «сносило голову». Максимум — в коммит попадут лишние строки (где была замена пробелы-табы).
0
Плюс (если говорить о системах контроля версий), проще написать правило для проверки перед коммитом, которое бы запрещало коммитить код с табуляциями. И этим гарантировать, что «табы» не попадут в репозирорий. А вот отказаться то пробелов в коде не получится, можно попробовать написать правила, но они будут не такими простыми.
0
Без ваших комментариев я и не знал об этой теме, с холиварами на тему табов и отступов :) В редакторе у меня есть настройки стилей форматирования, я покрутил-поменял, подобрал тот стиль, которым обычно пользуюсь… И моё форматирование слетело нафик. При этом где-то ещё были крыжики вроде «не использовать пробелы», «использовать табы»… Не помогло. Пробелы табами не заменились. Печаль.
0
Хм, автоформаттер? Неудивительно, он на и нужен, чтобы подгонять форматирование под указанный стандарт на лету.
Возможно, крыжик «не использовать табы» касается только нововводимых символов, а уже имеющиеся табы нужно вручную заменять (чтобы их было видно — есть опция «показывать непечатаемые знаки»). Ну или скормить автоформаттеру, задав ему в настройках свой стиль. Для Delphi DelFor сильно спасает, когда попадается нечто, написанное в стиле автошемы :)
+1
А он не на лету подогнал. Он по факту поменял уже.
0
Без ваших комментариев я и не знал об этой теме, с холиварами на тему табов и отступов :)


На тему «отступов» холивара нет, их делают все. Вопрос только в том, как делать отступы — табами или пробелами.

Я знаю только один формат файлов (формат файлов для make), где есть принципиальная разница между отступом из табуляций и пробелов. В остальных случаях — это дело вкуса. Отсюда и холивары :)
0
хм… Стабилизаторы: питание в 5 В, 5В в adj. А почему не питание в adj?
0
adj — 3v3
0
а что смущает?
0
Ну я бы на питание ставил. А так ничего. Среди прочих равных почему было именно такое решение использованно?
0
Да ничем, если честно. Но где-то глубоко была мысль, что незачем большое падение напряжения делать на стабе.
Ну и как плюс — возможность нормальной работы часов от любого источника, как выше 5В, так от 5в и от 3,3. последнее — за счёт диода, включённого анодом к стабу на 3,3 и катодом к стабу на 5. (хотя, возможно, что в стабе на 3,3 есть встроенный такой диод, нет?)
0
Один символ табуляции равен восьми пробелам. Все остальные извращения — один, два, три, четыре, пять, семь, одиннадцать и т. д. — от лукавого.
+1
Вот-вот, потому в исходниках лучше использовать пробелы, потому как представление о правильном табе у каждого свое.
0
Да-да-да! Но не о правильном табе, а о правильном отступе и форматировании исходников. Это будет вечной темой для холивора.
Linux kernel coding style
Documentation/CodingStyle and beyond...
Use tabs.
All tabs are 8 characters.
If your code is indenting too deeply, fix the code.
0
If your code is indenting too deeply, fix the code.
Хороший совет, но 8-позиционная индентация мне все же не по вкусу.
0
Угу. Чисто линуксово-стильная фишка — правильные советы в комбинации со стилем, с которым они плохо уживаются. Читать текст программы с большими отступами неудобно, даже если используется всего два-три уровня. Да и допустимый размер текста функции на два экрана удобству чтения никак не способствует, равно как не способствует ему принятая в линухе (и никак не оговоренная в стиле) практика написания в условных выражениях весьма нетривиальных конструкций. И еще меньше этому способствует написание открывающей фигурной скобки в конце строки. Визуально выделить блок при этом зачастую затруднительно.
0
If your code is indenting too deeply, fix the code.
Исключительно правильное замечание. Правда, если его консистентно придерживаться, то он конфликтует с традициями писания на С и плохо уживается с принятым у них стилем именования поскольку при этом появляется много мелких функций, которые надо именовать «по смыслу», то есть по тому, что они делают, а это приводит к росту размера имен и подчеркивания только ухудшают ситуацию. Жабовский camel case куда как лучше приспособлен для этих целей.

P.S. по стилю мне линуховый никогда не нравился из-за неконсистентности — везде пишем в одном стиле, но для фунеций делаем исключение. второе больное место — отсутствие отступа для case — самый простой способ превратить switch в нечитаемую кашу. впрочем, для С/С++ я сторонник ISO стиля, как раз того, который в они называют плохим.
0
Upd: добавил видео
0
По ссылке исходник уже недоступен. Хотел взглянуть, та не тут то было. :) Обновите если не лень, или новую ссылку дайте.
0
В репозе все есть.
0
Хм, проверил, — всё вроде доступно, и архив с первой версией, и в репозитории код, и плата скачивается.
0
Хз. Мне сорсфорж показывает, что файлов у проекта ноль. Быть может, ты их скрыл.
0
Да, определённо какой-то глюк. Предлагает скачать архив watches.rar, но архива нет, и файлов — 0. Ну да ладно, код доступен, можно по ссылке смотреть.
0
Я бы дал ссылку на корень репозитория. Или на «скачать репку зипом».
0
Текст на таком индикаторе смотрится просто ужасно!
SAtyRdAy, жесть!!!
Если планируется вывод текста — изначально нужно закладывать другой индикатор. А это всё костыли.
+3
День лучше номером дня выводить…
0
Я ещё и русскими буквами выводил, — это ещё более жесть!
А вообще, проект этот — скорее развлечение в суровых геодезических буднях, нежели заявка на какой-то серьёзный девайс.
+1
Я ещё и русскими буквами выводил
Ну ты извращенец, хдддд))))))
0
Это вам ещё с геологами не доводилось общаться :)
0
Зажрались вы со своими текстовыми индикаторами…
Между прочим, для часов большинство распространенных альтернатив подходит куда хуже. Скажем, с точки зрения эргономики из альтернатив только светодиодные матрицы. Ну, быть может, некоторые из ЖК — достаточно крупные, яркие и контрастные. Не WH1602.
P.S. И вообще, опечатка в слове. Должно быть Caturday)
0
А можно взглянуть на исходники? По указанной выше ссылке ничего нет…
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.