Разработка музыкального звонка с двумя режимами работы: автономным и от сети
2.6.2 Процедура вычисления адреса
Большое количество таблиц в нашей программе заставляет
позаботиться о процедуре вычисления адреса.
Однотипные вычисления удобно оформить в виде подпрограммы. Эта
подпрограмма занимает строки 78—84. Вызов подпрограммы производится по имени addw. Подпрограмма получает
номер элемента таблицы и адрес ее начала. Номер элемента передается в
подпрограмму при помощи регистра YL, а адрес — через регистровую пару Z.
Используя эти данные, подпрограмма вычисляет адрес нужного
элемента. Для этого она сначала удваивает номер элемента (строка 79).
Затем дополняет полученное значение до шестнадцатиразрядного путем записи в YH нулевого байта (строка 80).
И, наконец, производит сложение двух шестнадцатиразрядных величин, находящихся
к этому моменту в регистровых парах Y и Z (строки 81, 82). Результат
вычислений при этом попадает, в регистровую пару Z.
2.6.3 Текст программы
Теперь рассмотрим текст программы с самого начала. В строках 3...10
расположен модуль описания переменных (рабочих регистров). В строках 13...31
располагается модуль переопределения векторов прерываний, в строках 32...41
— модуль команд инициализации.
2.6.4 Особенности программы
Процедура, расположенная в строках 45—52 программы,
сканирует клавиатуру и находит код первой из нажатых кнопок. Найденый код находится
в регистре count. Затем управление переходит к строке 53. С этого места начинается
процедура выбора мелодии (строки 53—58). Суть процедуры — прочитать из
таблицы tabm значение адреса начала этой мелодии. То есть прочитать элемент
таблицы, номер которого равен коду нажатой кнопки.
Прежде чем прочитать элемент, необходимо найти его адрес. Для
вычисления адреса используем подпрограмму addw. Перед тем, как вызвать подпрограмму, подготовим все данные. Номер
нажатой кнопки помещаем в регистр YL (строка 53). Адрес
начала таблицы записываем в регистровую пару Z (строки 54, 55). И лишь затем
в строке 56 вызывается подпрограмма addw.
После выхода из подпрограммы в регистровой nape Z находится результат
вычислений — адрес нужного нам элемента таблицы tabm. Следующие две команды (строки 57 и 58) извлекают тот
элемент (адрес начала мелодии) и помещают его в регистровую пару X. Там
этот адрес будет храниться все время, пока воспроизводится именно эта мелодия.
Следующий этап —
воспроизведение мелодии. Воспроизведением мелодии занимается процедура,
расположенная в строках 59—77. Для последовательного воспроизведения нот
нам понадобится указатель текущей ноты. В качестве указателя текущей ноты
используется регистровая пара Z. В самом начале процедуры воспроизведения мелодии в регистровую
пару Z помещается адрес начала мелодии их регистровой пары X (строки
59, 60).
Затем начинается цикл воспроизведения (строки 61—77). В этом
цикле программа извлекает код ноты по адресу, на который указывает наш указатель,
выделяет из кода ноты код тона и код длительности, воспроизводит ноту, а затем
увеличивает значение указателя на единицу. Затем весь цикл повторяется.
Этот процесс происходит до тех пор, пока код очередной ноты не окажется
равным 255 (метка конца мелодии). Прочитав этот код, программа передает
управление на строку 62, где в регистр Z снова записывается адрес начала
мелодии. Воспроизведение мелодии начнется сначала. Этот процесс должен
прерваться лишь в одном случае — при отпускании управляющей кнопки S8.
Для проверки состояния кнопок в цикл воспроизведения мелодии
включена специальная процедура (строки 61—63). Процедура упрощенно
проверяет состояние сразу всех кнопок. Она считывает содержимое порта PD (строка 61) и
сравнивает его с кодом 0 x 7F (строка 62). Прочитанное
из порта значение может быть равно 0x7F только в одном случае —
если все кнопки отпущенны. Если хотя бы одна кнопка нажата, то при чтении порта
мы получим другое значение.
Проверкой вышеописанного условия занимается оператор breq в строке 63. Если все
кнопки оказались отпущены, этот оператор завершает цикл воспроизведения мелодии
и передает управление на метку ml, то есть на самое начало основного цикла программы. Там
происходит выключение звука, а затем новое сканирование клавиатуры.
Если хотя бы одна кнопка окажется нажатой, то цикл воспроизведения
звука продолжается дальше, и управление переходит к строке 64, где происходит
извлечение кода ноты. Так как адрес этой ноты находится в регистровой паре Z (указатель текущей ноты),
то для извлечения ноты просто используется команда 1pm.
В строке 65 происходит проверка признака конца мелодии. Только что
прочитанный код ноты сравнивается с кодом 0xFF. Оператор breq в строке 66 передает
управление по метке т4, если мелодия действительно закончилась (условие
выполняется). Если код ноты не равен 0xFF, перехода не происходит, и
управление переходит к строке 67.
В строках 67—75 происходит обработка кода ноты. То есть из
кода ноты выделяется код тона и код длительности. Сначала на код ноты накладывается
маска, которая оставляет пять младших разрядов, а три старших сбрасывает (строка
67). Под действием маски в регистре temp остается код тона, который затем помещается в регистр fnotа (строка 68).
Теперь нам нужно найти код длительности ноты. Для этого нам
заново придется извлечь код ноты из памяти программ. Так как до этого момента
мы не изменяли положение указателя текущей ноты, то для извлечения нет никаких
препятствий. В строке 69 мы повторно извлекаем код ноты из памяти программ.
Но на этот раз значение указателя увеличивается. Теперь можно приступать к
выделению кода длительности. Длительность кодируется тремя младшими битами кода
ноты. Для выделения этих битов нам также нужно использовать маску. Но
одной маской нам не обойтись. Нам нужно не просто выделить три старших разряда,
а сделать их младшими, как это показано на Рисунке 2.6.
Процедура выделения кода длительности занимает строки 70—74.
Рисунок 2.6
- Разложение кода ноты
Сначала программа производит многократный циклический сдвиг кода
ноты до тех пор, пока три старших разряда не станут тремя младшими. Для сдвига
используется команда rо 1. Так как сдвиг происходит
через ячейку признака переноса, то нам понадобится четыре команды сдвига. Эти
команды занимают в программе строки 70—73.
Затем в строке 74 на полученное в результате сдвигов число
накладывается маска, которая выделяет три младшие бита, а пять старших сбрасывает
в ноль. Полученный таким образом код длительности записывается в регистр dnota (строка 75).
Когда код тона и код длительности определены, производится
вызов подпрограммы воспроизведения ноты (строка 76). Оператор rjmp в строке 77 передает
управление на начало цикла воспроизведения мелодии, и цикл повторяется для
следующей ноты.
Подпрограмма воспроизведения ноты занимает строки 85—110. Она
выполняет следующие действия:
- извлекает из таблицы tabkd коэффициент деления, соответствующий коду ноты;
- программирует таймер и включает звук;
- затем выдерживает паузу и звук выключает.
Если код тона равен нулю (нужно воспроизвести паузу без звука),
извлечение коэффициента деления и включение звука не выполняется. Подпрограмма
сразу переходит к формированию паузы.
Начинается подпрограмма воспроизведения ноты с сохранения всех
используемых регистров (строки 85—88). Затем производится проверка кода
ноты на равенство нулю (строка 89). Если код ноты равен нулю, то
оператор breq в строке 90 передает управление по метке ntl, то есть к строке, где происходит
вызов процедуры формирования задержки.
Если код ноты не равен нулю, то программа приступает к извлечению
коэффициента деления. Для вычисления адреса элемента таблицы tabkd, где находится этот
коэффициент, снова используется подпрограмма addw.
Код тона помещается в регистр YL (строка 91), а адрес начала
таблицы — в регистровую пару Z (строки 92, 93). Вызов подпрограммы addw производится в строке 94. В регистровой паре Z подпрограмма возвращает
адрес элемента таблицы, где находится нужный нам коэффициент деления. В строках
95, 96 из таблицы извлекается этот коэффициент. А в строках 97,98 он
помещается в регистр совпадения таймера. В строках 99,100 включается
звук.
В строке 104 вызывается специальная подпрограмма,
предназначенная для формирования задержки. Подпрограмма называется wait и формирует задержку с
переменной длительностью. Длительность задержки зависит от значения регистра dnota. По окончании задержки звук
выключается (строки 102,103).
На этом можно было бы закончить процесс воспроизведения ноты.
Однако это еще не все. Для правильного звучания мелодии между двумя соседними
нотами необходимо обеспечить хотя бы небольшую паузу. Если такой паузы
не будет, ноты будут звучать слитно. Это исказит мелодию, особенно если подряд
идет несколько нот с одинаковым тоном. Формирование паузы между нотами
происходит в строках 104,105.
Вспомогательная пауза формируется при помощи уже знакомой нам
подпрограммы задержки. В строке 104 коду паузы присваивается нулевое
значение (выбирается самая минимальная пауза). Затем в строке 105 вызывается
подпрограмма wait. После окончания паузы остается только восстановить содержимое
всех сохраненных регистров из стека (строки 106—109) и выйти из подпрограммы
(строка 110).
2.6.5 Подпрограмма формирования задержки
И последнее, что нам еще осталось рассмотреть, — это подпрограмма
формирования задержки. Текст подпрограммы занимает строки 111—135. Как и
любая другая подпрограмма, подпрограмма wait в начале сохраняет (строки
111—114), а в конце — восстанавливает (строки 131—134) все используемые
регистры.
Рассмотрим, как работает эта подпрограмма. Сначала определяется
длительность задержки. Для этого извлекается соответствующий элемент из таблицы
tabz. Номер элемента соответствует коду задержки, находящемуся в регистре
dnota. Извлечение значения из таблицы производится уже знакомым нам
образом. Команды, реализующие вычисление адреса нужного элемента таблицы,
находятся в строках 115—118. Затем в строках 119 и 120 производится
чтение элемента таблицы. Прочитанный код задержки помещается в регистровую пару
Y.
Теперь наша задача: сформировать задержку, пропорциональную
содержимому регистровой пары Y. Так как микроконтроллер ATtiny2313 имеет только один шестнадцатиразрядный таймер, который уже
занят формированием звука, будем формировать задержку программным путем. Но в
данном случае цикл формирования задержки построен немного по-другому.
Вообще-то, способов построения подобных подпрограмм может быть
бесконечное множество. Все зависит от изобретательности. Использованный в
данном примере способ более удобен для формирования задержки переменной
длительности, пропорциональной заданному коэффициенту. Главной особенностью нового
способа является шестнадцатиразрядный параметр цикла.
Для хранения этого параметра используется регистровая пара Z. Перед началом цикла
задержки в нее записывается ноль. Затем начинается цикл, на каждом проходе
которого содержимое регистровой пары Z увеличивается на единицу.
После каждого такого увеличения производится сравнение нового значения Z с содержимым регистровой
пары Y.
Заканчивается цикл тогда, когда содержимое Z и содержимое Y окажутся равны. В
результате число, записанное в регистровой паре Y, будет определять
количество проходов цикла. Поэтому и время задержки, формируемое этим циклом,
будет пропорционально константе задержки. Однако это время будет слишком мало
для получения приемлемого темпа воспроизведения мелодий. Для того, чтобы
увеличить время до нужной нам величины, внутрь главного цикла задержки помещен
еще один цикл, имеющий фиксированное количество проходов.
Описанная выше процедура задержки занимает строки 121—135.
В строках 121, 122 производится запись нулевого значения в регистровую пару Z. Большой цикл задержки
занимает строки 123—130. Малый внутренний цикл занимает строки 124—125.
Для хранения параметра малого цикла используется регистр loop. В строке 123 в него записывается начальное значение. Строки 124,125
выполняются до тех пор, пока содержимое loop не окажется равным нулю.
В строке 126 содержимое регистровой пары Z увеличивается на единицу. В строках 127—130 производится сравнение
содержимого двух регистровых пар Y и Z. Сравнение производится побайтно. Сначала сравниваются младшие
байты (строка 127). Если они не равны, оператор условного перехода в строке 128
передает управление на начало цикла.
Если младшие байты равны, сравниваются старшие байты (строка 129).
Если старшие байты неодинаковы, оператор brne в строке 130 опять заставляет цикл начинаться с начала. И только
когда оба оператора сравнения дадут положительный результат (не вызовут
перехода), цикл заканчивается, и подпрограмма формирования задержки переходит к
завершающей фазе (к строкам 131—135).
2.6.6 Программа на языке СИ
Возможный вариант программы на языке СИ приведен в листинге 2.
В данном случае использована модификация языка поддерживаемая программной
средой CodeVision. Описание программы рассчитано на программистов, знакомых с
языком СИ.
Теперь рассмотрим подробнее программу с самого начала (Листинг 2,
Приложение Б).
2.6.7 Описание программы (листинг 2)
Для формирования задержки мы будем использовать функцию из библиотеки
delay.h. Поэтому в строках 1,2 программы, кроме
файла описаний, мы присоединяем и эту библиотеку. Затем наминаются описания
всех массивов. В строке 3 описывается массив, содержащий величины всех
музыкальных длительностей.
Так как для формирования длительности мы будем использовать функцию
delay_ms, величина длительностей задана в миллисекундах. Как видно из текста
программы, в данном случае мы используем массив типа unsigned int. Переменные этого типа имеют длину два байта, все 16 битов которых
используются для хранения информации.
Именно такой тип наиболее подходит для хранения наших
коэффициентов. Управляющее слово fleash перед описанием массива гарантирует, что эти данные будут
размещены в программной памяти микроконтроллера.
В строках 4, 5, 6 описывается массив
коэффициентов деления для всех нот. В этом месте программы мы впервые
используем перенос строки. Перенос строки применяется в том случае, когда текст
команды не помещается в одной строке. Язык СИ разрешает свободно переносить
текст на следующую строку. При этом не требуется никаких специальных директив и
указателей.
Перенос допускается в том месте команды, где между двумя соседними
элементами выражения можно поставить пробел. Тип массива, как и в предыдущем
случае,— usingnerd int. Содержимое массива tabkd полностью соответствует содержимому таблицы с тем же названием из
ассемблерного варианта программы.
В строках 7—38 описываются семь
массивов для хранения семи мелодий. Массивы имеют тип unsigned char. Переменные этого типа
занимают в памяти один байт, и все восемь битов этого байта используются для
хранения информации. Содержимое каждого из этих массивов полностью соответствует
содержимому соответствующих таблиц в ассемблерной версии программы.
В строке 39 описывается массив,
содержащий адрес начала каждой из семи мелодий. Это не просто массив, а массив
ссылок, на что указывает символ звездочки в тексте его описания. Так же, как и
ссылочная переменная, каждый элемент массива ссылок предназначен для хранения
ссылки. Данный массив тоже хранится в памяти программ, на что указывает
управляющее слово flesh в его описании. Элементы этого массива хранят указатели на начало
каждого из массивов мелодий, что указано при его инициализации (в фигурных
скобках).
Строки 40—72 занимает функция main. Начинается функция с описания
переменных (строки 41—45). Две рабочих переменных count и temp, а также переменная для
хранения кода тона (tnota) и переменная для хранения кода длительности (dnota) нам уже знакомы. Мы
использовали их в предыдущей программе.
Интерес представляет описание переменной notа. Это ссылочная переменная,
которая предназначена для хранения указателей на объекты в программной памяти,
имеющие тип unsigned char. Она будет использоваться нами для обращения к элементам
массивов, хранящим коды нот. Эти массивы, как уже говорилось, расположены в
программной памяти. Поэтому в описании переменной имеется слово flash, а перед именем переменной
в ее описании стоит символ звездочки. То есть это ссылка на массивы типа unsigned char, расположенные во flesh.
В строках 46—52 расположен блок инициализации. Эта часть программы
полностью повторяет аналогичную часть программы из предыдущего примера (см. листинг
2).
Строки 53—72 занимает основной цикл
программы. Цикл состоит всего из двух процедур. В начале цикла (строки 54—59)
расположена процедура сканирования кнопок. Эта процедура один к одному
скопирована из предыдущего примера (см. листинг 2 строки 14—21).
При обнаружении нажатой кнопки управление передается по метке m3 (в новой программе это строка 60). Как вы помните, номер нажатой
кнопки при выходе из процедуры сканирования содержится в переменной count.
Строки 60—72 занимает процедура
проигрывания мелодии.
Проигрывание начинается с того, что в переменную nota помещается указатель на
массив, содержащий нужную нам мелодию (строка 60). А указатель — это элемент
массива tabm, с номером, равным коду нажатой кнопки. В строках 61—72 находится
цикл, который последовательно считывает мелодию нота за нотой и проигрывает
прочитанные ноты. Цикл организован при помощи оператора безусловного перехода (строка
72).
Для перемещения вдоль массива содержимое переменной nota каждый раз увеличивается на
единицу (строка 71). В этом же цикле производится проверка состояния кнопки
(нажата ли еще хоть одна кнопка) и проверка признака конца мелодии. Рассмотрим
подробнее, как все это делается.
Проверка состояния кнопок происходит в строке 61. Если содержимое
регистра PIND равно 0х7F, то воспроизведение мелодии
прекращается. Управление передается по метке m2. Там происходит выключение звука, а затем переход по метке m1, то есть к началу основного цикла программы.
Если хоть одна кнопка еще нажата, перехода не происходит и
воспроизведение мелодии продолжается. В строке 62 производится проверка на
конец мелодии. Содержимое элемента массива, на который указывает ссылочная
переменная nota (код ноты), проверяется на равенство числу 0xFF. Если код ноты равен 0xFF, то управление передается
по метке m3, где указатель снова устанавливается на начало мелодии.
В строке 63 вычисляется значение кода тона. Для этого на код ноты,
на который указывает переменная notа, накладывается маска.
Наложение маски производится при помощи оператора «&». Полученный код тона
записывается в переменную fnota.
В строке 64 производится вычисление кода длительности. Для этого
применяется составное математическое выражение. Операция (*nota) >>5 сдвигает биты кода ноты
на пять шагов вправо. При этом три старших разряда кода становятся тремя
младшими. Мы применяем сдвиг вправо потому, что циклический сдвиг влево,
использованный нами в Ассемблере, язык СИ не поддерживает. Язык СИ может
выполнять только логический сдвиг, но не циклический. На полученное в
результате сдвига число налагается маска 0x07. Полученный таким
образом код длительности записывается в переменную dnota.
В строке 65 происходит проверка кода тона на равенство нулю.
Если код окажется равным нулю, то управление передается по метке m5, то есть к строке, где
формируется пауза, обходя строки, где формируется звук.
Звук формируется в строках 66,
67. Сначала в регистр совпадения OCR1A помещается коэффициент деления из массива tabkd. Причем указатель массива равен коду тона. Затем в регистр
управления TCCR1A записывается код, который подключает таймер к выводу ОСІА и, тем самым, включает звук.
В строке 68 происходит вызов функции задержки. В качестве
параметра в эту функцию передается коэффициент, извлекаемый из массива tabz. Указатель массива при этом равен коду длительности. После выхода
из функции задержки звук выключается.
Для этого в регистр TCCR1А записывается нулевое
значение (строка 69). В строке 70 формируется пауза между нотами. В качестве
параметра для функции delay_ms в этом случае используется нулевой
элемент массива tabz, то есть вырабатывается пауза
минимальной длительности.
В строке 71, как уже говорилось, происходит приращение содержимого
указателя nota. Оператор безусловного перехода в строке 72 замыкает цикл
воспроизведения мелодии.
2.7
Выбор, описание и расчеты элементной базы
В
электромузыкальном звонке с двумя режимами работы постараемся использовать
широко, надежные и дешевые элементы.
Устройство
проигрывания мелодий содержит микроконтроллер ATtiny
2313, кварцевый резонатор на 4 МГц, широкоиспользуемый кнопочный переключатель П2К
на семь кнопок, дверная звонковая кнопка, любой маломощный транзистор обратной
проводимости, любой громкоговоритель 0,1-0,5 Вт с сопротивление катушки 8 Ом.
Источником
питания служит бестрансформаторный источник питания (для уменьшения размеров),
при работе от сети переменного напряжения 220В и четыре пальчиковых элемента
питания, при работе устройства в автономном режиме (Приложение В).
В точки А и В подключается сеть переменного напряжения 220 В.
Однополупериодный выпрямитель с ограничением по току питает схему мощного
стабилитрона VD2 и стабилизатора напряжения D2. Цепь понижения напряжения сети до
уровня 9В (R2,C3) рассчитана на ток потребления 40 мА. Ток стабилизации
стабилитрона составляет 20 мА – столько же потребляет стабилизатор напряжения D2, питающий микроконтроллер и
электронный ключ во время работы устройства.
В момент включения основной ток потребляет конденсатор С5, но этот
ток ограничен реактивным сопротивлением С5, также выполняет функцию источника
тока в момент отключения питания сети. При включении сети зажигается светодиод LED 1, питание которого
осуществляется через гасящий резистор R5. Конденсатор C4 сглаживает высокочастотные импульсные
помехи, проходящие из сети в схему питания. Резисторы R3 и R4 составляют делитель напряжения на стабилитроне
VD2 (необходим для измерительного канала
микроконтроллера). Измерительный канал не содержит схему выборки и хранения, а
также интегратора и фильтра верхних частот, поскольку эти функции выполняют
фильтрующие элементы питания С4, С5. Функцию интегратора выполняет
ограничительный стабилитрон VD2. При переходе устройства в автономный режим, питание
осуществляется от пальчиковых элементов постоянного тока G1-G2. Потребление от элементов питания
составляет порядка 15 мА. Стабилизатор напряжения 78LO5Z стабилизирует напряжение до 5 В.
Бестрансформаторная схема питания была предложена в связи с ограничением
места в корпусе устройства. Единственное условие, которое следует выполнять –
клемму «В» следует подключить к «нулевому» проводу сети, а «фазу» к клемме «А».
Резисторы R2, R6 выбираем мощностью 1 Вт, чтобы предохранить устройство от
перегрева.
При выключении сетевого
напряжения, светодиод VED1 гаснет, т.к. попадание напряжения питания элементов питания G1-G2 ограничивает диод VD3. При включении сети происходит
подзаряд элементов питания. Поэтому рекомендуется использовать пальчиковые
аккумуляторы.
Конденсатор С3 на напряжение не ниже 400 В. Светодиод можно использовать
любой. Электролитические конденсаторы на напряжение: С5 – не ниже 30В, С6 – не
ниже 10В. Стабилитрон любой на напряжение стабилизации 9 В.
Нам удалось за счет использования нового способа формирования задержки,
использовать специализированную программу (Раздел 2.6.7) при этом не увеличивая
число элементов схемы, чем смогли уменьшить ток потребления схемы.
2.8 Разработка схемы принципиальной
Принципиальная
схема электромузыкального звонка выполнена в САПР Accel
Eda (Рисунок 2.7).
Проект
основывается на микроконтроллере ATtiny
2313. Устpойство состоит из 8 кнопок, частотозадающих элементов. Отсчет времени
звучания ведется с помощью таймера TMR0. Во время работы постоянно сканируется
состояние порта В, и если оно изменилось (какая-либо кнопка нажата или отпущена),
то в соответствии с новой комбинации клавиш меняется и частота звучания. При нажатии
кнопки S8, устройство переходит
в режим воспроизведения и проигрывает записанную мелодию. В качестве динамика
можно использовать 0.25ГД-19 8 Ом.
Микроконтроллер
имеет встроенный детектор включения питания. Таймер запуска начинает счет
выдержки времени после того, как напряжение питания пересекло уровень около
1,2...1,8 Вольт. По истечении выдержки около 72мс считается, что напряжение
достигло номинала и запускается другой таймер-выдержка на стабилизацию
кварцевого генератора. Программируемый бит конфигурации позволяет разрешать или
запрещать выдержку от встроенного таймера запуска. Выдержка запуска меняется от
экземпляров кристалла, от питания и температуры.
Рисунок
2.7 - Принципиальная схема электромузыкального звонка в Accel
EDA
Таймер
на стабилизацию генератора отсчитывает 1024 импульса от начавшего работу
генератора. Считается, что кварцевый генератор за это время вышел на режим. При
использовании RC генераторов выдержка на стабилизацию не производится.
Затем
включается таймер ожидания внешнего сброса /MCLR. Это необходимо для тех
случаев, когда требуется синхронно запустить в работу несколько PIC
контроллеров через общий для всех сигнал /MCLR.
Если такого сигнала не поступает, то через время Tost вырабатывется внутренний
сигнал сброса и контроллер начинает ход по программе.
Принципиальная электрическая схема устройства, удовлетворяющая
сформулированным выше требованиям приведена в Приложении В. Кнопки S1...S7 предназначены для выбора мелодий.
Кнопка S8 производит запуск электромузыкального звонка. Для
воспроизведения мелодии используется звуковой излучатель VF1, сигнал на который
поступает с выхода РВ.3 микроконтроллера. В качестве усилителя сигнала
используется электронный ключ R1, VT1.
Спецификация элементов приведена в Приложении Д.
3 ТЕХНИКО-ЭКОНОМИЧЕСКОЕ
ОБОСНОВАНИЕ ОБЪЕКТА
РАЗРАБОТКИ
В данном разделе проводится
технико-экономический расчет стоимости музыкального звонка с двумя режимами
работы.
Стоимость устройства будет состоять из
стоимости разработки ПО для микроконтроллера, стоимости разработки
конструкторской документации и стоимости сборки и испытания устройства.
3.1 Расчет расходов на ПО для
микроконтроллера, которое разрабатывается
Исходные данные для расчета стоимости разработки ПО, которое
разрабатывается приведнны в таблице 3.1.
Таблица 3.1 –
Исходные данные по предприятию
№п/п |
Статьи затрат |
Усл. обоз. |
Ед. изм. |
Значения |
|
|
|
Проектирование и разработка ПО |
|
1 |
Часовая тарифная ставка программиста |
Зпр
|
грн. |
8,00 |
|
2 |
Коэффициент сложности программы |
с
|
коэф. |
1,40 |
|
3 |
Коэффициент коррекции программы |
Р
|
коэф. |
0,05 |
|
4 |
Коэффициент увеличения расходов труда |
Z
|
коэф. |
1,3 |
|
5 |
Коэффициент квалификации программиста |
k
|
коэф. |
1,0 |
|
6 |
Амортизационные
отчисления |
Амт
|
% |
10,0 |
|
7 |
Мощность компьютера, принтера |
WМ
|
Квт/ч |
0,40 |
|
8 |
Стоимость ПЕОМ IBM
Sempron LE1150(AM2)/1GB/TFT
|
Втз
|
грн. |
3200,00 |
9 |
Тариф на электроэнергию |
Це/е
|
грн. |
0,56 |
10 |
Норма дополнительной зарплаты |
Нд
|
% |
10,0 |
11 |
Отчисление на социальные расходы |
Нсоц
|
% |
37,2 |
12 |
Транспортно-заготовительные расходы |
Нтр
|
% |
4,0 |
Эксплуатация П0 |
|
13 |
Численность обслуживающего персонала |
Чо
|
чел |
1 |
|
14 |
Часовая тарифная ставка обслуживающего персонала |
Зпер
|
грн. |
6,00 |
15 |
Время обслуживания систем |
То
|
час/г |
150 |
16 |
Стоимость ПЕОМ |
Втз
|
грн. |
3200,00 |
17 |
Норма амортизационных отчислений на ПЕОМ |
На
|
% |
10,0 |
18 |
Норма амортизационных отчислений на ПЗ |
НаПО
|
% |
10,0 |
19 |
Накладные расходы |
Рнак
|
% |
25,0 |
20 |
Отчисление на содержание и ремонт ПЕОМ |
Нр
|
% |
10,0 |
21 |
Стоимость работы одного часа ПЕОМ |
Вг
|
грн. |
6,5 |
Страницы: 1, 2, 3, 4, 5, 6
|