Таймер 0…9999 секунд для засветки фоторезиста на attiny13

Таймер 0…9999 секунд для засветки фоторезиста на attiny13

Таймер для засветки фоторезиста.

Автор: Шабаров Андрей aka htscooter
Опубликовано 25.06.2009

Наглядевшись на просторах интернета печатных плат, изготовленных с помощью фоторезиста, я тоже надумал его попробовать. Естественно, сразу возникло несколько проблем. Ну такие проблемы, как отсутствие фоторезиста, УФ ламп, решались на рынке и в магазине. Конечно нужно тратить денюжку, ну а что поделаешь — если фоторезист еще можно сделать самому, то УФ лампу ну никак. Ну наконец, все есть, можно приступать. И вот тут стал вопрос подбора выдержек засветки. На этапе тестовых полосок с этим успешно справились часы с секундной стрелкой. Но для постоянного использования меня, очччень ленивого кота, это ну никак не устраивало. Было сформировано ТЗ и начался поиск и анализ существующих схем (ну я ж ленивый — самому придумывать). Поиск результатов не дал, я ж кот не только ленивый, но и придирчивый, пришлось все делать самому.

Техзадание довольно простое, но адаптированное под нужды фоторезистивной технологии:
— пределы выдержки 00м 05с -99м 55с;
— управление как лампами, так и компрессором для вакуумного прижима;
— световая и звуковая индикация режимов работы;
— простота управления;
— имеющиеся в наличии или недорогие комплектующие.

По мотивам ТЗ была нарисована примерная схема, и началась доводка устройства на макетке, окончательная схема которого на рисунке ниже:

Собственно, все очень просто, ATMega8 или ATMega8L в качестве управляющего элемента, несколько кнопок, четырехразрядный индикатор в динамической индикации и горстка резисторов и транзисторов. В качестве силовых элементов я применил симисторы, включенные через оптосимисторы. Это, конечно вопрос сугубо личный, они у меня были, я их и поставил. Там можно применить и реле, в общем — что есть. Включение оптосимисторов по даташиту, никаких изысков. Единственное, при желании можно исключить RC-цепочку (39 Ом + 0,1мкФ), ее отсутствие не смертельно. Питание схемы тоже максимально простое, транс, диодный мост, электролиты, кренка на 5 вольт. Pullup на кнопки тоже по желанию, ноги порта к плюсу притянуты, на макетке я отлаживал без внешних резисторов. Ну что еще по схеме? Резисторы в базах — плюс-минус какие есть, токоограничивающие по сегментам — в зависимости от индикатора. Кому-то 510 Ом будет ярко, а у меня 150 Ом, так яркости не хватает, индикаторы старые, неяркие. Бузер со встроенным генератором, на 5 вольт. Транзисторы npn на ток порядка 100мА — ВС547, ВС847, КТ3102, КТ315. Питание — трансформатор ТП-112-18, диодный мост на 1А. Вот с симисторами я немножко поволновался — ВТ136 не выдержал пылесоса (1300W), пришлось менять на ВТ140. Для тех котов, кто тоже поставит симисторы и будет использовать пылесос, должен отметить, что радиатор надо ставить побольше, а не то можно обжечь лапы (шутка, лапами к этому радиатору лезть не стоит, с электричеством шутки плохи). Больше 10-ти минутной выдержки мой радиатор не потянет, но поскольку я планирую для этих целей использовать вентилятор, я не сильно переживаю.

Ну теперь по функционалу и работе. Управление выполняется пятью кнопками, из них три — это изменение/установка выдержек, две остальных — включение компрессора и запуск таймера. При запуске таймера включаются и компрессор и подсветка, но компрессор можно принудительно включить в режиме ожидания чтобы подготовить плату с шаблоном к засветке. Для этого и пришлось выводить отдельную кнопку «воздух» для управления компрессором. В режиме ожидания кнопками плюс/минус выбираются сохраненные установки (я сделал три, больше просто нет смысла). При нажатии кнопки «уст» начинают мигать минуты, кнопками плюс/минус меняется значение минут с шагом в 1 минуту (от 0 до 99); второе нажатие «уст» сохраняет значение минут и начинают мигать секунды, их значение меняется таким же образом, но с шагом 5 сек (от 0 до 55). Шаг в 5 секунд был выбран как наиболее оптимальный — при шаге в 1 сек и 10 сек уже не очень комфортно изменять значения. При шаге в 1 сек слишком медленно, а при шаге в 10 — слишком быстро меняются значения. Третье нажатие кнопки «уст» сохраняет значение секунд и таймер переходит в режим ожидания, показывая свежеизмененную выдержку. Запуск таймера происходит по нажатию кнопки «пуск». При этом включается компрессор и засветка, на индикаторе происходит обратный отчет и мигает децимальная точка между минутами и секундами. После окончания выдержки засветка и компрессор выключаются, на экране загорается надпись «OFF» и звучит прерывистый сигнал бузера до тех пор, пока повторно не нажмется кнопка «пуск», после чего таймер опять переходит в режим ожидания, показывая значение выбранной выдержки. Из недостатков работы таймера следует отметить погрешность в 1,5-2 секунды при выдержке в 10 минут. Но поскольку это не часы, то я не стал что-либо с этим делать, для меня такая погрешность некритична.

Печатные платы таймера делались «под себя» на двух односторонних платах — основная с контроллером, питанием и симисторами, и плата с индикатором, кнопками и светодиодами — на переднюю панель. Кстати, если светодиоды не нужны, вместо них нужно поставить резисторы номиналом 510-1000 Ом, иначе оптопары работать не будут. Платы соединяются плоским 20-ти пиновым шлейфом. Применены как SMD, так и DIP компоненты. Внимание! На плате ATMega8 в SMD корпусе, а в схеме распиновка для DIP корпуса! Не перепутайте! Все это я рассчитываю поставить в установку для засветки, корпус как таковой не планировался. Прошивки для индикаторов как с ОК, так и с ОА. При прошивке нужно установить фьюзы на внутренний генератор 8 MHz (впрочем можно и на внешний кварц такого номинала, соответствующие ножки контроллера я не трогал). Прошивки состоят из двух файлов — Flash и EEPROM. Если программа-прошивальшик шьет только одним файлом, это не смертельно, все будет работать и так, но при первом включении нужно будет каждую из предустановок вручную «погонять» для приведения в должный вид.

И, естественно, фотки.
Платы в сборе:

Таймер в режиме ожидания:

И в работе (выдержка 2 мин, прошло 10 сек):

Таймер 0. 9999 секунд для засветки фоторезиста на ATtiny13

Недавно решил освоить технологию фоторезистивного изготовления плат и для этого мне понадобилась УФ лампа с таймером. Конечно, можно было бы найти готовый проект и спаять, но мне хотелось не просто сделать таймер, а получить целый багаж знаний и опыта. Критерии к таймеру были таковы: индикация времени, удобный интерфейс и простота. В качестве основы решил использовать микроконтроллер, а именно — Attiny 13. Список всех необходимых компонентов для создания таймера вы можете наблюдать в таблице под этой статьей. Так как у Attiny 13 всего 8 ножек из которых 5 портов ввода-вывода – было решено использовать микросхемы сдвига регистра (74HC595) для вывода времени на индикаторы. Ещё нужно подключить кнопки управления наиболее компактно и для решения этой задачи воспользуемся одним интересным решением – будем использовать АЦП микроконтроллера (суть решения описана ниже). В итоге на свет вырисовывается вот такая схема:

Вам может быть непонятно подключение кнопок, расскажу: с помощью делителей напряжения (резисторы R14. R16) при замыкании конкретной кнопки (S1, S2 или S3) на вход микроконтроллера подаётся определенный уровень напряжения, который распознается АЦП и в зависимости от его уровня микроконтроллер понимает какую кнопку мы нажали. R12 и C1 – RC фильтр помех, так как при нажатии кнопок — возникает дребезг контактов и микроконтроллер может ошибочно воспринять не одно, а больше нажатий. Резистор R13 нужен для подтяжки входа АЦП при отжатых кнопках, что бы МК не воспринимал помехи.

Теперь об индикаторе, который, кстати, с общим катодом. Как видите — микроконтроллер управляет микросхемами сдвига регистра. Он посылает последовательный код чисел по двум ножкам, а по третьей – частоту тактирования. Микросхема сдвига регистра U3 – отвечает за разряд индикатора, на который выводится цифра, а U2 – за ввод самих цифр в разряды. Выводятся цифры последовательно. То есть: определили микросхему U3 на вывод числа в 1-й разряд индикатора, а регистр U2 в это время подает на включенный разряд индикатора код самой цифры, после — микросхема U3 включает 2-й разряд индикатора, а микросхема U2 выводит следующую цифру в выводимом числе. Подобным образом выводятся цифры на остальные разряды. Так как частота перебора разрядов достаточно велика – в итоге мы увидим единое, будь то 4-х или, например, 2-х значное число.

Читайте также  Дигитайзер на arduino uno

Управлять УФ светодиодной матрицей будем с помощью полевого транзистора. Первый попавшийся мне под руку – IRF445H в корпусе SOIC8 выпаянный из платы старой видеокарты. Вы можете использовать любой другой транзистор, главное что бы он смог коммутировать чуть более 3-х ампер.

Поскольку светодиоды питаются напряжение около 3.3В, то нам понадобиться приспособить отдельный стабилизатор с током более 3А (так как у нас 100шт. светодиодов). В качестве такого стабилизатора я использовал DC-DC понижающий модуль MP1584 (обычные линейные стабилизаторы типа L7833 не подойдут в связи неспособностью обеспечить ток более 3А). Ввиду того, что наш модуль регулируемый, нужно выставить подстроечным резистором требуемый уровень напряжения и затем заменить этот резистор на аналогичный по сопротивлению постоянный. В моем случае я поставил два резистора соединённых последовательно: 5,1кОм и 22кОм:

Резистор R1 выполняет роль подтяжки вывода RESET иначе наша программа будет произвольно сбиваться при каждой помехе. Резисторы R4. R11 нужны для ограничения тока через светодиоды индикатора. Что ж остальное в схеме должно быть понятно.

Печатную плату и схему разводил в DipTrace. Пришлось использовать 2-х сторонний текстолит с применением межслойных переходов (как их выполнить – покажу далее)

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

С теорией вроде всё.

Теперь переходим к практике:

Для начала зальем прошивку в наш микроконтроллер. Я воспользуюсь программой AVRDudeProg. Отмечу, что настройку фьюз-бит производить не нужно (просто установите их по умолчанию). Кстати, если вам интересно – я заливаю код с помощью дешёвого китайского программатора AVRASP в связке с самодельной отладочной платой:

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

Изготавливать буду по лазерно-утюжной технологии. Распечатаем-подготовим текстолит (я сниму окислы на меде с помощью канцелярского ластика) — что бы 2 слоя сошлись правильно – просверлим контрольные отверстия – утюжим – смачиваем — аккуратно стираем бумагу – проверяем на наличие обрывов или слипаний дорожек — если таковых не находим – начинаем травить плату ( я буду травить в хлорном железе) – готово – опять же проверяем плату на дефекты – после, сверлим отверстия (замечу, что диаметр у некоторых отверстий разный – у отверстий для межслойных переходов – 0,4 мм, остальные отверстия – 0,6 и 1,0 мм) – отлично — если есть желание, плату можно залудить в сплаве розе — так она дольше прослужит. Теперь приступим к межслойным переходам. Изготавливать эти переходы мы будем следующим способом : Сначала сверлим отверстие, потом берём медную проволоку (провод) с диаметром равным диаметру просверленного отверстия и вставляем её туда так, чтобы из платы немного выделялись кончики проволоки:

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

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

При желании места межслойных переходов можно укрепить залудивши контактные площадки с 2-х сторон платы. Я решил немного заморочиться и покрыть плату паяльной маской. Вышло не очень, но переделывать не особо хочется:)

Далее нужно изготовить плату УФ прожектора. Там все аналогично, за исключением отсутствия межслойных переходов (так же я решил покрыть дорожки платы сплавом Розе):

Как я уже упоминал ранее — платы будут размещаться одна над другой. Закреплены они будут с помощью металлических стоек. Для электрического контакта между платами (питание для светодиодов) — подготовим соединительный провод с разъемом и соответствующим штекером для платы (Можно, конечно, просто припаять):

Наши платы готовы, поэтому перейдём непосредственно к запайке компонентов. Начинать советую с мелких и труднодоступных элементов. Микросхемы в SMD исполнении можно паять как паяльником, так и феном. Лично мне удобнее паяльником. В итоге получилось что-то вроде этого:

Как видно из последнего фото — несколько светодиодов решило не светится, но это не играет особую роль поскольку все светодиоды соединены паралельно. Кстати номинал ограничительных резисторов (их 100шт для каждого светодиода) — 100-200 Ом.

Ну и напоследок соберем наше устройство в корпус в качестве которого буду использовать пищевой бокс. Вот окончательная конструкция:

Как видите, я еще предусмотрел охлаждение УФ матрицы, так как засветка паяльной маски — процес длительный (занимает около часа, а то и больше) за который светодиоды неплохо так нагреваются.

Теперь о питании: запитывал блоком питания 12В 1А подключенным к разъему питания (диаметр 6мм) на плате. Так же есть возможность подключить питание к клеммнику справа от разъема.

После подключения питания устройство сразу начинает работать:

Вроде все объяснил. Если у вас возникнут какие-нибудь вопросы – пишите в комментариях

ЭЛЕКТРОНИКА «Лампа» с таймером для засветки фоторезиста

  • Форумы
  • Мастерская
  • Проекты участников

AstreyRize

2.8 часа). Как показала практика для засветки фоторезиста вполне хватает 90-120 секунд. Что получилось можно посмотреть на youtube.

Для проекта понадобится:

  1. Обратите внимание, что для работы нужен индикатор конкретной модели: kem-5461ar. Если индикатора для данной модели нет придется переопределить цифры в коде, как это сделать см. «Разбор кода»
  2. Так же лучше взять не очень высокие электролиты, так как их можно «положить» на плату как можно увидеть на фото ниже.
  3. Микроконтроллер прошивается после распайки всех компонентов на плату, для этого предусмотрены контакты: MISO, SCK, MOSI

Принцип работы:

Питание «лампы» 12V. Вся логика работы завязана на МК atmega8а. Питание для микроконтроллера и индикатора 3.3V, подается через стабилизатор напряжения AMS1117 3.3V.
С помощью энкодера задается время экспонирования, затем по нажатию нижней кнопки запускается процесс засветки при этом управление через энкодер отключается. При истечении времени засветка прекращается. Верхняя кнопки — сброс. Сброс реализован просто замыканием контакта reset на землю.

Вклеиваем ленту в рамку для фотографий:

Прототип я собирал на базе atmega8515 и все кнопки обрабатывались внешними прерываниями, но с переходом на младшую модель пришлось отказаться от одного прерывания, т.к. у atmega8 их 2 против 3 у 8515.

Проверка прототипа на обычной ленте:

С процессом разработки все стандартно: травим плату, сверлим отверстия, распаиваем компоненты начиная с SMD и заканчивая экраном и энкодером. Дополнительно на энкодер припеваем конденсаторы 104 (100nF) для того, что бы избежать дребезга контактов при срабатывании кнопок.

Проект можно скачать с github. Проект написан на C с использованием CVAVR.
Итак, если нужный индикатор найти не удалось необходимо изменить значения в данном массиве:

Указанный массив представляет собой маску для порта B. Как можно понять из комментария к коду, здесь биты расположены от пина7 порта B до пина 0 порта B (//PB7. PB0). Так же в комментарии указано, какой пин какой сегмент зажигает (//FBGCDpDEA): 7-F, 6-B и т.д. Включение сегмента осуществляется подачей 5v на ногу. На примере «0» видно, что не горят сегменты G и Dp (точка). Порт B конфигурируем как выход:

За переключение разрядов отвечают биты 0-3 порта C. Конфигурируем порты следующим образом:

Создаем маску для включения разряда:

Теперь что бы отображать все 4 числа на индикаторе нужно просто каждый цикл передавать на порт C один из элементов массива digit, например: PORTC = digit[step]; , где step разряд, который нужно зажечь, а на порт B подать элемент нужный элемент массива numbers: PORTB = numbers[digitByNumbers] , где digitByNumbers число от 0 до 10 — цифра, 11 — знак дефиса.

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

Второе прерывание отвечает за кнопку на энкодере и двигает разряды позволяя задавать 4-х значные числа. Переменная digitNumber в данном случае номер разряда:

Читайте также  4-х канальный контроллер нагрузок с управлением по

Последние, что нужно сделать, включить внешние прерывания прерывания и разрешить их #asm(«sei») . Включаем прерывания устанавливая в регистры GICR, MCUCR, GIFR следующие значения:

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

Т.к. таймер 8-ми битный, что бы отсчитать одну секунду ему понадобиться отработать 30 раз:

Проверяем, что таймер переполнился 30 раз после чего уменьшаем количество секунд на одну, а если досчитали до 0, останавливаем таймер и снова готовимся к работе:

VanoTM › Блог › UV LED Matrix для фоторезиста ч.2 (таймер)

Прошло пару месяцев дождался BoostStep блока с китая и начал размышлять о сотворении таймера для нашего светильника.
Задача: Установка времени включения с точностью до секунд, охлаждение нашей матрицы, сигнализировать о завершении, ну и всякие сохранения и настройки по вкусу.
Не так давно дело имею с микроконтроллерами, из поделок были поделки на PIC ( ходовые огни ), наигрался с Arduino — хотелось изучить и Atmega и походу пришло время откинуть Arduino Wiring и сделать что-то напрямую на Atmega ( хотя во время писания кода много раз хотелось залить загрузчик от arduino и написать там с готовыми библиотеками ) . Поэтому получился мой первый проект на голом Atmega8.

Порывшись среди хлама найден 2хсегментный 7сегментник — ОК будет показывать отсчет времени …, по времени на засветку фоторезиста уходит не более 40сек, сегментник способен показать 99, а если маску светить ? — решение, я добавил еще один светодиод который будет показывать режим минуты, т.е теперь можно еще 99 минут поставить, думаю этого достаточно . В качестве сигнализатора обычный зумер, для охлаждения кулер с какого-то монитора .
Всё учтено, делаем плату таймера по размеру нашего светильника, т.к будет пирог .
Процесс рисования и засветки упускаем…, делал всё как обычно на просроченом самом капризном фоторезисте ФР ВЩ, поэтому стадии проявить и протравить быстрые .

После травления из того же фоторезиста делаем паяльную маску, процесс аналогичен, кроме конечного, после проявления дубим ФР в ламинаторе ( греем по максимуму несколько раз ), наш ФР превращается в нечто подобие стекла и уже почти нечем не травится.

что за круг в середине увидите чуть дальше, т.к дальше монтаж того что у нас есть …

пока еще не припаен термодатчик DS18b20

естественно при первом включении на индикаторах мусор, т.к в прошивке код типа HELLO WORD, т.к сегменты рапаяны не для какбы как, код для формирования циферок еще долго потом составлял .
Но решил пока решил написать 10 секундный таймер и включать наши светики, поэтому собираем бутерброд, который обзавёлся ножками ( ножки это винты крепления с COM разъёмов )

ну и далее писался код для таймера, который получил
управления 3-мя кнопками «-» «выбор» «+» всё банально, + и — прибавляем или отнимаем выставленое время, средней «выбор» запускаем — останавливаем или выбираем функционал, а функционал пока получился такой, двойное нажатие — переключение минуты-секунды ( светик справа), 3,4,5 нажатий выбор предустановленных значений ( 40 сек, 30 сек, 5 минут ), одно долгое нажатие сохраняет в eeprom установки — эти установки ставятся при включении .
Вентилятор : он у нас не постоянен, а включается по температуре ( снизу к светикам приложен термодатчик ), включается при +35 выключается при +29 гардусах ( т.е за 40 сек светики могут не нагрется, включать вентилятор нет смысла ) .
Примерный функционал так и остался, но на плате есть разъём для програмирования .
Осталось собрать корпус, долго думал, хотел не знаю чего, поэтому взял кусок оргстекла, напилил кусочков, обточил, склеил дихлоританом, долго полировал всякими наждачками и после 3М пастами для полировки авто, немного попилил и получил корпус.

Таймер для экспонирования фоторезиста

Доброго времени суток!
Развитие современных технологий толкнуло к освоению изготовления печатных плат с помощью фоторезиста. Печатаем фотошаблон, накатываем фоторезист, делаем из них бутерброд… Теперь нужно экспонировать. Как измерять время экспозиции? Можно, конечно, бегать с часами и дергать вилку из розетки. Но это не true way. Наш метод — изготовление таймера. Под катом пост на тему «Я и мой сраный таймер»

Что было надо и что получилось
Прежде всего, я использую лампу КЛЛ, 26W, цоколь Е27. Очень удобно, балласт внутри. То есть, коммутировать нужно 220V переменки. Питание, естественно, от сети.

Экспозицию нужно записывать в ПЗУ (EEPROM), не вводить же каждый раз заново.

Дисплей. Функционал устройства мизерный, хватит простого LEDа. В сети много конструкций со строчными (знакогенераторными) дисплеями, имхо, перебор.

Максимальное время экспозиции — 60 минут 59 секунд. Не думаю, что понадобиться больше. Минимальное — 1 секунда.

Кнопки — традиционно 3 штуки, старт и установка времени (инкремент и декремент).

Еще один момент — как узнать о завершении экспонирования? Опять бегать и смотреть на дисплей? А заодно и на включенную лампу? Нее, добавим звуковую сигнализацию (пищалку).

Итак, общая концепция «черного ящика»:
1. Разъем для подключения сетевого питания
2. Розетка для подключения нагрузки
3. LED — 4 разряда (минуты: секунды), двоеточие
4. Тактовые кнопки, 3 штуки
5. Пищалка

Корпус. Если устройство без корпуса, это не устройство, а средство для сбора пыли. Я выбрал N8AA производства AMBOX (думаю, у Kradex тоже найдется нечто подобное). Купил я его в 9В, на то время примерно за 1.5$. Но с ебучим темпом инфляции, ну, вы понели…

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

На одном торце расположим разъем питания и выключатель, на другом — розетку и пищалку. На морде дисплей, кнопки. И еще два светодиода — питание и нагрузка (питание в общем-то не нужно, но для симметрии я поставил).

Сначала фото того, что получилось, а потом (если останется желание читать) — обсуждение внутренностей.

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

Силовая часть
Блок питания — линейный. Ибо импульсный избыточно. А не развязанный, хм… Не люблю я их.

Места в корпусе полно, есть куда втулить завалявшийся китайский трансформатор. Я его пробовал в устройстве с ИК-приемником (дежурный режим), греется зараза. А тут малое время работы, как раз сойдет.
Под трансформатор вырезано прямоугольное отверстие, отлично сидит и не дергается.


Мост КЦ407, до этого ни разу не паянный, жалко же выбрасывать.

Коммутирующий элемент — симистор. Ставить реле как-то рука не поднимается, хоть и место есть. Как водиться, опторазвязка MOC3043. Схема самая что ни есть типовая, она приведена в даташите на MOC3043 (даташит есть во вложении).

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

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

Устройство управления

Микроконтроллер — STM8S003F3P6. Дешевле я не видел, да еще с такой кошерной начинкой. Даже встроенный модуль для пищалки есть. Кварц поставил, все-таки время считать.

Дисплей — CC56-21GWA, если это о чем то говорит. Высота 19мм, таких полно в магазинах.

К дисплею еще сдвиговый регистр идет — классика жанра, 74HC164. У меня он был в DIP.

Кнопки с круглыми поршнями. Акцентирую, на ногах 11 и 12 внешние pull-up резисторы. Эти выводы контроллера open-drain, без встроенных подтяжек. Я невнимательно читал даташит, и потом долго не мог понять, почему кнопки плавают…

Пищалка пьезо, резонанс вроде 1кГц. Успешно демонтирована откуда-то, но в магазинах их полно.
Пробовал ставить электромагнитную (через транзистор, естественно), но звук был намного тише (это те что без генератора). И жрет она 10-15мА. Единственное достоинство, на мой взгляд — их можно выдирать из старых китайских будильников.

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

Поскольку таймер делал не на выставку, не хотелось заморачиваться с колпаками для кнопок и шильдиком. Три кнопки, запомнить не сложно: START/STOP, INC, DEC.

Описание работы

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

Читайте также  Озонатор воздуха на двух транзисторах

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

По достижению заданного времени экспозиции нагрузка отключается, затем идет звуковой сигнал (четыре убывающих тона). На дисплее 00:00. Время, которое вы использовали, запоминается в EEPROM.

Нажимаем еще раз START, и получаем на дисплее время экспозиции (вместо нулей).

Как изменить время экспозиции? Нажать одновременно кнопки INC и DEC. Устанавливаемые разряды (минуты или секунды) начнут мигать. Приращение/уменьшение времени осуществляется кнопками INC, DEC. Быстрый набор при удержании присутствует:) Переход между минутами и секундами кнопкой START.

Максимально возможное время экспозиции — 60 минут 59 секунд. Минимально возможное — 00 минут 01 секунд.

Выход из режима установки — одновременным нажатием кнопок INC и DEC.

Еще один момент — если экспозиция запущена, ее запросто можно отключить, нажав кнопку START (т. е., она же являеться и кнопкой STOP).

Видео в аскетичном телефонном качестве прилагается.

Прошивка

Не вижу смысла в рамках этого поста описывать прошивку. Все исходники во вложении, также можно посмотреть файл «About_UF-Timer.txt» Проект сделан в IAR.

Прошивал контроллер с помощью STM8L-Discovery.

Важно! Если кто надумает повторить проект! Питание таймера 5В, а уровни STM8L-Discovery 3В. Либо согласовывать, либо запитывать целевой МК от программатора (что я и сделал).

Небольшой, но важный нюанс. Модуль бипера этого МК может тактироваться либо от LSI (встроенный RC-генератор, по умолчанию), либо от HSE(внешний кварц). Но, чтобы нормально работать на частоте резонанса пьезоизлучателя, нужна калибровка. Для калибровки нужно использовать встроенный таймер в режиме захвата. Об этих и других увлекательных вещах можно почитать в RM0016.
Без калибровки я пробовал, не понравилось (128 kHz ± 12.5%, 16кГц — не мало, да?). Почему бы не использовать HSE, кварц-то установлен? Тут тоже не все так просто. Переключение на бипера на тактирование от HSE осуществляется через Option bytes.
В общем, я запустил утилиту STVP и во вкладке OPTION BYTE сделал следующее:

до

после

То же самое можно бы сделать в прошивке, но мне было лень

Вложение

Во вложении вы найдете:
1. Схему в формате sPlan, там же чертежи «морды» и расположение плат в корпусе (увы, в SolidWorks я не силен)
2. Печатка в формате LayOut
3. Проект под IAR, с исходниками
4. Чертежи корпуса и даташиты
5. Фотографии (включая скрины прграммирования OptionByte)

Вопросы/предложения/пожелания складываем в комментарии.

Записки программиста

Паяем таймер и матрицу из УФ-светодиодов для быстрой засветки фоторезиста

19 февраля 2018

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

Важно! Смотреть на ультрафиолет не полезно для глаз. Не советую делать это слишком долго, а в идеале рекомендую использовать соответствующие защитные очки.

Почему бы просто не взять готовое?

Дмитрий описал свой проект в небольшой статье и выложил все исходники на GitHub. Однако Дмитрий разводил плату в Sprint Layout, который стоит денег. Меня не сильно прельщала перспектива покупки и изучения данного ПО, особенно учитывая, что оно не поддерживает используемый мной на десктопе Linux. Кроме того, не похоже, чтобы Sprint Layot чем-то превосходил кроссплатформенный и открытый KiCad.

Плюс к этому мне лично не сильно понравился внешний вид устройства Дмитрия. Впаивать Arduino Nano, использовать громоздкий экранчик 1602 и строить сэндвич из нескольких плат разного размера мне не хотелось. Уж если и делать какое-то устройство в домашних условиях, почему бы не сделать его таким, как нравится именно тебе, верно?

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

Матрица из ультрафиолетовых светодиодов 10 x 10

Ультрафиолетовые светодиоды довольно просто найти на eBay. Лично я покупал здесь. Пакетик с сотней светодиодов вместе с доставкой обошелся мне в 220 рублей (3.90$).

Светодиоды я решил расположить в виде матрицы 10 на 10, рассчитанной на питание от 5 В. Плата была без труда разведена в KiCad. В каждом из рядов был использован один резистор для ограничения тока и 10 светодиодов, соединенных параллельно. Сопротивление резистора было подобрано так, чтобы светодиоды светили достаточно ярко, а резистор при этом не перегревался. Я остановился на сопротивлении 27 Ом.

Вот что у меня получилось в итоге:

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

Fun fact! Я использую ванну VGT-800 с отмывочной жидкостью Solins US. Это намного удобнее и быстрее, чем отмывать спиртом с зубной щеткой. Просто кидаешь плату в ванну, жмешь кнопку, ждешь пару минут, промываешь, и все!

Таймер на базе ATmega328

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

На момент написания этих строк я умел работать с микроконтроллерами AVR и STM32. Использовать STM32 для простого таймера мне показалось оверкилом, поэтому я использовал восьмибитный микроконтроллер ATmega328. Сказать по правде, 32 Кб flash-памяти для этого проекта тоже оверкил, вполне хватило бы и ATmega48. Но у меня был некоторый запас микроконтроллеров ATmega328, а покупать микроконтроллер специально под этот проект мне не хотелось. Так что, я остановился на ATmega328.

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

Вот что у меня получилось:

Также я заказал пять аналогичных плат у JLCPCB на будущее. Заказ обошелся мне в 22$ вместе с доставкой. На момент написания этих строк платы мне еще не доехали, но выглядеть они будут примерно так:

На области для прототипирования я впаял МОП-транзистор с N-каналом IRF3205 для защиты от переполюсовки. Для включения и выключения светодиодной матрицы было использовано обычное реле (модель RT424005). Также я использовал сглаживающий конденсатор на 100 мкФ, чтобы микроконтроллер не вырубало при включении матрицы.

Прошивка для устройства была написана на языке C, без библиотек от Arduino. В прошивке мало нового для нас с вами. Работа с использованным здесь индикатором ранее рассматривалась в заметке Как я делал электронные часы на базе FPGA. Программирование под AVR на языке C нам знакомо по заметке Как я спаял электронные игральные кости на базе ATtiny85. Из того, что не рассматривалось ранее, в прошивке есть разве что работа с EEPROM. Работать с ним не сложно:

int8_t saved_timeout [ 4 ] EEMEM = < 0 , 2 , 0 , 0 >; // 20 seconds

void setup ( ) <
// load timeout from the EEPROM
eeprom_read_block ( timeout , saved_timeout , sizeof ( timeout ) ) ;