%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Author: Fabian Schuh
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Webseite: xeroc.org
% Lizenz: http://creativecommons.org/licenses/by-nc-sa/2.0/de/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1 /*****************************************************************************
  2 *
  3 *   Tone definition. Each tone are set up with a value which will give the 
  4 *   right frequency when applied to a 16-bits timer with PWM. These values are based
  5 *   on a CLKcpu running @ 1Mhz.
  6 *
  7 *   First find the frequency for all tones. 
  8 *
  9 *   Formula:    ToneX = Bf * 2^(ToneX/12)
 10 *   
 11 *   ToneX: the actual tone, e.g. C0 = 3
 12 *   Bf: Basefrequency = 220Hz (A)
 13 *
 14 *       
 15 *   E.g: For tone C0 this would be:     C0 = 220 * 2^(3/12)
 16 *                                       C0 = 261,6256...
 17 *
 18 *   Now we must find which value to put in a 16-bits timer with PWM to achieve 
 19 *   this frequency
 20 *
 21 *   Formula:    Timer value = 1Mhz / ToneHz / 2
 22 *
 23 *   E.g: For tone C0 this would be:     Timer value = 1000000 / 261,6256... / 2
 24 *                                       Timer value = 1911
 25 *
 26 *   Set up a 16-bits timer to run at Phase/Freq-correct PWM, top value = ICR1,
 27 *   set OC1A when upcounting, clear when downcounting.
 28 *   
 29 *****************************************************************************/
 30 
 31 #define A   2273        // tone 0
 32 #define xA  2145        // tone 1
 33 #define Ax  2145        // tone 1
 34 #define B   2025        // tone 2
 35 #define C0  1911        // tone 3
 36 #define xC0 1804        // ...
 37 #define Cx0 1804
 38 #define D0  1703
 39 #define xD0 1607
 40 #define Dx0 1607
 41 #define E0  1517
 42 #define F0  1432
 43 #define xF0 1351
 44 #define Fx0 1351
 45 #define G0  1275
 46 #define xG0 1204
 47 #define Gx0 1204
 48 #define A0  1136
 49 #define xA0 1073
 50 #define Ax0 1073
 51 #define B0  1012
 52 #define C1  956
 53 #define xC1 902
 54 #define Cx1 902
 55 #define D1  851
 56 #define xD1 804
 57 #define Dx1 804
 58 #define E1  758
 59 #define F1  716
 60 #define xF1 676
 61 #define Fx1 676
 62 #define G1  638
 63 #define xG1 602
 64 #define Gx1 602
 65 #define A1  568
 66 #define xA1 536
 67 #define Ax1 536
 68 #define B1  506
 69 #define C2  478
 70 #define xC2 451
 71 #define Cx2 451
 72 #define D2  426
 73 #define xD2 402
 74 #define Dx2 402
 75 #define E2  379
 76 #define F2  356
 77 #define xF2 338
 78 #define Fx2 338
 79 #define G2  319
 80 #define xG2 301
 81 #define Gx2 301
 82 #define A2  284
 83 #define xA2 268
 84 #define Ax2 268
 85 #define B2  253
 86 #define C3  239
 87 #define xC3 225
 88 #define Cx3 225
 89 #define D3  213
 90 #define xD3 201
 91 #define Dx3 201
 92 #define E3  190
 93 #define F3  179
 94 #define xF3 169
 95 #define Fx3 169
 96 #define G3  159
 97 #define xG3 150
 98 #define Gx3 150
 99 #define A3  142
100 #define xA3 134
101 #define Ax3 134
102 #define B3  127
103 #define C4  119
104 #define xC4 113
105 #define Cx4 113
106 #define D4  106
107 #define xD4 100
108 #define Dx4 100
109 #define E4  95
110 #define F4  89
111 #define xF4 84
112 #define Fx4 84
113 #define G4  80
114 #define xG4 75
115 #define Gx4 75
116 #define A4 71
117 
118 #define P   1           // pause
119 
120 
121 
122 /******************************************************************************
123 *
124 *   The tone definitions are duplicated to accept both upper and lower case
125 *
126 ******************************************************************************/
127 
128 #define a   2273        // tone 0
129 #define xa  2145        // tone 1
130 #define ax  2145        // tone 1
131 #define b   2024        // tone 2
132 #define c0  1911        // tone 3
133 #define xc0 1804        // ...
134 #define cx0 1804
135 #define d0  1703
136 #define xd0 1607
137 #define dx0 1607
138 #define e0  1517
139 #define f0  1432
140 #define xf0 1351
141 #define fx0 1351
142 #define g0  1275
143 #define xg0 1204
144 #define gx0 1204
145 #define a0  1136
146 #define xa0 1073
147 #define ax0 1073
148 #define b0  1012
149 #define c1  956
150 #define xc1 902
151 #define cx1 902
152 #define d1  851
153 #define xd1 804
154 #define dx1 804
155 #define e1  758
156 #define f1  716
157 #define xf1 676
158 #define fx1 676
159 #define g1  638
160 #define xg1 602
161 #define gx1 602
162 #define a1  568
163 #define xa1 536
164 #define ax1 536
165 #define b1  506
166 #define c2  478
167 #define xc2 451
168 #define cx2 451
169 #define d2  426
170 #define xd2 402
171 #define dx2 402
172 #define e2  379
173 #define f2  356
174 #define xf2 338
175 #define fx2 338
176 #define g2  319
177 #define xg2 301
178 #define gx2 301
179 #define a2  284
180 #define xa2 268
181 #define ax2 268
182 #define b2  253
183 #define c3  239
184 #define xc3 225
185 #define cx3 225
186 #define d3  213
187 #define xd3 201
188 #define dx3 201
189 #define e3  190
190 #define f3  179
191 #define xf3 169
192 #define fx3 169
193 #define g3  159
194 #define xg3 150
195 #define gx3 150
196 #define a3  142
197 #define xa3 134
198 #define ax3 134
199 #define b3  127
200 #define c4  119
201 #define xc4 113
202 #define cx4 113
203 #define d4  106
204 #define xd4 100
205 #define dx4 100
206 #define e4  95
207 #define f4  89
208 #define xf4 84
209 #define fx4 84
210 #define g4  80
211 #define xg4 75
212 #define gx4 75
213 #define a4 71
214 
215 #define p   1