Автомат, включающий нагрузку по свистку на pic

Содержание

Автомат, включающий нагрузку по свистку на PIC

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

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

В основе автомата-приставки микроконтроллер серии Microchip – PIC12F629. Аналоговая часть – усилитель звуковой частоты и исполнительная цепь – ключевой транзистор и реле, коммутирующее питание нагрузки. В качестве реле я использовал TRM3003 на 110 В с гасящим резистором (R8)16 kOm (2 Вт). Устройство питается от параметрического стабилизатора, собранного на стабилитроне и сглаживающих пульсации конденсаторах.

Устройство работает так: в режиме ожидания на порту GP0 микроконтроллера присутствует лог. «1», а на порту GP2 – лог. «0». Таким образом аналоговая часть работает в режиме усилителя звуковой частоты. Сигнал от пьезоэлемента подается на базу первого транзистора КТ3102Б. Смещение на базу подается через резистор 3,3 М. С коллекторной нагрузки первого транзистора сигнал через развязывающую емкость подается на базу второго транзистора обратной структуры. Его база приоткрыта резистором 2 М. С коллекторной нагрузки второго транзистора усиленный сигнал подается через емкость 510 пФ на порт GP1 контроллера. Резистор 20 К совместно с емкостью выполняет роль дифференцирующей цепочки, что снижает реакцию усилителя на посторонние шумы.

При поступлении громкого сигнала свиста либо хлопка в ладоши на выходе усилителя появляется напряжение, которое поступает на порт GP1 контроллера. Контроллер «просыпается», изменяет напряжения на порту GP0 на противоположные, а через порт GP2 начинает генерировать сигнал звуковой частоты – пакеты длительностью 200 mS, заполненные частотой 5000 Гц, с интервалами в 100 mS. Это своего рода сигнал о том, что команда принята. Всего 3 пакета общей длительностью около 1 S. Затем на GP5 формируется лог.«1» и включается нагрузка. Наличие диода в базовоколлекторном переходе первого транзистора позволяет сигналу проходить через пьезоизлучатель. Диод необходимо подобрать по наименьшему сопротивлению в прямом состоянии, в этом случае сигнал будет звучать громче.

Устройство питается от сети 220 В. Напряжение выпрямляется двухполупериодным выпрямителем и гасится на резисторе 100 кОм, затем стабилизируется стабилитроном КС 106 Б.

О программе: в контроллере задействован внутренний тактовый генератор на 4 МГц. В режиме ожидания контроллер находится в спящем состоянии и потребляет ток примерно 4 мкА, не считая потребления от портов питания усилителя и ключевого транзистора. В общем, суммарный ток потребления в режиме ожидания не превышает 100 мкА. В программе реализовано прерывание по изменению состояния порта GP1. Сразу после пробуждения и сброса флага прерывания от порта, запрещаются дальнейшие прерывания от порта, изменяется уровень логики на GP0 и начинается генерация частотнозаполненных пакетов. Пакеты формируется посредством простых циклов. После окончания формирования звуковых пакетов контроллер включает нагрузку, устанавливает первоначальное состояние на портах питания усилителя, разрешает прерывания от GP1 и уходит в сон… Последующая подача сигнала в виде хлопка и свиста повторяет алгоритм и приводит к выключению нагрузки.

Основные моменты программы

Для разрешения прерываний от периферии необходимо настроить регистр INTCON.

Это можно сделать сразу в подпрограмме инициализации:

Здесь установлен быт разрешения глобальных прерываний и прерываний от портов

Непосредственно разрешить прерывания от конкретного порта можно в регистре IOCB.

Нужно, при этом, помнить что IOCB находится в первом банке памяти!

Программа устанавливает GP0 в «1», GP2 в «0», т.е. включает аналоговую часть устройства в режим микрофона, разрешает прерывания от порта GP1 и уходит в сон.

При пробуждении от прерывания программа запрещает прерывание от GP1 и устанавливает на GP0 «0», т.е. отключает питание усилителя.

Вход в прерывание

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

Генерирование сигнала (отклик брелка)

Происходит чисто программно, без использования прерываний. Задержки формируются посредством вложенных циклов. Цикл реализованный на переменной «TEMP» формирует задержку, равную половине периода частоты 500 Гц (т.е. 1 миллисекунда). После выполнения задержки порт GP2 изменяет свое состояние на противоположное и т.д…

Цикл реализованный на переменных «TEMP1» и «TEMP2» формирует повторение внутреннего цикла на «TEMP» в течении 200 миллисекунд.

Пауза формируется все теми же вложенными циклами:

Объединив оба блока (звук + пауза) в один и задав количество повторений через переменную «TEMP3» равную 3 получаем:

Таким образом будет сформирован прерывистый звуковой сигнал частотой 500 Гц, длительностью 200 миллисекунд с интервалом следования 100 миллисекунд. Всего 10 пакетов. Общей длительностью: (0,2+0,1)х3 = 0,9 секунды

Далее следует блок, включающий или выключающий нагрузку:

Переключение состояния порта происходит по принципу: если был «0» – установить «1», если был «1» – установить «0». Я называю такой принцип переключения – триггерным.

При повторении устройства крайне важно подобрать транзисторы по наибольшему коэффициенту усиления: КТ3102 – не менее 500, КТ3107 – не менее 1000. Допускается использовать любые другие маломощные низкочастотные транзисторы с подобными коэффициентами усиления. Наладка устройства сводится к подбору резисторов смещения на базы усилительных каскадов по наибольшему усилению сигнала.

Управление мощной нагрузкой переменного тока

Все знают, насколько ардуинщики гордятся миганием лампочками

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

Выбор управляемой нагрузки

Существует много различных типов ламп. Не все из них поддаются регулировке яркости. И, в зависимости от типа лампы, требуются разные способы управления. Про типы ламп есть хорошая статья. Я же буду рассматриваться только лампы, работающие от переменного тока. Для таких ламп существует три основных способа управления яркостью (диммирование по переднему фронту, по заднему фронту и синус-диммирование).
Иллюстрация в формате SVG, может не отображжаться в старых браузерах и, особенно, в IE
Отличаются они тем, какая часть периода переменного тока пропускается через лампу. О применимости этих методов можно прочитать тут. В этой статье речь пойдет только о диммировании по преднему фронту, так как это самая простой и распространенный способ. Он подходит для управления яркостью ламп накаливания (включая галогенные), в том числе подключенных через ферромагнитный (не электронный) трансформатор. Эта же схема может применяться для управления мощностью нагревательных элементов и, в некоторой степени, электромоторов, а также для включения/выключения других электроприборов (без управления мощностью).

Выбор элементной базы

Различных вариантов схем управления нагрузкой в интернете много. Отличаются они по следующим параметрам:Первые два пункта определяются элементной базой. Очень часто для управления нагрузкой используют реле, как проверенный многолетним опытом элемент. Но, если вы хотите управлять яркостью лампы, её необходимо включать и выключать 100 раз в секунду. Реле не рассчитаны на такую нагрузку и быстро выйдут из строя, даже если смогут переключаться так часто. Если в схеме используется MOSFET, то его можно открывать и закрывать в любой момент. Нам нем можно построить и RL, и RC, и синус димер. Но так как он проводит ток только в одну сторону, понадобится два транзистора на канал. Кроме того, высоковольтные MOSFET относительно дороги. Самым простым и дешевым способом является использование симистора. Он проводит ток в обоих направлениях и сам закрывается, когда через него прекращает течь ток. Про то, как он работает можно прочитать в статье DiHalt’а. Далее я буду полагаться на то, что вы это знаете.

Фазовая модуляция

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

  1. Подавать импульсы равно в тот момент времени, когда нужно. Для этого придётся завести на микроконтроллер сигнал с детектора перехода напряжения через ноль
  2. К затвору симистора подключить компаратор, на который завести сигнал с делителя напряжения и с аналогового выхода микроконтроллера

Первый способ хорош тем, что позволяет легко организовать гальваническую развязку высоковольтной части и микроконтроллера. О её важности будет сказано позже. Но любители arduino будут огорчены: чтобы лапа горела ровно, не вспыхивая и не погасая, импульсы нужно подавать вовремя. Для этого управлять выводом нужно из прерывания таймера, а моменты перехода напряжения через ноль фиксировать с помощью «input capture». Это «недокументированные» функции. Проблема решается отказом от библиотек arduino и внимательным чтением datasheet’а на процессоры avr. Это не так сложно, как кажется.
Второй способ управления симистором крайне прост в программном плане, но из-за отсутствия гальванической развязки я бы не стал его применять.

Гальваническая развязка

Самый простой способ управлять симистором — это подключить к затвору ножку микроконтроллера. Есть даже специальная серия симисторов BTA-600SW управляемых малыми токами.Но тогда контроллер и вся низковольтная часть не будет защищена от помех, гуляющих по бытовой сети. Некоторое из них могут быть достаточно мощными, чтобы сжечь микроконтроллер, другие будут вызывать сбои. Кроме того, сразу возникают проблемы со связью микроконтроллера с компьютером или другими микроконтроллерами: нужно будет делать развязку в линии связи или использовать дифференциальные линии, ведь, чтобы управлять симистором прямо с ноги микроконтроллера, нулевой потенциал для него должен совпадать с потенциалом нуля в бытовой сети. У компьютера или другого такого же микроконтроллера, подключенного в другой точке сети, нулевой потенциал почти наверняка будет другим. Результат будет плачевным.
Простой способ обеспечить гальваническую развязку: использовать драйвер симистора MOC30XX. Эти микросхемы отличаются:

  1. Расчетным напряжением. Если для сетей 110 вольт, есть для 220
  2. Наличием детектора нуля
  3. Током, открывающим драйвер
Читайте также:  Блок питания радиоприёмника из электронного балласта лдс

Драйвер с детектором нуля (MOC306X) переключается только в начале периода. Это обеспечивает отсутствие помех в электросети от симистора. Поэтому, если нет необходимости управлять выделяемой мощностью или управляемый прибор обладает большой инерционностью (например это нагревательный элемент в электроплитке), драйвер с детектором нуля будет оптимальным выбором. Но, если вы хотите управлять яркостью лампы освещения, необходимо использовать драйвер без детектора нуля (MOC305X) и самостоятельно открывать его в нужные моменты.
Ток, необходимый для открытия важен, если вы хотите управлять несколькими нагрузками одновременно. У MOC3051 он 15 мА, у MOC3052 10мА. При этом микроконтроллеры stm могут пропускать через себя до 80-120 мА, а avr до 200 мА. Точные цифры нужно смотреть в соответствующих datasheet’ах.

Устойчивость к помехам/возможность коммутации индуктивной нагрузки

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

  1. Нагрузка, управляемая симистором (обмотка мотора)
  2. Фильтр (snubber), расположенный рядом с симистором и призванный его защищать
  3. Внешняя помеха (грозовой разряд)

Помеха может быть как по напряжению, так и по току, причем более критичны скорости изменения соответствующих значений, чем их амплитуды. В datasheet’ах соответствующие значения указаны как:
V — максимальное напряжение, при котором может работать симистор. Максимальное пиковое напряжение не намного больше.
I — Максимальный ток, который может пропускать через себя симистор. Максимальный пиковый ток как правило значительно больше.
dV/dt — Максимальная скорость изменения напряжения на закрытом симисторе. При превышении этого значения он самопроизвольно откроется.
dI/dt — Максимальная скорость изменения тока при открытии симистора. При превышении этого значения он сгорит из-за того, что не успеет полностью открыться.
(dV/dt)c — Максимальная скорость изменения напряжения в момент закрытия симистора. Значительно меньше dV/dt. При превышении симистор продолжит проводить ток.
(dI/dt)c — Максимальная скорость изменения тока в момент закрытия симистора. Значительно меньше dI/dt. При превышении симистор продолжит проводить ток.
Подробно о природе этих ограничений и о том, как сделать фильтр, защищающий от превышения этих величин описано в Application Note AN-3008. К немо можно только добавить, что существуют 3Q симисторы, у которых значения dV/dt и dI/dt выше, чем у обычных за счет невозможности работать в 4ом квадранте (что обычно не требуется).

Выбор симистора

Максимальный ток коммутации

Максимальный ток коммутации ограничивается двумя параметрами: максимальным током, который может пропустить симистор и количеством тепла, которое вы можете от него отвести. С первым параметром все просто, он указан в datasheet’е. Но если посмотреть внимательно, то при токе в 16 ампер на BTA16-600BW выделяется около 20 ватт. Такую грелку уже не получится засунуть в коробку выключателя без вентиляции.

Минимальный ток коммутации

Симистор сохраняет проводимость до тех пор, пока через него идёт ток. Минимально необходимый ток указан в datasheet’е под именем latching current. Соответственно, слишком мощный симистор не сможет включать маломощную лампочку так как будет выключаться, как только с затвора пропадёт управляющий сигнал. Но так, как этот сигнал мы самостоятельно формируем микроконтроллером, то можно удерживать управляющий сигнал почти до самого конца полупериода, тем самым убрав ограничение на минимальную нагрузку. Однако, если не успеть снять сигнал, симистор не закроется и лампа не погаснет. При плохо подобранных константах лампы, работающие на не полной яркости периодически вспыхивают.

Изоляция

Симисторы в корпусе TO-220 могут быть изолированными или не изолированными. Я сначала сделал ошибку и купил BT137, в результате радиаторы охлаждения оказались под напряжением, что в моем случае нежелательно. Симисторы с маркировкой BTA изолированы, с маркировкой BTB нет.

Защита от перегрузки

Не стоит полагаться на автоматические выключатели. Посмотрите на спецификацию, при перегрузке в 1.4 раза автомат обязан выключиться не ранее, чем через час. А быстрое размыкание происходит только при перегрузке в 5 раз (для автоматов типа C). Это сделано для того, чтобы автомат не отключался при включении приборов, требующих при старте значительно больше энергии, чем при постоянной работе. Примером такого прибора является холодильник.
Симистор нужно защитить отдельным предохранителем, либо контролировать ток через него и отключать его при перегрузке, давая остыть.

Защита от короткого замыкания

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

  1. Превышение dI/dt. Симистор не успевает открыться полностью, ток идет не через весь кристалл, образуются локальные горячие области, выжигающие кристалл.
  2. Превышение интеграла Джоуля I^2t. Задает количество теплоты, накопление которой в кристалле приведет к разрушению кристалла.

dI/dt ограничивается индуктивностью проводки и внутренней ёмкостью симистора. Так как dI/dt достаточно велика (50 А/с для BTA16), может хватить индуктивности подводящей проводки, если она достаточно длинная. Можно подстраховаться и добавить небольшую индуктивность в виде нескольких витков провода вокруг сердечника.
С превышением интеграла Джоуля можно бороться либо уменьшая время прохождения тока через симистор, либо ограничивая ток. Так как симистор не закроется, пока ток не перейдет через ноль, не вводя дополнительных размыкателей нельзя сделать время прохождения тока менее одного полупериода. В качестве такого размыкателя можно использовать:

  1. Быстродействующий плавкий предохранитель. Обычный предохранитель не подойдет так как симистор сгорит до того, как он сработает. Но стоят такие предохранители дороже новых симисторов.
  2. Геркон/реле. Если удастся найти такое, чтобы выдерживало кратковременные большие токи.

Можно пойти по другому пути. BTA16-600 может выдержать ток в 160 амер в течении одного периода. Если сопротивление замыкаемой цепи будет порядка 1.5 Ом, то полупериод он выдержит. Сопротивление проводки даст 0.5 Ом. Остается добавить в цепь сопротивление в 1 Ом. Схема станет менее эффективной и появится еще одна грелка, выделяющая при штатной работе до 16 Вт тепла (0.45 Вт при работе 100 ваттной лампы), зато симистор не сгорит, если успеть его вовремя выключить и позаботиться о хорошем охлаждении, чтобы оставался запас на нагрев во время КЗ.
Из этого сопротивления можно извлечь дополнительную выгоду: измеряя падение напряжения на нем, можно узнавать ток, протекающий через симистор. Полученное значение можно использовать для того, чтобы определять короткое замыкание или перегрузку и отключать симистор.

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

Дата публикации: 06 июня 2012 .

Этот восьмиразрядный прибор может измерять частоту синусоидального и импульсного сигнала от 1 Гц до 50 МГц. Время измерения — 1 и 10 с. Дисплей частотомера выполнен на семисегментных светодиодных индикаторах с общим катодом. Особенностью данного частотомера является то, что в нем может быть использован любой кварцевый резонатор на частоту в диапазоне 10. 20 МГц.

В разработанном частотомере применен микроконтроллер PIC16F873, который имеет 28 выводов. Это позволило использовать 16 выходов для непосредственного управления сегментами и разрядами светодиодных индикаторов. Кроме того, этот микроконтроллер имеет три таймера с предделителями. Восьмиразрядный таймер TMR0 и его восьмиразрядный предделитель вместе с двумя дополнительными регистрами используются для подсчета измеряемой частоты. Извлечение значения предделителя выполняется известным способом, заключающимся в досчитывании до нуля с одновременным подсчетом числа импульсов досчета. Таким образом, максимальная разрешающая способность счетчика составляет 32 двоичных разряда.

Счетчик импульсов на PIC16F628

Дата публикации: 04 июня 2012 .

Подсчет ведется в диапазоне от 0 до 999. Счетчик построен на микроконтроллере PIC16F628 и трехразрядном индикаторе с общим катодом. Питание 9-12 вольт постоянного тока. Потребление порядка 20 миллиампер. На плате предусмотрено две кнопки: сброс и увеличение на единицу. К входу счетчика можно подключить кнопку или датчик движения, для этого предусмотрена клеммная колодка. Также установлена клеммная колодка для подключения питания.

Минимальное время нажатой кнопки для увеличения счетчика на единицу – 0,5 секунды. Минимальное время между нажатиями – 3 секунды. Для изменения этих параметров нужно подкорректировать значения задержек в программе.

Блок питания 0 – 25В, 0 – 8А + LCD на PIC16F876

Дата публикации: 30 мая 2012 .

Технические характеристики

Напряжение:
– Регулируется в пределах от 0 до 25В при разрешении 100мВ.

Ток: выбор из 4 диапазонов;
– от 0 до 1A с разрешением 1 мА. JP1 и JP2 не замкнуты, C1 = 2000мкФ, R7 = 0,5 Ом, T1 = 24В, 1A.
– от 0 до 2A с разрешением 2 мА. JP1 замкнут на землю, JP2 не замкнут, C1 = 4000мкФ, R7 = 0,25 Ом, T1 = 24В, 2A.
– от 0 до 4A с разрешением 4 мА. JP1 не замкнут, JP2 замкнут на землю, C1 = 8000мкФ, R7 = 0,125 Ом, T1 = 24В, 4A.
– от 0 до 8A с разрешением 8 мА. JP1 и JP2 замкнуты на землю, C1 = 16000мкФ, R7 = 0,0625 Ом, T1 = 24В, 8A.

Автомат световых эффектов на PIC16F628

Дата публикации: 22 мая 2012 .

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

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

Дата публикации: 01 мая 2012 .

Предлагаемый частотомер собран на микроконтроллере и семисегментных светодиодных индикаторах с общим катодом. Его разрешающая способность составляет 0,1 Гц, что может быть полезным при проведении точных измерений.

Основные технические характеристики

Диапазон измеряемых частот, МГц . 0.1 Гц. 40
Время измерения частоты, с . .1 или 10
Чувствительность, В. 0,1
Напряжение питания, В . 4,5. .5
Потребляемый ток, мА:
в режиме ожидания. 10
максимальный . 35

Схема частотомера показана на рис. 1 На входе устройства установлен компаратор DA1, который включен по типовой схеме с инвертирущим входом. Порог срабатывания компаратора можно изменять подборкой резистора R4 — чем больше его сопротивление, тем выше порог. Работа компаратора управляется сигналом на входе LATCH (вывод 5) DA1 который поступает с линии порта RA3 (вывод 5 DD1), и разрешена при низком логическом уровне на этом входе.

Четыре таймера на PIC16F73

Дата публикации: 26 марта 2012 .

В этой статье описан способ реализации таймеров десятичного счета на примере таймеров с отсчетом времени до 99,99; 999,9 и 9 999 секунд и 99,99 минут. Таймеры поддерживают прямой и обратный счет, силовой выход, сигнализацию окончания счета с помощью зуммера и останов в любой момент времени. Таймеры построены на микроконтроллере PIC16F73, а индикация реализована на семисегментных светодиодных индикаторах с общим катодом. Применение таймеров может быть самое разнообразное: от регламентаторов времени до секундомеров. Принципиальная схема таймера показана на рис.1.

Читайте также:  Устройство защиты ламп накаливания на avr

Зарядное устройство для Li-Ion аккумуляторов на PIC12F675

Дата публикации: 17 марта 2012 .

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

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

Термометр на PIC16F628 + TC77

Дата публикации: 13 февраля 2012 .

Такой термометр подходит для большинства потребностей измерения температуры в быту. Но не смотря на то, что он очень прост и дешев, имеет не плохие характеристики. Диапазон температур от -55°C до +125°C, питание – 2 пальчиковые батарейки, имеет функцию автовыключения. О точности, вообще термодатчик (микросхема TC77 выпускаемая фирмой Microchip) обеспечивает точность не хуже ±1°C в диапазоне температур +25°C – +65°C, ±2°C в диапазоне -40°C – +85°C, и ±3°C в диапазоне -55°C to +125°C. В данном приборе, термодатчик калиброван в точке +36.6°C с точностью 0.1°C, тем самым достигается точность необходимая для измерения температуры тела человека в нужном диапазоне температур. Кроме того в этой точке проще провести калибровку по обычному (а лучше нескольким) медицинскому термометру.

Термометр собран на микроконтроллере PIC16F628, термодатчике TC77-3.3 и двух спаренных светодиодных семисегментных индикаторах с общим анодом. Резисторы – для ограничения тока сегментов индикатора. Конденсатор – блокировка по питанию. Кнопка Sa1 – включение/выключение прибора. Подтягивающий резистор к ней не нужен, так как контроллер имеет внутренний.

Универсальный ШИМ контроллер на PIC16F628 + LCD

Дата публикации: 29 января 2012 .

Представленный в статье ШИМ контроллер подходит для очень широкого спектра применения. Основным элементом управления, используемым для настройки контроллера является поворотный энкодер. Также есть переключатель для выбора режимов работы: «Выключено», «ШИМ» и «Полная мощность». Текущие настройки системы отображаются на стандартном ЖК-дисплее(HD44780) с двумя рядами из шестнадцати символов.

Основа схемы это микроконтроллер PIC16F628 (также может быть использован PIC16F628A). Выходной каскад, состоящий из двух силовых полевых транзисторов IRF9540 которые соединены параллельно, и сдвоенных диодов BYW32, позволяет легко управлять двигателями постоянного тока с напряжением до 24В и номинальными токами до 10А. Схема способна работать при более высоких токах, но тогда особое внимание должно быть уделено площади поперечного сечения проводников и дорожкам на плате, к которым можно припаять провода параллельно с ними.

Тестер пультов RC5/RC6 на PIC16F628

Дата публикации: 15 января 2012 .

В статье дано описание простого тестера для проверки пультов дистанционного управления протоколов RC5 и RC6. В приборе используютя достаточно распространенные компоненты: микроконтроллер PIC16F628 фирмы MICROCHIP, LCD дисплей 16х2 HD44780 и инфракрасный приемник TSOP1736. Когда сигнал с пульта правильно распознан на индикаторе высвечиваются код системы и код команды в двоичном и десятичном формате. Также для индикации контроля сигнала служат светодиоды, HL1 – индицирует прием любого ИК сигнала, HL2 – принят такой же сигнал , HL3 – сигнал не является RC5/RC6, HL4 – ошибка приема сигнала.

130-Многоканальный автомат управления нагрузками на ATtiny2313

Многоканальный автомат управления нагрузками собран на ATtiny2313 и позволяет в автоматическом режиме управлять состояниями 8-ми каналов (Out_0 — Out_7). На каждом из каналов формируется ШИМ-сигнал, скважность которого можно изменять по прописанному Вами алгоритму (программе). В устройстве можно использовать до 8-ми программ каналов. Программу можно зациклить (бесконечное воспроизведение) или можно воспроизвести только один раз. Программу можно запустить ИК-пультом, по команде UART или выбрать следующую программу нажатием кнопки Next Prog на устройстве. Устройство имеет 3 выходные линии Prog Numb, на которых двоичным кодом отображается, номер текущей программы. Кроме того, в момент воспроизведения программы устанавливается логическая единица на выводе Cycle. После старта устройства автоматически запускается на воспроизведение первая (00_prog.txt) программа.

На схеме не показаны защитные резисторы в выходных линиях (по 300 Ом). Их желательно установить, а для случая подключения светодиодов напрямую к ножкам МК – они обязательны.

UART
Автомат управления сделан таким образом, чтобы его можно было включить в комплекс устройств, управляемых по UART (9600, 8, 1stop, noparity). Для совместимости с устройствами блога, программы запускаются по факту прихода в UART соответствующего символа заглавной буквы латиницы (А – программа 0, B — 1, C — 2, … H — 7). При запуске программы соответствующая буква будет передана на выход UART.

Программы изменения сигнала на выходах
— записываются во Flash память микроконтроллера при программировании и в дальнейшем изменяться не могут (только при повторном программировании). Каждая из восьми программ, для удобства, прописана в отдельном файле. Файлы расположены в папке исходника traffic_light_sourceprogs. Имена файлов программ имеют вид: 00_prog.txt, 01_prog.txt, … 07_prog.txt (8 файлов).

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

Вот так выглядит содержимое файла программы-изменения:

// ПРОГРАММА-ИЗМЕНЕНИЯ КАНАЛОВ
// — каналы обновляются покадрово с заданным периодом между кадрами
// — кадр состоит из заданного количества значений-уровней каналов
// — значения лежат в пределах 0-255 (0-нет сигнала 255-максимум)
// — количество кадров может быть произвольным
// — программа должна заканчиваться одним из значений-меток:
// 253 — остановить программу (разовое воспроизведение)
// 254 — зациклить программу (непрерывное воспроизведение)
// соответственно, значения 253 и 254 запрещено использовать в кадрах

// ПАРАМЕТРЫ ВОСПРОИЗВЕДЕНИЯ:
100 // — период межу кадрами в сотых миллисекунды (1-255) 35 = 0,35 Сек
8 // — количество линий, участвующих в программе (1-8)

// КАДРЫ ЗНАЧЕНИЙ НА ВЫХОДНЫХ ЛИНИЯХ
// Далее прописываются кадры значений на линиях
//Out_0, Out_1, Out_2, Out_3, Out_4, Out_5, Out_6, Out_7
// количество значений в каждом кадре должно соответствовать
// значению заданному в параметрах воспроизведения

// Кадр 0
000, 000, 000, 000, 000, 000, 000, 000 // все линии выключены
// Кадр 1
128, 128, 128, 128, 128, 128, 128, 128 // средняя яркость на линиях
// и так далее столько, сколько нужно кадров
255, 255, 255, 255, 255, 255, 255, 255 // все линии на максимум
000, 000, 000, 000, 000, 000, 000, 000
010, 020, 030, 040, 050, 060, 070, 080
000, 255, 000, 255, 000, 255, 000, 255
// ….

// МЕТКА КОНЦА ФАЙЛА
// 253 — остановить программу (разовое воспроизведение)
// 254 — зациклить программу (непрерывное воспроизведение)
254

Каждая программа может иметь произвольное количество кадров и используемых выходных линий.
Всего, для всех программ, суммарно можно использовать до 1024 ШИМ-значения.
Если нужно меньше восьми программ, то лишние файлы описания нужно очистить (сохранить пустыми). Сами файлы должны остаться, иначе компилятор будет выдавать ошибку.

Алгоритм создания устройства, со своими программами изменения каналов следующий:
1 прописываем свои 8 программ в соответствующих файлах 00_prog.txt, 01_prog.txt, … 07_prog.txt в папке исходника traffic_light_sourceprogs
2 запускаем среду программирования Algorithm Builder (algrom.net)
3 открываем исходник traffic_light_source traffic_light.alp
4 компилируем исходник (Ctrl+F9)
5 в папке исходника забираем файл прошивки traffic_light_source traffic_light.hex
6 прошиваем полученным HEX-файлом ATtiny2313
7 устанавливаем фьюзы (внутренний задающий генератор на 8МГц) Low:0xE4 High:0xDF Ext:0x01
— готово!

ИК-пульт
Для того чтобы использовать ИК-пульт, его кнопки необходимо предварительно изучить. В пульте используется 9 кнопок. Первые 8 выбирают соответствующую программу, 9-я – переключает следующую программу.

Процедура изучение пульта стандартна для моих устройств:
1 –нажать (и удерживать) кнопку «Learn»
2 – сбросить устройство либо передернуть питание (при этом индикаторный светодиод должен несколько раз моргнуть)
3 – отпустить кнопку «Learn»
4 – последовательно нажать на пульту 9 кнопок
5 – после этого устройство автоматически начинает работать в штатном режиме

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

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

130-Многоканальный автомат управления нагрузками на ATtiny2313 : 19 комментариев

Очень классная штука! Получается универсальный генератор эффектов! Спасибо!

2.55 секунды самая большая задержка?

2.55 секунды — это максимальная задержка между кадрами.
Если нужно больше:
— можно прописать несколько одинаковых кадров по 2.55 секунды
— можно подправить программу на предмет частоты смены кадров

Отличный проект, если еще реализовать запуск программ по ключам
(варианты выбора как в 087-ATtiny2313 SD Card Talking Device), то получится
просто уникальный и универсальный device для управления различными
механизмами, подсветками и т.д. — это просьба.
И вопросы: — в каком месте программы меняется задержка между кадрами и
какая максимальная задержка?
— для чего указывается количество линий, участвующих в программе? Спасибо!

По ключам и так работает (читать раздел статьи «UART»)

Задержка меняется в файле программы-изменения

// ПАРАМЕТРЫ ВОСПРОИЗВЕДЕНИЯ:
100 // — период межу кадрами в сотых миллисекунды (1-255) 35 = 0,35 Сек
8 // — количество линий, участвующих в программе (1-8)

соответственно она может быть от 10мСек до 2.55 Сек

Количество линий необходимо указать для того чтобы при компиляции программы правильно интерпретировать данные в файле программы-изменения

Спасибо за быстрый ответ, но к сожалению не узнал, что хотел. Видимо неправильно задал вопросы. А хотелось бы знать следующее:
Вы писали:
— «В планах сделать модификацию данного устройства выкинув UART, IR, Prog Numb взамен использовать освободившиеся линии как ключи для запуска отдельных программ»
— будет ли это реализовано?
Вы писали:
— «2.55 секунды — это максимальная задержка между кадрами.
Если нужно больше:
— можно прописать несколько одинаковых кадров по 2.55 секунды
— можно подправить программу на предмет частоты смены кадров».
Где подправить программу и возможно ли сделать задержку, например в 20 секунд?

Читайте также:  Светодиодная гирлянда на микроконтроллере

С модификациями пока сложно — времени не хватает…
По поводу замедления — во вкладке PWM_Out есть подпрограмма _Frame_Work
она вызывается каждый раз для смены кадра (в зависимости от значения частоты вызовов)
если вызов этой подпрограммы делать через раз (или сколько нужно замедлить), то соответственно частота смены будет уменьшатся

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

Постараюсь эту тему не бросать. Например, есть идея считывать файлы-сценарии эффектов с SD-карты.

Тогда возможностей будет еще больше. А если взять контроллер побольше, увеличить количество линий до 12 (в том числе для совместимости со старыми конструкциями), то можно будет не зная искусства программирования «текстовым редактором» заставить робота работать. Ну а светоэффекты можно будет менять бесконечно.

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

Какой индикатор имеется в виду? Prog Numb? Или выхода?

Индикатор Prog Numb, выходы работают четко по программам.

Как-то об этом не особо задумывался.
Вроде как логично, программа закончилась — индикатор сбросился…

Допустим программа №5 разовая и она включает программу подсветки, программа подсветки работает, а индикатор показывает «0», т.е. совсем другую программу. Тоже нелогично.
Пусть, например, после окончания разовой программы индикатор будет показывать какой-нибудь неопределенный знак или лучше пусть его яркость становится в два раза слабее. Так не будет путаницы в номерах программ.

Согласен.
Логичней чтобы оставался код программы.
нужно будет поменять по свободе…

Упс! О чем давно мечтал и просил. Пошел читать мат.часть.

И мне бы помощь по 121…

Да, видел сообщение по 121 — постараюсь добраться и помочь.

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

Для отправки комментария вам необходимо авторизоваться.

Автомат, включающий нагрузку по свистку на pic

Недостатком первого способа является необходимость прописывать в каждой функции программы алгоритм отслеживания прерываний, например:

Вырезка из мануала на семейство PIC16F

Конфигурирование прерываний начинается с бита GIE, если на его месте стоит 0, значит, все прерывания запрещены, не зависимо от того, что будет стоять дальше. Следовательно, ставим 1, разрешая прерывания. Затем устанавливаем нужные нам прерывания. Пока лезть в дебри не будем, и рассмотрим пример на основе того, что уже знаем: установим единицу в ячейку соответствующую RBIE, тем самым разрешаем прерывания по изменению сигнала на выводах RB4, RB5, RB6 и RB7. К данному биту относится флаг RBIF (бит 0). На его месте ставим 0 – прерывания в момент инициализации нет (когда оно будет значение RBIF станет 1). Таким образом, получаем следующее:

Ну а теперь практика.

Скрин из протеуса при симулировании:

Как видно из работы программы в протеусе (видео ниже), прерывание возникает при изменении низкого сигнала на высокий (с 0 на 1). Таким образом было составлено две схемы.

В первой прерывание возникает сразу при нажатии кнопки, так как на RB4 низкий уровень (0 – синий квадратик), а стал высокий(1), т.е. прерывание возникает при замыкании контактов кнопки.

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

Симуляция работы в протеусе:

Так же любые вопросы можно обсудить на форуме.

Система команд PIC-контроллеров серии PIC16C8X

Каждая команда представляет собой 14-разрядное слово, содержащее поле кода операции OPCODE и поле операндов. Система команд включает в себя команды работы с байтами, команды работы с битами, команды управления и операции с константами.

Для команд работы с байтами “f” обозначает регистр, с которым производится действие, а бит “d” определяет регистр назначения. При “d”=0 результат помещается в регистр W, при “d”=1 результат помещается в регистр “f”, заданный в команде.

Для команд работы с битами “b” обозначает номер бита, участвющего в команде, а “f” – регистр, в котором этот бит расположен.

Для команд управления и операций с константами “k” обозначает 8- или 11-битовую константу или идентификатор.

Все команды выполняются в течение одного командного цикла, кроме следующих двух случаев:

  • Переход по проверке условия, если результат проверки условия – истина.
  • Изменение счетчика команд как результат выполнения команды.

В этих случаях команда выполняется за два цикла с выполнением второго цикла как NOP. Один командный цикл состоит из четырех периодов генератора. Таким образом, для генератора с частотой 4 МГц время выполнения команды составит 1 мкс. Если выполняется переход по проверке условия или в результате выполнения команды изменился счетчик команд, время выполнения этой команды при тактовой частоте 4 МГц составит 2 мкс.

Принятые обозначения

f:Адрес регистра
W:Рабочий регистр
b:Номер бита в 8-ми разрядном регистре
k:Константа
x:Не используется. Ассемблер формирует код с х=0
d:Регистр назначения:
d=0 – результат в регистре W
d=1 – результат в регистре f.
По умолчанию d=1
label:Имя метки
TOS:Вершина стека
РС:Счетчик команд
ТО:Тайм-аут
PD:Выключение питания
dest:Регистр назначения: рабочий регистр W или регистр, заданный в команде
[]:Необязательные параметры
():Содержание
–>:Присвоение
<>:Битовое поле
О :Из набора
ОбозначениеФункцияЦиклыКод командыБиты состоянияПримечания
ADDLWСложение константы и W111 111x kkkk kkkkC, DC, Z
ADDWFСложение W c f100 0111 dfff ffffC, DC, Z1, 2
ANDLWЛогическое И константы и W111 1001 kkkk kkkkZ
ANDWFЛогическое И W и f100 0101 dfff ffffZ1, 2
BCFСброс бита в регистре f101 00bb bfff ffff1, 2
BSFУстановка бита в регистре f101 01bb bfff ffff1, 2
BTFSCПропустить команду, если бит в f равен нулю1 (2)01 10bb bfff ffff3
BTFSSПропустить команду, если бит в f равен единице1 (2)01 11bb bfff ffff3
CALLВызов подпрограммы210 0kkk kkkk kkkk
CLRFСброс регистра f100 0001 1fff ffffZ2
CLRWСброс регистра W100 0001 0xxx xxxxZ
CLRWDTСброс сторожевого таймера WDT100 0000 0110 0100
COMFИнверсия регистра f100 1001 dfff ffffZ1, 2
DECFДекремент регистра f100 0011 dfff ffffZ1, 2
DECFSZДекремент f, пропустить команду, если 01 (2)00 1011 dfff ffff1, 2, 3
GOTOПереход по адресу210 1kkk kkkk kkkk
INCFИнкремент регистра f100 1010 dfff ffffZ1, 2
INCFSZИнкремент f, пропустить команду, если 01 (2)00 1111 dfff ffff1, 2, 3
IORLWЛогическое ИЛИ константы и W111 1000 kkkk kkkkZ
IORWFЛогическое ИЛИ W и f100 0100 dfff ffffZ1, 2
MOVFПересылка регистра f100 1000 dfff ffffZ1, 2
MOVLWПересылка константы в W111 00xx kkkk kkkk
MOVWFПересылка W в f100 0000 1fff ffff
NOPХолостая команда100 0000 0xx0 0000
OPTIONЗагрузка регистра OPTION100 0000 0110 0010
RETFIEВозврат из прерывания200 0000 0000 1001
RETLWВозврат из подпрограммы с загрузкой константы в W211 01xx kkkk kkkk
RETURNВозврат из подпрограммы200 0000 0000 1000
RLFСдвиг f влево через перенос100 1101 dfff ffffC1, 2
RRFСдвиг f вправо через перенос100 1100 dfff ffffC1, 2
SLEEPПереход в режим SLEEP100 0000 0110 0011
SUBLWВычитание W из константы111 110x kkkk kkkkC, DC, Z
SUBWFВычитание W из f100 0010 dfff ffffC, DC, Z1, 2
SWAPFОбмен местами тетрад вf100 1110 dfff ffff1, 2
TRISЗагрузка регистра TRIS100 0000 0110 0fff
XORLWИсключающее ИЛИ константы и W111 1010 kkkk kkkkZ
XORWFИсключающее ИЛИ W и f100 0110 dfff ffff1, 2

Примечание:

  1. Если модифицируется регистр ввода/вывода (например, MOVF PORTB,1), то используется значение, считываемое с выводов. Например, если в выходной защелке порта, включенного на ввод, находится “1”, а внешнее устройство формирует на этом выводе “0”, то в этом разряде данных будет записан “0”.
  2. Если операндом команды является содержимое регистра TMRO (и, если допустимо, d=1), то предварительный делитель, если он подключен к TMRO, будет сброшен.
  3. Если в результате выполнения команды изменяется счетчик команд, или выполняется переход по проверке условия, то команда выполняется за два цикла. Второй цикл выплняется как NOP.
Рейтинг
( Пока оценок нет )
Загрузка ...
Adblock
detector