Реклама ⓘ
Главная » Автоматика в быту
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

Музыкальный звонок на пик-контроллере с функцией энергосбережения

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

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

  1. Создание музыкальной композиции
  2. Определение ее частотных и временных характеристик
  3. Сборка схемы и программирование микроконтроллера

Для создания музыкального фрагмента мною была выбрана простая программа «Muzmaker», написанная под DOS. Программа позволяет прописывать небольшие одноголосные мелодии и выглядит следующим образом:

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

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

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

Далее возникает необходимость определить частоты тех нот, которые были задействованы. И тут на помощь приходит любимый мною звуковой редактор «Cool Edit». Поскольку программа «Muzmaker» воспроизводит музыкальную композицию через внутренний (системный) динамик ПК, то для анализа частот можно использовать обычный микрофон, поднеся его к передней панели системного блока компьютера:

При этом «Cool Edit» настраивается на режим записи. После которой, полученную «осциллограмму» можно «растянуть» и посчитать период колебания.

Для написания простой мелодии вполне достаточно трех октав: малой, первой и второй. Таким образом необходимо было выяснить частоты 36 нот (включая бимоли).

Полученные замеры показали, что нотам соответствуют следующие частоты:

Для малой октавы:

нота
 

f Hz

t 1/2 mS
DO 147 3,40
DO# 157,5 3,17
RE 166,5 3,00
RE# 174 2,87
MY 187,5 2,67
FA 196 2,55
FA# 208,5 2,40
SO 222 2,25
SO# 235 2,13
LY 253 1,98
LY# 270 1,85
SY 281,5 1,78

Для первой октавы:

нота
 

f Hz

t 1/2 mS
DO 294 1,70
DO# 315 1,59
RE 333 1,50
RE# 348 1,44
MY 375 1,33
FA 392 1,28
FA# 417 1,20
SO 444 1,13
SO# 470 1,06
LY 506 0,99
LY# 540 0,93
SY 563 0,89

Для второй октавы:

та
 

f Hz

t 1/2 mS
DO 588 0,85
DO# 630 0,79
RE 666 0,75
RE# 696 0,72
MY 750 0,67
FA 784 0,64
FA# 834 0,60
SO 888 0,56
SO# 940 0,53
LY 1012 0,49
LY# 1080 0,46
SY 1126 0,44

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

Далее переходим к программированию:

Для удобства каждую ноту будем формировать в отдельной подпрограмме:

Например:

;НОТА ДО
LDO	
movlw       .4
movwf       Sec3
movlw       .213
movwf       Sec4
movlw       .29
movwf       Sec5

CALL        NOTA
RETURN

Здесь формируются значения переменных (Sec3, Sec4, Sec5) для последующего воспроизведения ноты «До» малой октавы. Далее вызывается подпрограмма NOTA:

NOTA
	    
BEG	    
	    BSF		PORTB,4

	    movf        Sec3,w
        movwf       Sec1
        movf        Sec4,w
        movwf       Sec2

WW:     decfsz      Sec1, F
        GOTO        WW
	    movf        Sec3,w
        movwf       Sec1
        decfsz      Sec2, F
        GOTO        WW

	    BCF		PORTB,4

	    movf        Sec3,w
        movwf       Sec1
        movf        Sec4,w
        movwf       Sec2

WWW:    decfsz      Sec1, F
        GOTO        WWW
	    movf        Sec3,w
        movwf       Sec1
        decfsz      Sec2, F
        GOTO        WWW

	    decfsz      Sec5, F
	    GOTO        BEG
            
	   RETURN

Здесь происходит генерация тона заданной частоты методом циклического «открывания» и «закрывания» порта (B4). Длительность звучания ноты составляет примерно 200 mS. Если длительность ноты необходимо увеличить, то это достигается простым повторением подпрограммы:

 

CALL LDO

CALL LDO

…………..

CALL LDO

и т.д.

 

Тело формирования мелодии выглядит таким образом:

MUS1
	CALL LY
	CALL SO
	CALL LY
	CALL MY
	CALL DO
	CALL MY
	CALL LLY

	CALL PAUSE

	CALL LY
	CALL SO
	CALL LY
	CALL MY
	CALL DO
	CALL MY
	CALL LLY

	CALL PAUSE

	CALL LY
	CALL SY
	CALL HDO
	CALL SY
	CALL HDO
	CALL LY
	CALL SY
	CALL LY
	CALL SY
	CALL SO
	CALL LY
	CALL SO
	CALL MY
	CALL SO
	CALL LY

	RETURN

Паузы между нотами формируется так же в виде подпрограмм:

;ПАУЗА 50 mS
PAUSE50	
	    movlw       .250
        movwf       Sec1
        movlw       .60
        movwf       Sec2

WWWWW:  decfsz      Sec1, F
        GOTO        WWWWW
	    decfsz      Sec2, F
        GOTO        WWWWW
	    
        RETURN


;ПАУЗА 200 mS
PAUSE	
	    movlw       .250
        movwf       Sec1
        movlw       .250
        movwf       Sec2

WWWW:   decfsz      Sec1, F
        GOTO        WWWW
	    decfsz      Sec2, F
        GOTO        WWWW
	    
        RETURN


;ПАУЗА 1 S
PAUSE1
	CALL PAUSE
	CALL PAUSE
	CALL PAUSE
	CALL PAUSE
	CALL PAUSE

	RETURN

Всего в устройстве реализовано 5 мелодии. Их число можно увеличить.

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

Параллельно кнопке звонка я установил реле с нормально разомкнутыми контактами.

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

Но тут возникла проблема: если устройство будет незапитано, то каким образом будет осуществляться выборка новой мелодии для воспроизведения? Напомню: у меня их 5. Ведь при отключении питания все память ОЗУ будет очищаться!

В таком случае целесообразно использовать энергонезависимую память ПИКа.

Т.е. вначале необходимо считать из нее номер мелодии, воспроизвести ее и записать в память номер последующей мелодии, которая воспроизведется при последующем нажатии на кнопку звонка.

Процедура чтения из EEPROM выглядит следующим образом:

;ЧТЕНИЕ ИЗ EEPROM
CHT

	BSF STATUS,RP0	; Установим банк 1		
	BCF STATUS,RP1

	MOVLW B'00000000'
	MOVWF EEADR	; Загружаем адрес 

	BSF EECON1,RD	; Производим чтение
	MOVF EEDATA,W	; Пересылаем в W

	BCF STATUS,RP0  ; Установим банк 0
    BCF STATUS,RP1  ; 

	MOVWF Number	; Пересылаем из W в Number
	
	RETURN

Далее следует блок сравнения полученного значения с номерами мелодий и вызов подпрограммы той мелодии, чей номер соответствует полученному при чтении из EEPROM:

    movf Number,w		
	XORLW .0		;Сравнить c 0
	btfsc STATUS,Z		;Если равен 0 то
	CALL MUS1

	movf Number,w		
	XORLW .1		;Сравнить c 1
	btfsc STATUS,Z		;Если равен 1 то
	CALL MUS2

	movf Number,w		
	XORLW .2		;Сравнить c 2
	btfsc STATUS,Z		;Если равен 2 то
	CALL MUS3

	movf Number,w		
	XORLW .3		;Сравнить c 3
	btfsc STATUS,Z		;Если равен 3 то
	CALL MUS4

	movf Number,w		
	XORLW .4		;Сравнить c 4
	btfsc STATUS,Z		;Если равен 4 то
	CALL MUS5

Далее необходимо увеличить порядковый номер мелодии на единицу и иметь в виду, что если это число достигнет значения «5», то его нужно обнулить (ведь мелодии с номером «5» у нас нет!):

INCF Number,1

	movf Number,w		
	XORLW .5		;Сравнить c 5
	btfsc STATUS,Z		;Если равен 5 то
	CLRF Number

Затем записываем полученное число в EEPROM:

;ЗАПИСЬ В EEPROM
ZAP

	MOVF Number,W

	BSF STATUS,RP0	; Установим банк 1
	BCF STATUS,RP1

	MOVWF EEDATA	; Загружаем данные

	MOVLW B'00000000'
	MOVWF EEADR	; Загружаем адрес 

	
	BSF EECON1,WREN	; Разрешаем запись
		
	MOVLW 55h
	MOVWF EECON2
	MOVLW .170
	MOVWF EECON2

	BSF EECON1,WR	; Записываем
		
	BCF EECON1,WREN ; Запрещаем запись

	BCF STATUS,RP0  ; Установим банк 0
    BCF STATUS,RP1  ; 
	
	RETURN

Итак подведем итог. Алгоритм работы устройства следующий:

  1. Поступление питания на устройство – блокировка контактов реле, включение индикаторного светодиода.
  2. Обращение к EEPROM и получение порядкового номера мелодии, подлежащей воспроизведению
  3. Сравнение полученного из EEPROM значения, сравнение его с номерами мелодий и при совпадении переход к воспроизведению.
  4. Загрузка констант нот и интервалов и генерирование частот с заданными паузами в соответствии с подпрограммой воспроизводимой мелодии
  5. Увеличение порядкового номера мелодии на единицу, если это значение станет равно «5» - обнуление порядкового номера.
  6. Запись порядкового номера в EEPROM.
  7. Выключение индикаторного светодиода, разблокировка контактов реле.

О конструкции устройства

Питание осуществляется от любого маломощного трансформатора на 220В, вторичная обмотка – 10- 12В. Реле – любое слаботочное с обмоткой на 10 – 12 В, контакты которого должны быть рассчитаны на 220В. Динамическая головка мощностью 0,5 Вт.

Преимущество данной схемы еще и в том, что ее практически невозможно "спалить" при неправильном подключении контактов к кнопке и питанию сети. Единственно что может выйти из строя это контакты реле, а электроника останется "живой".

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

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

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
МК PIC 8-бит
PIC16F628A
1 Поиск в магазине ОтронВ блокнот
Линейный регулятор
LM7805
1 Поиск в магазине ОтронВ блокнот
Биполярный транзистор
КТ817Б
2 Поиск в магазине ОтронВ блокнот
Светодиод
АЛ307А
1 Поиск в магазине ОтронВ блокнот
Выпрямительный диод
1N4007
5 Поиск в магазине ОтронВ блокнот
Конденсатор470 мкФ х 16 В2 Поиск в магазине ОтронВ блокнот
Конденсатор22 пФ1 Поиск в магазине ОтронВ блокнот
Конденсатор33 пФ2 Поиск в магазине ОтронВ блокнот
Резистор
2 кОм
3 Поиск в магазине ОтронВ блокнот
Переменный резистор10 кОм1 Поиск в магазине ОтронВ блокнот
ZQ1 Кварц4.0 МГц1 Поиск в магазине ОтронВ блокнот
B1 Головка динамическая0,5 Вт / 8 Ом1 Поиск в магазине ОтронВ блокнот
P1 РелеJQC-3F-L1 Поиск в магазине ОтронВ блокнот
Трансформатормалогабаритный 220В / 12В1 Поиск в магазине ОтронВ блокнот
Добавить все

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

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

Теги:

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

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

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

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

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

0
Александр #
Добрый день всем. Не рекомендую повторение данной конструкции, так как есть высокая вероятность убивания МК высоким напряжением, прошедшим через 7805 из-за неверного включения оной. Дмитрий! Я же Вам уже давал пояснения. Вы всё не понимаете... печально!
Прикрепленный файл: 45165_aa1.jpg
Ответить
0
Mrshilov #
"Бемоль" пишется через "е", частота ноты "ля" со времен Баха равна ровно 440Гц. Не стоило замерять - можно было просто прочитать. Заодно узнать как правильно пишутся названия нот.
Керамика по питанию 22пФ, а на кварце - 33пФ - и так во всех конструкциях автора.
На входе электролит 470мкФ, на выходе такой же. Невдомек, что это нарушает работу стабилизатора.
Ни одного из своих "творений" автор не собирал. Схемотехника просто неработоспособна, не удивлюсь, если программная часть тоже.
Ответить
0

[Автор]
dima1983 #
Если вы нашли в тексте опечатку либо ошибку - воспользуйтесь специальным сервисом сайта. Не обязательно об этом орать во все услышанья. По поводу частот - у вас был источник, где это можно было прочитать, у меня - нет. Номинал 470 мкФ следует читать как 47,0 мкФ (опечатка). Рекомендуемое значение емкостей на кварце 4.0 МГц - до 30 пФ. Я поставил 33 пФ, так как на 30 не нашел. Это не критично. Далее, устройство было собрано и проверено в работе. Если вашей квалификации достаточно, что бы собрать данную схему - не поленитесь и соберите. И не забудьте отписаться по факту.
Ответить
0
Shida #
Не обращай внимание. Народ нынче злой, завистливый. Если на 7805 даже с двух сторон поставишь конденсаторы по 470 мкф, трагедии от этого не будет. Разряжаться только дольше будут. Про мелкие конденсаторы 22...33 вообще не критично. Срыва генерации не будет. И не важно, как там пишется бемоль, частота ноты от этого не меняется. Занимайтесь своим любимым делом, больше литературы читайте, экспериментируйте. Всё в ваших руках. А на упрёки завистливых не обращайте внимания. Удачи!
Ответить
0
гость #
Ни одного из своих "творений" автор не собирал.
Ну почему же! Несколько было,но вот чтобы проверить их работоспособность нет нужды собирать само устройство в реальности,так как существует PROTEUS, пусть он и не идеален, но проверить работоспособность данных "девайсов"можно, правда один проект у меня не заработал,пришлось править файл аsм. Далее к Диме:
По поводу частот - у вас был источник, где это можно было прочитать, у меня - нет.
Уважаемый, а интернет у Вас отсутствует что ли? А как же вы статьи тогда на сайт выкладываете? Поисковик в браузере всё найдёт. Жалко,что таких "сырых" статей очень много в интернете.
Ответить
0
Mrshilov #
"во все услышанья" это что?
"что бы собрать" это как?
Ответить
0

[Автор]
dima1983 #
Ушами и руками
Ответить
0

[Автор]
dima1983 #
Ну так еще лучше собирайте в протеусе устройство собиралось лет 5 назад
Ответить
0

[Автор]
dima1983 #
Вы про мои проекты говорили?
Ответить
0
gamebox #
Автор проделал бессмысленную работу, т.к. частоты нот для всех октав легко гуглятся.
Ответить
0
Собрал вчера(8-03-18) на 628а, работает. Вот какие там мелодии

1- Весна на заречной улице
2- Мы с конём по полю идём...
3- Милая моя Сулико
4- Что-то из Ну-погоди
5- Какая-то абра-катабра(возможно автор что-то напутал)

Что характерно, скорость исполнения напрямую зависит от кварца, поэтому вместо 4.00 впаял на 8.86МГц, так намного резвее и чётче - всё таки звонок, а не консерватория...

Из недостатков - повторное нажатие кнопки сразу после окончания мелодии и выключения не всегда даёт воспроизведение, а где-то через минуту.

Судя по объёму прошивки - там можно поместить ещё столько же мелодий, если не больше...
Отредактирован 08.03.2018 23:48
Ответить
0
Привет, ровно через месяц "радио" умолкло...
Ломаться там практически нечему, но... помогла перепрошивка пика.
Потом прочитал - надо было проверить, всё слетело или отдельные места... Придётся в следующий раз...
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется электрическое сопротивление?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Радиореле 220В
Радиореле 220В
Raspberry Pi 2 Конструктор - темброблок на LM1036
вверх