Главная » Микроконтроллеры
Призовой фонд
на сентябрь 2017 г.
1. 1000 руб
PCBWay
2. Осциллограф DSO138
Паяльник
3. Тестер компонентов MG328
Паяльник
4. 100 руб.
От пользователей

Похожие статьи:


Брелок-нетеряйка на PIC-контроллере

Брелок-нетеряйка весьма удобная вещь. Стоит только громко свиснуть или хлопнуть в ладоши и потерянная связка с ключами «отзовется». Однажды мне попалась на глаза схема подобного устройства, собранного на транзисторах и дискретной логике. Аналоговая часть состояла из НЧ усилителя, собранного на 2х супер-бэта транзисторах раной структуры – КТ3102 и КТ3107, цифровая – из микросхем инверторов и логики «и-не» серии К564.

Я решил переделать данное устройство с целью уменьшения его габаритов, а так же облегчения его наладки. Аналоговую часть я оставил как есть без изменений, а в качестве цифровой – применил микроконтроллер младшего семейства линейки Microchip - PIC12F629.

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

Запустил звуковой редактор  «Cool edit» в двух окнах. В первом окне я программно сгенерировал несколько частот от 1000 Гц до 10000 Гц, во втором окне настроил запись с микрофонного входа. Включив запись и одновременно запустив во втором окне тестовые частоты на проигрывание через динамики компьютера, я наблюдал отклик пьезоэлемента. И вот, что я получил в итоге:

 Как видно из скриншотов: максимум отклика достигается на частоте близкой к 5000 Гц.

Т.е. эта частота является резонансной частотой для данного пъезоизлучателя. Можно предположить, что максимум излучения звуковой частоты этим излучателем будет так же лежать в диапазоне 5000 Гц.

Модифицированная схема брелка-нетеряйки выглядит следующим образом:

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

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

Устройство питается от двух таблеточных батареек общим напряжением 3 В.

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

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

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

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

 

   MOVLW   B'10001000'

   MOVWF   INTCON   

 

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

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

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

START_


	BSF		GPIO,0			; УСТ. В "1"
	BCF		GPIO,2			; УСТ. В "0"

	BSF 	STATUS, RP0	 	; банк 1
	bsf		IOCB,1			; вкл. прервывание от GP1
	BCF 	STATUS, RP0	 	; банк 0

;******************ОЖИДАНИЕ******************

	SLEEP
	NOP


;********************ОТВЕТ*******************
    
	BSF 	STATUS, RP0	 	; банк 1
	bcf		IOCB,1			; выкл. прервывание от GP1
	BCF 	STATUS, RP0	 	; банк 0

	
	BCF		GPIO,0			; УСТ. В "0"

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

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

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

; ВХОД В ПРЕРЫВАНИЕ ОТ ПОРТОВ 


	MOVF	GPIO,0
	BCF		INTCON,0		; сбросим флаг прерывания от портов

	RETFIE	

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

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

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

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

;**********СИГНАЛ 5000 Гц (100 mS)***********


	MOVLW	.9
	MOVWF	TEMP1

	MOVLW	.10
	MOVWF	TEMP2


	MOVLW	.30
	MOVWF	TEMP

	DECFSZ	TEMP
	GOTO	$-1

	BTFSS	GPIO,2    		; ЕСЛИ ПОРТ В "0"
	GOTO	$+2

	GOTO	$+3	

	BSF		GPIO,2			; УСТ. В "1"

	GOTO	$+2

	BCF		GPIO,2			; УСТ. В "0"	


	DECFSZ	TEMP2
	GOTO	$-.11
	DECFSZ	TEMP1
	GOTO	$-.13

;******************************************

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

;*************ПАУЗА (100 mS)***************

	MOVLW	.200
	MOVWF	TEMP1

	MOVLW	.170
	MOVWF	TEMP2

	DECFSZ	TEMP2
	GOTO	$-1

	DECFSZ	TEMP1
	GOTO	$-5

;******************************************

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

;**********ЦИКЛ ПОВТОРА - 10 РАЗ***********

	MOVLW	.10
	MOVWF	TEMP3

;**********СИГНАЛ 5000 Гц (100 mS)***********


	MOVLW	.9
	MOVWF	TEMP1

	MOVLW	.10
	MOVWF	TEMP2


	MOVLW	.30
	MOVWF	TEMP

	DECFSZ	TEMP
	GOTO	$-1

	BTFSS	GPIO,2    		; ЕСЛИ ПОРТ В "0"
	GOTO	$+2

	GOTO	$+3	

	BSF		GPIO,2			; УСТ. В "1"

	GOTO	$+2

	BCF		GPIO,2			; УСТ. В "0"	


	DECFSZ	TEMP2
	GOTO	$-.11
	DECFSZ	TEMP1
	GOTO	$-.13

;******************************************
;*************ПАУЗА (100 mS)***************

	MOVLW	.200
	MOVWF	TEMP1

	MOVLW	.170
	MOVWF	TEMP2

	DECFSZ	TEMP2
	GOTO	$-1

	DECFSZ	TEMP1
	GOTO	$-5

;******************************************

	DECFSZ	TEMP3
	GOTO	$-.27

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

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

Текст программы в MPLAB и прошивка в HEX файле

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

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
МК PIC 8-бит
PIC12F629
1 Поиск в LCSCВ блокнот
Биполярный транзистор
КТ3102Б
1 Поиск в LCSCВ блокнот
Биполярный транзистор
КТ3107Л
1 Поиск в LCSCВ блокнот
Диод
КД512А
1 Поиск в LCSCВ блокнот
Пьезоизлучатель1 Поиск в LCSCВ блокнот
Резистор
3.3 МОм
1 Поиск в LCSCВ блокнот
Резистор
100 кОм
1 Поиск в LCSCВ блокнот
Резистор
2 МОм
1 Поиск в LCSCВ блокнот
Резистор
47 кОм
1 Поиск в LCSCВ блокнот
Резистор
20 кОм
1 Поиск в LCSCВ блокнот
Конденсатор1000 пФ1 Поиск в LCSCВ блокнот
Конденсатор510 пФ1 Поиск в LCSCВ блокнот
Конденсатор22 пФ1 Поиск в LCSCВ блокнот
Элемент питанияSR412 Поиск в LCSCВ блокнот
Добавить все

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

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

Теги:

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

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

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

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

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

0
multimetr #
Интересная идея, у меня давным-давно был брелок к ключам подобный, стоил копейки, уж и не помню правда как он назывался,ну да ладно,я хотел сказать,что команды наподобие: GOTO $-.27, и подобные лучше не писать,а использовать метки типа: GOTO ZANOVO. Я использовал раньше такие команды,пока в один раз не столкнулся с проблемой остановки программы в прошитом PIC16F877. Причина оказалась именно в этом, так как при записи почему то в программной памяти МК оказались пустые ячейки, а счёт $- .8 у меня зацикливался на одном месте,как раз с одной пустой ячейкой.
Ответить
0

[Автор]
dima1983 #
Никогда с такими проблемами не сталкивался. А если у вас таких переходов 30-40? Это сколько меток лепить придется?! Другое дело, что если если случайно забыть о таком "вычисляемом" переходе и какую нибудь команду вставить между, то, конечно, может уйти туда куда не нужно. Поэтому надо симулировать и отлаживать. А метки целесообразно использовать для "длинных" переходов, например из конца программы в ее начало.
Ответить
0
multimetr #
Да, у меня программа большая была,и иметь всего пяток переходов $ не получится так как почти в каждой подпрограмме нужно было обращаться к другим ПП,таким как, опрос состояния кнопок,преобразование 16 б. в 4-х разрядные,ПП деления, а вся программа занимала почти все 4 страницы МК 877. Далее, моё мнение такое; уж лучше "слепить" лишнюю метку,чем вычислять сколько шагов двинуться вперёд,или назад. Но моё предыдущее сообщение,вы видно не прочитали,или не поняли в чём смысл сказанного мною был.
Ответить
0
Александр #
Всем - здравствуйте
Дмитрий, 22 Пф по питанию - это что-то из рубрики "что было - то и впаял"! не лепите отсебятину - ставьте керамику 0.1-1 мкф и электролит 1-10 мкф.
Читайте: http://radiokot.ru/forum/viewtopic.php?p=2245929 ОСОБО вчитаться в сообщение mickbell от Добавлено: Ср янв 07, 2015 4:49 pm
И пробежите глазами по http://allrefs.net/c34/147it/p19/

И, как всегда, у вас вывод Сброса висит в воздухе, что нарушает требование производителя И здравый смысл!
так как Дима мне не верит, буду давать скриншоты. Мой лозунг: давайте научим писателя читать!
цитируемый файл: PIC12F629_675.pdf
Прикрепленный файл: aa1.jpg
Ответить
0
Владимир_Чита #
Хорошо, можете ли вы выложить видео работы вашего изобретения?
Ответить
-1

[Автор]
dima1983 #
Устройство не на столько сложное, чтобы собрать его и проверить в работе.
Ответить
0

[Автор]
dima1983 #
https://www.youtube.com/watch?v=7sHk_u12bHU
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Программатор Pickit3
Программатор Pickit3
DC-DC регулируемый преобразователь 1.5-37В 2А с индикатором UNI-T UT-61A
вверх