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

Прошивка для ATtiny13:

;******************************************************************************
;******* Полонез Огинского звучит на порту PB2 микроконтроллера ATtiny13 ******
;***** Created: 2015-02-10 01:05 ******** Site: http://integrator.adior.ru ****
;******************************************************************************
.includepath "/home/dior/AVR"		; Папка с файлами заголовками         
.include "tn13def.inc"			; Используем ATtiny13                 
;==============================================================================
		rjmp reset		; начало программы Полонез Огинского
reset:
		ldi r23, RAMEND		; Загрузить в R23 адрес последней ячейки памяти
		out SPL, r23		; Инициализация стека
		sbi DDRB, DDB2		; PB2 будет работать на выход
		ldi r23, 4		; Загрузить в R23 4
		out PORTB, r23		; PB2 установить уровень 1. На PB2 подкл. динамик.
main:
;ми
		ldi r25, 6		; Длительность звучания (старший байт)
		ldi XL, 26		; Длительность полупериода (младший байт)
		ldi XH, 7		; Длительность полупериода (старший байт)
		rcall duratone		; Вызов подпрограммы генерации ноты
;ре#
		ldi r25, 1
		ldi XL, 134
		ldi XH, 7
		rcall duratone
;ми
		ldi r25, 1
		ldi XL, 26
		ldi XH, 7
		rcall duratone
;фа
		ldi r25, 2
		ldi XL, 180
		ldi XH, 6
		rcall duratone
;ми
		ldi r25, 2
		ldi XL, 26
		ldi XH, 7
		rcall duratone
;до --
		ldi r25, 3
		ldi XL, 243
		ldi XH, 8
		rcall duratone
;си1
		ldi r25, 1
		ldi XL, 123
		ldi XH, 9
		rcall duratone
;ля1
		ldi r25, 6
		ldi XL, 165
		ldi XH, 10
		rcall duratone
;до
		ldi r25, 2
		ldi XL, 243
		ldi XH, 8
		rcall duratone
;ми --
		ldi r25, 4
		ldi XL, 26
		ldi XH, 7
		rcall duratone
;ля
		ldi r25, 6
		ldi XL, 81
		ldi XH, 5
		rcall duratone
;ми
		ldi r25, 2
		ldi XL, 26
		ldi XH, 7
		rcall duratone
;соль --
		ldi r25, 2
		ldi XL, 248
		ldi XH, 5
		rcall duratone
;фа#
		ldi r25, 2
		ldi XL, 83
		ldi XH, 6
		rcall duratone
;фа
		ldi r25, 6
		ldi XL, 180
		ldi XH, 6
		rcall duratone
;ре
		ldi r25, 2
		ldi XL, 249
		ldi XH, 7
		rcall duratone
;си --
		ldi r25, 3
		ldi XL, 188
		ldi XH, 4
		rcall duratone
;ля
		ldi r25, 1
		ldi XL, 81
		ldi XH, 5
		rcall duratone
;соль#
		ldi r25, 3
		ldi XL, 162
		ldi XH, 5
		rcall duratone
;фа
		ldi r25, 1
		ldi XL, 180
		ldi XH, 6
		rcall duratone
;ми
		ldi r25, 3
		ldi XL, 26
		ldi XH, 7
		rcall duratone
;ре
		ldi r25, 1
		ldi XL, 249
		ldi XH, 7
		rcall duratone
;ми--
		ldi r25, 3
		ldi XL, 26
		ldi XH, 7
		rcall duratone
;ре
		ldi r25, 1
		ldi XL, 249
		ldi XH, 7
		rcall duratone
;до
		ldi r25, 6
		ldi XL, 243
		ldi XH, 8
		rcall duratone
;ля1
		ldi r25, 4
		ldi XL, 165
		ldi XH, 10
		rcall duratone
;си1--
		ldi r25, 1
		ldi XL, 123
		ldi XH, 9
		rcall duratone
;до
		ldi r25, 1
		ldi XL, 243
		ldi XH, 8
		rcall duratone
;си1
		ldi r25, 1
		ldi XL, 123
		ldi XH, 9
		rcall duratone
;ля1
		ldi r25, 1
		ldi XL, 165
		ldi XH, 10
		rcall duratone
;си1
		ldi r25, 1
		ldi XL, 123
		ldi XH, 9
		rcall duratone
;ре
		ldi r25, 1
		ldi XL, 249
		ldi XH, 7
		rcall duratone
;фа
		ldi r25, 1
		ldi XL, 180
		ldi XH, 6
		rcall duratone
;ми
		ldi r25, 1
		ldi XL, 26
		ldi XH, 7
		rcall duratone
;ре
		ldi r25, 1
		ldi XL, 249
		ldi XH, 7
		rcall duratone
;до
		ldi r25, 1
		ldi XL, 243
		ldi XH, 8
		rcall duratone
;си1
		ldi r25, 1
		ldi XL, 123
		ldi XH, 9
		rcall duratone
;до
		ldi r25, 1
		ldi XL, 243
		ldi XH, 8
		rcall duratone
;ля1--
		ldi r25, 1
		ldi XL, 165
		ldi XH, 10
		rcall duratone
;до
		ldi r25, 1
		ldi XL, 243
		ldi XH, 8
		rcall duratone
;ми
		ldi r25, 1
		ldi XL, 26
		ldi XH, 7
		rcall duratone
;ля
		ldi r25, 1
		ldi XL, 81
		ldi XH, 5
		rcall duratone
;до3
		ldi r25, 6
		ldi XL, 120
		ldi XH, 4
		rcall duratone
;ля
		ldi r25, 2
		ldi XL, 81
		ldi XH, 5
		rcall duratone
;си--
		ldi r25, 1
		ldi XL, 188
		ldi XH, 4
		rcall duratone
;до3
		ldi r25, 1
		ldi XL, 120
		ldi XH, 4
		rcall duratone
;си
		ldi r25, 1
		ldi XL, 188
		ldi XH, 4
		rcall duratone
;ля
		ldi r25, 1
		ldi XL, 81
		ldi XH, 5
		rcall duratone
;си
		ldi r25, 1
		ldi XL, 188
		ldi XH, 4
		rcall duratone
;ре3
		ldi r25, 1
		ldi XL, 251
		ldi XH, 3
		rcall duratone
;фа3
		ldi r25, 1
		ldi XL, 89
		ldi XH, 3
		rcall duratone
;ми3
		ldi r25, 1
		ldi XL, 140
		ldi XH, 3
		rcall duratone
;ре3
		ldi r25, 1
		ldi XL, 251
		ldi XH, 3
		rcall duratone
;до3
		ldi r25, 1
		ldi XL, 120
		ldi XH, 4
		rcall duratone
;си
		ldi r25, 1
		ldi XL, 188
		ldi XH, 4
		rcall duratone
;ля
		ldi r25, 1
		ldi XL, 81
		ldi XH, 5
		rcall duratone
;соль#--
		ldi r25, 1
		ldi XL, 162
		ldi XH, 5
		rcall duratone
;ля
		ldi r25, 1
		ldi XL, 81
		ldi XH, 5
		rcall duratone
;си
		ldi r25, 1
		ldi XL, 188
		ldi XH, 4
		rcall duratone
;соль#
		ldi r25, 1
		ldi XL, 162
		ldi XH, 5
		rcall duratone
;си
		ldi r25, 4
		ldi XL, 188
		ldi XH, 4
		rcall duratone
;ля
		ldi r25, 4
		ldi XL, 81
		ldi XH, 5
		rcall duratone

stop:		rjmp stop		; Останов или бесконечный цикл

; Подпрограммы

duratone:				; Подпрограмма генератор тона с таймером
					; Длительность таймера R25
					; Высота тона (точнее, длительность полупериода) XH:XL
		movw YL, XL		; ╔Загрузить в счетчик Y длительность полупериода из X
		swap r23		; ║Поменять местами полубайты в r23
		out PORTB, r23		; ║Инвертировать сигнал на PB2
halfcycle:	sbiw YH:YL,1		; ║╔Y=Y-1 (65535...0)
		brcc halfcycle		; ║╚Повторять пока не было переноса
		sbiw r25:r24,1		; ║R25:R24=R25:R24-1
		brcc duratone		; ╚Повторять пока не было переноса
		ret			; Возврат из подпрограммы


; Задействованы регистры R23, R24, R25, R26, R27, R28, R29

; Компилировать avra test.s
; Загрузить avrdude -C/home/dior/AVR/avrdude.conf -v -v -v -v -pattiny13 -cstk500v1 -P/dev/ttyUSB0 -b19200 -Uflash:w:test.s.hex:i
; Фьюзы avrdude -C/home/dior/AVR/avrdude.conf -v -v -v -v -pattiny13 -cstk500v1 -P/dev/ttyUSB0 -b19200 -e -Uhfuse:w:0xff:m -Ulfuse:w:0x7a:m

Для кодирования нот в музыкальный автомат на ATtiny13 понадобится таблица соответствия нотам частоты звуковых колебаний. В нашей таблице мы уже рассчитали значения для регистров XH и XL микроконтроллера ATtiny13. Смотрите статью Расчет времени выполнения программы на МК Atmel AVR. Частота звуковых колебаний для каждой ноты рассчитана по формуле:

Формула расчета частоты музыкальных нот

3 октава Частота n XH XL
H си 74 1975,5332050245 605,4309441866 2 93
A#/Hb   73 1864,6550460724 641,5506677375 2 129
A ля 72 1760 679,8181818182 2 167
G#/Ab   71 1661,2187903198 720,3612006995 2 208
G соль 70 1567,981743927 763,3150329382 2 251
F#/Gb   69 1479,9776908465 808,8230329564 3 40
F фа 68 1396,912925732 857,0370794738 3 89
E ми 67 1318,5102276515 908,1180823887 3 140
D#/Eb   66 1244,5079348883 962,2365197998 3 194
D ре 65 1174,6590716696 1019,5730069614 3 251
C#/Db   64 1108,7305239075 1080,3188990692 4 56
C до 63 1046,5022612024 1144,6769298914 4 120
2 октава Частота n XH XL
H си 62 987,7666025122 1212,8618883732 4 188
A#/Hb   61 932,3275230362 1285,101335475 5 5
A ля 60 880 1361,6363636364 5 81
G#/Ab   59 830,6093951599 1442,722401399 5 162
G соль 58 783,9908719635 1528,6300658764 5 248
F#/Gb   57 739,9888454233 1619,6460659128 6 83
F фа 56 698,456462866 1716,0741589476 6 180
E ми 55 659,2551138257 1818,2361647773 7 26
D#/Eb   54 622,2539674442 1926,4730395997 7 134
D ре 53 587,3295358348 2041,1460139228 7 249
C#/Db   52 554,3652619537 2162,6377981385 8 114
C до 51 523,2511306012 2291,3538597829 8 243
1 октава Частота n XH XL
H си 50 493,8833012561 2427,7237767464 9 123
A#/Hb   49 466,1637615181 2572,2026709501 10 12
A ля 48 440 2725,2727272727 10 165
G#/Ab   47 415,3046975799 2887,4448027981 11 71
G соль 46 391,9954359818 3059,2601317528 11 243
F#/Gb   45 369,9944227116 3241,2921318256 12 169
F фа 44 349,228231433 3434,1483178951 13 106
E ми 43 329,6275569129 3638,4723295546 14 54
D#/Eb   42 311,1269837221 3854,9460791994 15 14
D ре 41 293,6647679174 4084,2920278455 15 244
C#/Db   40 277,1826309769 4327,2755962769 16 231
C до 39 261,6255653006 4584,7077195657 17 232
Малая октава Частота n XH XL
H си 38 246,9416506281 4857,4475534928 18 249
A#/Hb   37 233,081880759 5146,4053419002 20 26
A ля 36 220 5452,5454545455 21 76
G#/Ab   35 207,65234879 5776,8896055962 22 144
G соль 34 195,9977179909 6120,5202635057 23 232
F#/Gb   33 184,9972113558 6484,5842636512 25 84
F фа 32 174,6141157165 6870,2966357902 26 214
E ми 31 164,8137784564 7278,9446591093 28 110
D#/Eb   30 155,563491861 7711,8921583987 30 31
D ре 29 146,8323839587 8170,584055691 31 234
C#/Db   28 138,5913154884 8656,5511925538 33 208
C до 27 130,8127826503 9171,4154391314 35 211
    Частота n XH XL

Огинский Полонез

Принципиальная схема музыкального автомата:

Принципиальная схема музыкального автомата на ATtiny13

Монтажная схема музыкального автомата:

Монтажная схема музыкального автомата на микроконтроллере ATtiny13