Rev Author Line No. Line
202 miho 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3c.org/TR/html4/strict.dtd">
2 <html>
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
5 <title> MB01B </title>
6 <meta name="keywords" content="stavebnice MLAB melodický zvonek">
7 <meta name="description" content="Projekt MLAB, Programovatelný melodický zvonek">
8 <!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE -->
9 <link rel="StyleSheet" href="../../../../Web/CSS/MLAB.css" type="text/css" title="MLAB základní styl">
211 miho 10 <link rel="shortcut icon" type="image/x-icon" href="../../../../Web/PIC/MLAB.ico">
202 miho 11 <script type="text/javascript" src="../../../../Web/JS/MLAB_Menu.js"></script>
12 <!-- AUTOINCLUDE END -->
13 </head>
14  
15 <body lang="cs">
16  
17 <!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE -->
18 <!-- ============== HLAVICKA ============== -->
19 <div class="Header">
20 <script type="text/javascript">
21 <!--
22 SetRelativePath("../../../../");
23 DrawHeader();
24 // -->
25 </script>
26 <noscript>
27 <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p>
28 </noscript>
29 </div>
30 <!-- AUTOINCLUDE END -->
31  
32 <!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE -->
33 <!-- ============== MENU ============== -->
34 <div class="Menu">
35 <script type="text/javascript">
36 <!--
37 SetRelativePath("../../../../");
38 DrawMenu();
39 // -->
40 </script>
41 <noscript>
42 <p><b> Pro zobrazení (vložení) menu je potřeba JavaScript </b></p>
43 </noscript>
44 </div>
45 <!-- AUTOINCLUDE END -->
46  
47 <!-- ============== TEXT ============== -->
48 <div class="Text">
49 <p class="Title">
50 Melodický zvonek
51 </p>
52 <p class=Autor>
53 Milan Horkel
54 </p>
55 <p class="Subtitle">
56 Melodický zvonek MB01 používá pro generování hudebních
57 tónů procesor PIC16F819 a umožňuje snadné přeprogramování melodií. Zvonek je
58 možno napájet z&nbsp;baterie, protože v&nbsp;klidu neodebírá prakticky žádný
59 proud. Na výstup je možné připojit reproduktor.
60 </p>
61 <p class="Subtitle">
62 <img width=290 height=235 src="Pictures/image001.jpg"
63 alt="Obrázek melodického zvonku">
64 </p>
65 <p>
66 <a href="../MB01B.cs.pdf"><img class="NoBorder"
67 src="../../../../Web/PIC/FileIco_PDF.ico"
68 alt="Acrobat">&nbsp;PDF verze</a>
69 </p>
70  
71 <h1> Technické parametry </h1>
72  
73 <table>
74 <tr>
75 <th> Parametr </th>
76 <th> Hodnota </th>
77 <th> Poznámka </th>
78 </tr>
79 <tr>
80 <td> Napájení </td>
81 <td> 9V </td>
82 <td> Asi od 4V, maximum 12V </td>
83 </tr>
84 <tr>
85 <td> Spotřeba v klidu </td>
86 <td> ≈0 </td>
87 <td> Dáno zbytkovým proudem tranzistorů Q2 a Q3 </td>
88 </tr>
89 <tr>
90 <td> Spotřeba při běhu (potichu) </td>
91 <td> 20mA / 30mA </td>
92 <td> Při 9V / 12V </td>
93 </tr>
94 <tr>
95 <td> Spotřeba maximálně (nahlas) </td>
96 <td> 150mA </td>
97 <td> Při 12V </td>
98 </tr>
99 <tr>
100 <td> Počet melodií </td>
101 <td> Max 15 </td>
102 <td> Všechny možné kombinace 4 tlačítek </td>
103 </tr>
104 <tr>
105 <td> Délka skladeb celkem </td>
106 <td> 512 </td>
107 <td> Počítají se noty, mezery a změny parametrů (například tempa) </td>
108 </tr>
109 <tr>
110 <td> Spouštění skladeb </td>
111 <td> 4 tlačítka </td>
112 <td> Skladby od páté výše se spouštějí stiskem více tlačítek najednou </td>
113 </tr>
114 <tr>
115 <td> Rozměry </td>
116 <td> 61x71x20mm </td>
117 <td> Bez přečnívajícího konektoru a šroubů </td>
118 </tr>
119 </table>
120  
121 <h1> Popis konstrukce </h1>
122  
123 <h2> Slovo úvodem </h2>
124  
125 <p>
126 Cílem návrhu tohoto melodického zvonku bylo navrhnout moderní řešení,
127 se kterým i méně vybavený amatér může něco dále dělat. Díky pokroku
128 v&nbsp;technologii výroby integrovaných obvodů se v&nbsp;poslední době
129 začínají objevovat velmi zajímavé mikrořadiče (jednočipové mikropočítače)
130 za velmi rozumnou cenu. Zde byl použit jeden z&nbsp;nich, jmenuje se
131 PIC16F819 a vyrábí jej firma MICROCHIP.
132 </p>
133  
134 <p>
135 Procesor je poměrně rychlý (5 miliónů instrukcí za sekundu), má malou
136 spotřebu (cca 2mA za plného běhu) a funguje v širokém rozsahu napájení
137 (od 2V do 5.5V). Je tedy velmi vhodný pro zařízení napájené z&nbsp;baterie.
138 Kromě toho má FLASH paměť programu (2048 slov po 14 bitech), kterou je
139 možné mnohokrát přeprogramovat. Procesor může tuto paměť FLASH sám
140 přeprogramovat.
141 </p>
142  
143 <p>
144 Část paměti programu je vyhrazena pro uložení melodií a je tak možné
145 dodatečně melodie měnit. Není k&nbsp;tomu potřeba žádný speciální
146 programátor, stačí připojit obyčejné PC. Nové definice skladeb se
147 přenášejí do melodického zvonku prostřednictvím sériové linky RS232.
148 Aby nemohlo dojít k&nbsp;nechtěnému smazání programu, je část paměti
149 FLASH procesoru uzamčena, aby ji procesor nemohl přepsat.
150 </p>
151  
152 <h2> Zapojení melodického zvonku </h2>
153  
154 <p>
155 <img width=486 height=888 src="Pictures/image003.gif"
156 alt="">
157 </p>
158  
159 <h3> Procesor a obvody jeho napájení</h3>
160  
161 <p>
162 Srdcem zvonku je procesor U1. Časování je řízeno krystalem X1. Aby bylo
163 možno procesor naprogramovat přímo v&nbsp;zapojení, je zde programovací
164 konektor J6, který slouží pro naprogramování programu.
165 V&nbsp;běžném provozu ani při přeprogramovávání melodií již není třeba.
166 </p>
167  
168 <p>
169 Zvonek začíná hrát po stisku některého tlačítka (nebo více najednou).
170 Při stlačení tlačítka se přes diody D3 až D6 přivede zemní potenciál
171 na vstupy procesoru. Vstupní nožičky procesoru jsou opatřeny ochrannými
172 diodami (jsou uvnitř procesoru) a přes tyto diody dojde k&nbsp;připojení
173 zemního potenciálu i signálu GND_PIC. Tím dojde k&nbsp;tomu, že procesor
174 je napájen (přes odpor R1) a jeho program se rozběhne. Protože procesor
175 snese maximálně 5.5V, je velikost napájecího napětí mezi vývody GND a VDD
176 procesoru omezeno Zenerovou diodou D2 na cca 5V.
177 </p>
178  
179 <p>
180 Po rozběhu programu se nejdříve aktivuje signál POWER_ON# (do stavu L)
181 a přes Q1 a Q2 se připojí GND_PIC na zem. Po skončení melodie se signál
182 POWER_ON# deaktivuje (přejde do třetího stavu) a procesor tak sám sobě
183 vypne napájení. Tím je zajištěna prakticky nulová klidová spotřeba.
184 </p>
185  
186 <p>
187 Na vývodu RB3 procesoru generuje program výstupní signál (ať už přímo
188 digitálně nebo pomocí PWM) a na vstupu RB1 očekává sériová data
189 z&nbsp;počítače při přeprogramovávání melodií. Přestože RS232 signály jsou
190 v&nbsp;rozsahu +/- 5 až +/-15V, je možné tyto signály připojit přímo
191 ke vstupu pouze přes omezovací odpor R7. Ochranné diody na vstupu procesoru
192 ochrání vstupní tranzistory před napětím nad a pod napájecím napětím
193 procesoru. Odpor R8 zajišťuje definovanou úroveň na vstupu, pokud není
194 nic připojeno.
195 </p>
196  
197 <p>
198 Propojka PGM&nbsp;MODE (J5) slouží k&nbsp;vynucenému zapnutí napájení
199 v&nbsp;době programování nových melodií i v&nbsp;době programování
200 programu do procesoru přes ISP konektor (J6) . Program před vlastním
201 programováním paměti FLASH kontroluje, že je tato propojka nasunuta,
202 a je tak zajištěno, že ani při vybité baterii nemůže prakticky dojít
203 ke smazání melodie. Ke smazání programu nemůže dojít nikdy, protože tato
204 část paměti programu je chráněna nastavením ochranných bitů konfiguračního
205 slova a procesor sám sobě tuto paměť nemůže přepsat.
206 </p>
207  
208 <h3> NF Zesilovač </h3>
209  
210 <p>
211 Jako koncový zesilovač byl použit obvod LM386 v&nbsp;klasickém zapojení.
212 Jeho napájení je spínáno tranzistorem Q3 jen po dobu hraní melodie.
213 Tranzistor Q3 je buzen vývodem RA4 procesoru PIC.
214 </p>
215  
216 <h2> Mechanická konstrukce </h2>
217  
218 <p>
219 Melodický zvonek je sestaven na jednostranném plošném spoji se&nbsp;čtyřmi
220 upevňovacími otvory v&nbsp;rozích. Podél kratší strany jsou 4 tlačítka
221 pro spouštění melodií. Ke konektoru J3 je možné připojit vnější tlačítka.
222 Místo odporového trimru P1 je možné připojit (logaritmický) potenciometr
223 jako regulátor hlasitosti.
224 </p>
225  
226 <h2> Osazení a oživení </h2>
227  
228 <h3> Osazení </h3>
229  
230 <p>
231 Při osazování je třeba dodržet polarity diod, tranzistorů a elektrolytických
232 kondenzátorů. Pokud jsou použity funkční součástky a jsou správně osazeny,
233 mělo by zařízení fungovat na první pokus. Podmínkou je použití naprogramovaného
234 procesoru.
235 </p>
236  
237 <h3> Oživení </h3>
238  
239 <p>
240 Nejprve zkontrolujeme polaritu ochranné diody D1 a vizuálně zkontrolujeme
241 zejména zkraty. Procesor i zesilovač můžeme zasunout do patic. Pokud si
242 troufáme, můžeme je připájet přímo do desky.
243 </p>
244  
245 <p>
246 Pokud máme procesor předem naprogramovaný, je oživení snazší, protože by
247 zvonek měl rovnou začít fungovat. Nejprve připojíme zdroj o napětí cca 5V
248 s&nbsp;omezením proudu (asi na 100mA). Ujistíme se, že <b>není</b>
249 nasunuta propojka na J5. V&nbsp;klidu by zvonek neměl odebírat prakticky
250 žádný proud. Po stisku tlačítka by měl zvonek hrát některou
251 z&nbsp;předprogramovaných melodií. Pokud hraje, postupně zvyšujeme napájecí
252 napětí až na cca 10V a přitom kontrolujeme, zda napájecí napětí procesoru
253 (nejsnáze se měří na Zenerově diodě D2) nepřekročí 5.5V.
254 </p>
255  
256 <p>
257 Pokud nehraje je třeba zkontrolovat toto:
258 </p>
259  
260 <ul>
261 <li> napájení na procesoru při stisku tlačítka (dioda D2) – cca 3 až 5V, </li>
262 <li> zda kmitá oscilátor procesoru – logickou sondou na vývodu CLKO procesoru, </li>
263 <li> zda fungují tlačítka – napětí na RB4 a RB7 klesá k&nbsp;nule při stisku tlačítka, </li>
264 <li> zda spínají tranzistory Q1 a Q2 – při nasunuté propojce na J5, </li>
265 <li> zda procesor generuje zvuk - na RB3 telefonním sluchátkem nebo piezoelementem proti zemi, </li>
266 <li> zda spíná Q3 napětí pro zesilovač U2. </li>
267 </ul>
268  
269 <p>
270 Po skončení skladby by se zvonek měl opět vypnout a neměl by odebírat žádný proud.
271 </p>
272  
273 <p>
274 Pokud procesor nemáme nahraný, osadíme jej do zvonku, <b>nasuneme</b>
275 propojku na J5 a zkontrolujeme při postupném zvyšování napájecího napětí,
276 zda na procesoru (D2) je napětí cca 5V. Pokud ano, je možno ke konektoru J6
277 připojit programátor a nahrát do procesoru program. Propojku J5 opět vyjmeme.
278 Zbytek oživování je stejný.
279 </p>
280  
281 <p>
282 <img width=432 height=346 src="Pictures/image002.jpg"
283 alt="Osazovák">
284 </p>
285  
286 <table class="Soupiska">
287 <tr>
288 <th> Reference </th>
289 <th> Hodnota </th>
290 <th> Reference </th>
291 <th> Hodnota </th>
292 </tr>
293 <tr>
294 <th colspan="2"> Odpory </th>
295 <th colspan="2"> Polovodiče a krystaly </th>
296 </tr>
297 <tr>
298 <td> R15 </td>
299 <td> 10 </td>
300 <td> D1 </td>
301 <td> 1N4005 </td>
302 </tr>
303 <tr>
304 <td> R4,R1 </td>
305 <td> 680 </td>
306 <td> D3,D4,D5,D6 </td>
307 <td> 1N4148 </td>
308 </tr>
309 <tr>
310 <td> R11 </td>
311 <td> 2k2 </td>
312 <td> D2 </td>
313 <td> BZX83V005.1 </td>
314 </tr>
315 <tr>
316 <td> R2,R3,R5,R6,R9,R10,R13,R14 </td>
317 <td> 10k </td>
318 <td> Q1 </td>
319 <td> BC327 </td>
320 </tr>
321 <tr>
322 <td> R7,R12 </td>
323 <td> 27k </td>
324 <td> Q2 </td>
325 <td> BC337 </td>
326 </tr>
327 <tr>
328 <td> R8 </td>
329 <td> 100k </td>
330 <td> Q3 </td>
331 <td> BC640 </td>
332 </tr>
333 <tr>
334 <th colspan="2"> Odporové trimry </th>
335 <td> U1 </td>
336 <td> PIC16F819-I/P </td>
337 </tr>
338 <tr>
339 <td> P1 </td>
340 <td> 10k </td>
341 <td> U2 </td>
342 <td> LM386 </td>
343 </tr>
344 <tr>
345 <th colspan="2"> Kondenzátory </th>
346 <td> X1 </td>
347 <td> 20MHz </td>
348 </tr>
349 <tr>
350 <td> C4,C5 </td>
351 <td> 22pF </td>
352 <th colspan="2"> Mechanické součásti </th>
353 </tr>
354 <tr>
355 <td> C14 </td>
356 <td> 4n7 </td>
357 <td> SW1,SW2,SW3,SW4 </td>
358 <td> P-B1720 </td>
359 </tr>
360 <tr>
361 <td> C3,C6,C7,C8,C9 </td>
362 <td> 10nF </td>
363 <td> J1,J2 </td>
364 <td> JUMP3 </td>
365 </tr>
366 <tr>
367 <td> C15,C16 </td>
368 <td> 33nF </td>
369 <td> J3 </td>
370 <td> JUMP5 </td>
371 </tr>
372 <tr>
373 <td> C1,C2,C10 </td>
374 <td> 100nF </td>
375 <td> J5 </td>
376 <td> JUMP2 </td>
377 </tr>
378 <tr>
379 <td> C13 </td>
380 <td> 1M/63V </td>
381 <td> J6 </td>
382 <td> PIC_ISP </td>
383 </tr>
384 <tr>
385 <td> C12 </td>
386 <td> 47uF/16V </td>
387 <td> J4 </td>
388 <td> DB9M_90 </td>
389 </tr>
390 <tr>
391 <td> C11,C17 </td>
392 <td> 330uF/16V </td>
393 <td> </td>
394 <td> </td>
395 </tr>
396 </table>
397  
398 <h1> Trocha hudební teorie </h1>
399  
400 <p>
401 Aby hudba zněla libozvučně (příjemně), je třeba, aby používané tóny
402 ve stupnicích splňovaly podmínku, že jejich frekvence mají (malý)
403 společný násobek. Například dvojnásobek jednoho tónu aby byl
404 trojnásobkem jiného tónu. Takových stupnic lze skonstruovat mnoho.
405 Aby bylo možné na klavír (nebo podobný nástroj, který umí vyrábět
406 jen určité konkrétní tóny) hrát skladby komponované v&nbsp;různých
407 stupnicích bez přelaďování nástroje, používá se tzv. temperované ladění.
408 Temperované ladění není ideální, jedná se o kompromis hřešící na to,
409 že lidský sluch není dokonalý.
410 </p>
411  
412 <p>
413 Temperované ladění spočívá v&nbsp;tom, že se oktáva rozdělí na 12 stejných
414 dílů, které mají geometrický odstup frekvencí tónů. Oktáva zahrnuje frekvence
415 v&nbsp;rozsahu 1:2 a je v&nbsp;ní celkem 7 tónů a 5 půltónů.
416 Z&nbsp;toho vyplývá, že poměr sousedních tónů a půltónů je vždy stejný a je
417 roven 2<sup>1/12</sup>, tedy přibližně 1:1.06 .
418 </p>
419  
420 <p>
421 Následující tabulka uvádí pro jednotlivé tóny jejich frekvence.
422 Vychází se z frekvence komorního&nbsp;A, která je 440Hz. Tóny o
423 oktávu výš mají frekvence dvakrát vyšší, a naopak tóny o oktávu níž mají
424 frekvence poloviční.
425 </p>
426  
427 <table>
428 <tr>
429 <th> ↓ Tón </th>
430 <th colspan="8" class="Center"> Frekvence [Hz]</th>
431 </tr>
432 <tr>
433 <th> Oktáva →</th>
434 <th class="Center"> 0 </th>
435 <th class="Center"> 1 </th>
436 <th class="Center"> 2 </th>
437 <th class="Center"> 3 </th>
438 <th class="Center"> 4 </th>
439 <th class="Center"> 5 </th>
440 <th class="Center"> 6 </th>
441 <th class="Center"> 7 </th>
442 </tr>
443 <tr>
444 <th> C </th>
445 <td> 32,70 </td>
446 <td> 65,41 </td>
447 <td> 130,8 </td>
448 <td> 261,6 </td>
449 <td> 523,3 </td>
450 <td> 1046,5 </td>
451 <td> 2093,0 </td>
452 <td> 4186,0 </td>
453 </tr>
454 <tr>
455 <th> Cis </th>
456 <td> 34,65 </td>
457 <td> 69,30 </td>
458 <td> 138,6 </td>
459 <td> 277,2 </td>
460 <td> 554,4 </td>
461 <td> 1108,7 </td>
462 <td> 2217,5 </td>
463 <td> 4434,9 </td>
464 </tr>
465 <tr>
466 <th> D </th>
467 <td> 36,71 </td>
468 <td> 73,42 </td>
469 <td> 146,8 </td>
470 <td> 293,7 </td>
471 <td> 587,3 </td>
472 <td> 1174,7 </td>
473 <td> 2349,3 </td>
474 <td> 4698,6 </td>
475 </tr>
476 <tr>
477 <th> Dis </th>
478 <td> 38,89 </td>
479 <td> 77,78 </td>
480 <td> 155,6 </td>
481 <td> 311,1 </td>
482 <td> 622,3 </td>
483 <td> 1244,5 </td>
484 <td> 2489,0 </td>
485 <td> 4978,0 </td>
486 </tr>
487 <tr>
488 <th> E </th>
489 <td> 41,20 </td>
490 <td> 82,41 </td>
491 <td> 164,8 </td>
492 <td> 329,6 </td>
493 <td> 659,3 </td>
494 <td> 1318,5 </td>
495 <td> 2637,0 </td>
496 <td> 5274,0 </td>
497 </tr>
498 <tr>
499 <th> F </th>
500 <td> 43,65 </td>
501 <td> 87,31 </td>
502 <td> 174,6 </td>
503 <td> 349,2 </td>
504 <td> 698,5 </td>
505 <td> 1396,9 </td>
506 <td> 2793,8 </td>
507 <td> 5587,7 </td>
508 </tr>
509 <tr>
510 <th> Fis </th>
511 <td> 46,25 </td>
512 <td> 92,50 </td>
513 <td> 185,0 </td>
514 <td> 370,0 </td>
515 <td> 740,0 </td>
516 <td> 1480,0 </td>
517 <td> 2960,0 </td>
518 <td> 5919,9 </td>
519 </tr>
520 <tr>
521 <th> G </th>
522 <td> 49,00 </td>
523 <td> 98,00 </td>
524 <td> 196,0 </td>
525 <td> 392,0 </td>
526 <td> 784,0 </td>
527 <td> 1568,0 </td>
528 <td> 3136,0 </td>
529 <td> 6271,9 </td>
530 </tr>
531 <tr>
532 <th> Gis </th>
533 <td> 51,91 </td>
534 <td> 103,83 </td>
535 <td> 207,7 </td>
536 <td> 415,3 </td>
537 <td> 830,6 </td>
538 <td> 1661,2 </td>
539 <td> 3322,4 </td>
540 <td> 6644,9 </td>
541 </tr>
542 <tr>
543 <th> A </th>
544 <td> 55 </td>
545 <td> 110 </td>
546 <td> 220 </td>
547 <td> <b>440</b> </td>
548 <td> 880 </td>
549 <td> 1760 </td>
550 <td> 3520 </td>
551 <td> 7040 </td>
552 </tr>
553 <tr>
554 <th> Ais </th>
555 <td> 58,27 </td>
556 <td> 116,54 </td>
557 <td> 233,1 </td>
558 <td> 466,2 </td>
559 <td> 932,3 </td>
560 <td> 1864,7 </td>
561 <td> 3729,3 </td>
562 <td> 7458,6 </td>
563 </tr>
564 <tr>
565 <th> H </th>
566 <td> 61,74 </td>
567 <td> 123,47 </td>
568 <td> 246,9 </td>
569 <td> 493,9 </td>
570 <td> 987,8 </td>
571 <td> 1975,5 </td>
572 <td> 3951,1 </td>
573 <td> 7902,1 </td>
574 </tr>
575 <tr style='color:gray'>
576 <th> ( C ) </th>
577 <td> 65,41 </td>
578 <td> 130,81 </td>
579 <td> 261,6 </td>
580 <td> 523,3 </td>
581 <td> 1046,5 </td>
582 <td> 2093,0 </td>
583 <td> 4186,0 </td>
584 <td> 8372,0 </td>
585 </tr>
586 </table>
587  
588 <h1> Programové vybavení </h1>
589  
590 <h2> Uživatelský návod </h2>
591  
592 <h3> Přehrávání skladeb </h3>
593  
594 <p>
595 Při přehrávání není na J5 propojka. Hlasitost se nastavuje trimrem P1.
596 </p>
597  
598 <p>
599 Melodický zvonek začne hrát stiskem libovolného tlačítka (tlačítek).
600 Přestože jsou na desce jen 4 tlačítka, je možné do zvonku naprogramovat
601 až 15 skladeb. První čtyři jsou spuštěny přímo při stlačení jednoho
602 ze čtyř tlačítek, pro aktivaci dalších skladeb je nutné stisknout
603 několik tlačítek najednou dle následující tabulky.
604 </p>
605  
606 <table>
607 <tr>
608 <th> Číslo skladby </th>
609 <th> Kombinace tlačítek </th>
610 <th> Číslo skladby </th>
611 <th> Kombinace tlačítek </th>
612 </tr>
613 <tr>
614 <td> 1 </td>
615 <td> •&nbsp;o&nbsp;o&nbsp;o </td>
616 <td> 9 </td>
617 <td> o&nbsp;•&nbsp;o&nbsp;• </td>
618 </tr>
619 <tr>
620 <td> 2 </td>
621 <td> o&nbsp;•&nbsp;o&nbsp;o </td>
622 <td> 10 </td>
623 <td> o&nbsp;o&nbsp;•&nbsp;• </td>
624 </tr>
625 <tr>
626 <td> 3 </td>
627 <td> o&nbsp;o&nbsp;•&nbsp;o </td>
628 <td> 11 </td>
629 <td> •&nbsp;•&nbsp;•&nbsp;o </td>
630 </tr>
631 <tr>
632 <td> 4 </td>
633 <td> o&nbsp;o&nbsp;o&nbsp;• </td>
634 <td> 12 </td>
635 <td> •&nbsp;•&nbsp;o&nbsp;• </td>
636 </tr>
637 <tr>
638 <td> 5 </td>
639 <td> •&nbsp;•&nbsp;o&nbsp;o </td>
640 <td> 13 </td>
641 <td> •&nbsp;o&nbsp;•&nbsp;• </td>
642 </tr>
643 <tr>
644 <td> 6 </td>
645 <td> •&nbsp;o&nbsp;•&nbsp;o </td>
646 <td> 14 </td>
647 <td> o&nbsp;•&nbsp;•&nbsp;• </td>
648 </tr>
649 <tr>
650 <td> 7 </td>
651 <td> •&nbsp;o&nbsp;o&nbsp;• </td>
652 <td> 15 </td>
653 <td> •&nbsp;•&nbsp;•&nbsp;• </td>
654 </tr>
655 <tr>
656 <td> 8 </td>
657 <td> o&nbsp;•&nbsp;•&nbsp;o </td>
658 <td colspan="2"> •&nbsp;znamená&nbsp;stisknuto, o&nbsp;znamená&nbsp;v&nbsp;klidu </td>
659 </tr>
660 </table>
661  
662 <h3> Programování skladeb </h3>
663  
664 <p>
665 Při programování se používá propojka na J5 a definice skladeb se přivádí
666 z&nbsp;počítače ze sériové linky na konektor J4. Při rozběhu otestuje
667 program, zda je na J5 propojka a zda je připojen počítač ke konektoru J4.
668 Pokud ano, přejde do režimu programování. To se projeví zacvrdlikáním. Aby
669 se program správně spustil při připojení napájení, musí být napájení
670 odpojené alespoň 10 sekund. Pokud je nasazena propojka na J5 a nedojde
671 ke správnému zresetování procesoru, může dojít k&nbsp;poškození obsahu
672 paměti skladeb a skladby bude třeba znovu nahrát.
673 </p>
674  
675 <p>
676 Postup pro přechod do programovacího režimu:
677 </p>
678  
679 <ul>
680 <li> Odpojíme baterii a počkáme alespoň 10 sekund </li>
681 <li> Připojíme kabel RS232 k&nbsp;počítači </li>
682 <li> Připojíme baterii </li>
683 <li> Nasadíme propojku J5 </li>
684 <li> Stiskneme některé tlačítko a mělo by se ozvat zacvrdlikání</li>
685 </ul>
686  
687 <p>
688 Pro přenos dat do zvonku je možné použít téměř libovolný terminálový program.
689 Parametry přenosu dat do zvonku jsou 9600Bd, 8bitů, 1stopbit, žádná parita.
690 Řízení přenosu se nepoužívá. Protože data procesor zapisuje do své paměti
691 programu, nemůže číst další data, než dokončí zápis předchozích. Proto
692 je nutné nastavit časovou prodlevu mezi řádky na cca 100ms.
693 Přenos je jen jednosměrný, zvonek neumí odesílat žádné informace sériovou
694 linkou směrem k&nbsp;počítači. Má pouze propojené signály RX a TX tak, aby
695 znaky odesílané do zvonku byly zobrazované na displeji terminálu.
696 </p>
697  
698 <p>
699 Pro propojení s&nbsp;počítačem se používá nulmodemový kabel (tedy křížený,
700 spojení RX-TX, TX-RX).
701 </p>
702  
703 <p>
704 V&nbsp;prostředí Windows 98 je k&nbsp;dispozici program Hyperterminál
705 (Start/Programy/Příslušenství/Komunikace/Hyperterminál). Pokud není,
706 znamená to, že nebyl nainstalován, a je možné nainstalovat jej dodatečně
707 nebo použít nějaký jiný terminálový program. Hyperterminál nás na úvod
708 vyzve k&nbsp;nastavení základních komunikačních parametrů (9600Bd, 8,
709 žádná, 1, žádné). Dále je třeba nastavit
710 (Soubor/Vlastnosti/Nastavení/Nastavení ASCII)
711 zpoždění řádků 100ms.
712 </p>
713  
714 <p>
715 V&nbsp;této chvíli bychom měli vidět znaky psané na klávesnici v&nbsp;okně
716 terminálu. Pokud je zvonek v&nbsp;režimu programování, měl by krátce pípnout
717 při každém stisku odřádkování. Znamená to, že reaguje na posílaná data.
718 Nyní již nic nebrání ručnímu ovládání.
719 </p>
720  
721 <p>
722 Větší množství dat (například celou melodii) je vhodné připravit
723 do samostatného souboru a ten pak přes schránku vložit do terminálu
724 (u Hyperterminálu pravé tlačítko, funkce Vložit k&nbsp;hostiteli). Většina
725 terminálových programů umí i přímo odeslat textový soubor protistraně, ale
726 Hyperterminál to neumí.
727 </p>
728  
729 <h3> Příkazy a formát dat pro programování skladeb </h3>
730  
731 <p>
732 Procesor vždy nejprve převezme celou řádku a poté se ji snaží zpracovat.
733 Pokud řádce nerozumí, pípne odlišně. Z řádky se uvažuje jen prvních 40 znaků.
734 Text za „//“ je komentář. Komentář může být libovolně dlouhý.
735 </p>
736  
737 <p>
738 Klíčová slova a jejich význam je v&nbsp;následující tabulce. Parametry jsou
739 malá přirozená čísla v&nbsp;uvedeném rozsahu. Pokud je zadáno číslo větší,
740 zvonek  použije jen odpovídající spodní bity čísla.
741 </p>
742  
743 <table>
744 <tr>
745 <th> Klíčová slova a&nbsp;parametry </th>
746 <th> Meze </th>
747 <th> Význam </th>
748 </tr>
749 <tr>
750 <td> <code>PLAY <b>n</b></code> </td>
751 <td> <code><b>n</b>: 1 .. 15</code> </td>
752 <td> Zahraj skladbu <code><b>n</b></code> </td>
753 </tr>
754 <tr>
755 <td> <code>ERASE</code> </td>
756 <td> </td>
757 <td> Smaž všechny skladby </td>
758 </tr>
759 <tr>
760 <td> <code>BEGIN <b>n</b></code> </td>
761 <td> <code><b>n</b>: 0 .. 7</code> </td>
762 <td> Začátek definice skladby; číslo udává posunutí skladby o udaný počet
763 oktáv nahoru </td>
764 </tr>
765 <tr>
766 <td> <code>TEST <b>n</b></code> </td>
767 <td> <code><b>n</b>: 0 .. 7</code> </td>
768 <td> Jako <code>BEGIN</code>, ale následující noty nejsou programovány
769 do paměti, ale přehrávány </td>
770 </tr>
771 <tr>
772 <td> <code>TEMPO <b>n</b></code> </td>
773 <td> <code><b>n</b>: 1 .. 2047</code> </td>
774 <td> Délka nejkratší noty v&nbsp;ms; není-li použito, je nastaveno na 100ms;
775 může se použít vícekrát v&nbsp;jedné skladbě </td>
776 </tr>
777 <tr>
778 <td> <code>PAUSE <b>n</b></code> </td>
779 <td> <code><b>n</b>: 1 .. 2047</code> </td>
780 <td> Délka prodlevy mezi notami; není-li použito, je nastaveno na 100ms;
781 může se použít vícekrát v&nbsp;jedné skladbě </td>
782 </tr>
783 <tr>
784 <td> <code>[<b>a</b>]<b> C</b> [<b>b</b>]</code> </td>
785 <td> <code><b>a</b>: 0 .. 7<br></code>
786 <code><b>C</b>: C, Cis, D, Dis, E, F, Fis, <br></code>
787 <code> G, Gis, A, Ais, H, Space<br></code>
788 <code><b>b</b>: 1 .. 63</code> </td>
789 <td> Číslo oktávy (sečítá se s&nbsp;parametrem u <code>BEGIN</code>); není-li
790 uvedeno, použije se poslední hodnota<br>
791 Nota <code><b>C</b></code> v&nbsp;oktávě <code><b>a</b></code> o délce
792 <code><b>b</b></code>; Space je němá nota (mezera)<br>
793 Délka je v&nbsp;násobcích parametru <code>TEMPO</code>, není-li uvedena, je 1 </td>
794 </tr>
795 <tr>
796 <td> <code>END</code> </td>
797 <td> </td>
798 <td> Konec skladby, další noty již budou pouze přehrávány </td>
799 </tr>
800 <tr>
801 <td> / text </td>
802 <td> </td>
803 <td> Komentář; vše za znakem / do konce řádky se ignoruje </td>
804 </tr>
805 <tr>
806 <td colspan=3> <i>Znaky <code>[</code> a <code>]</code> znamenají volitelný parametr</i> </td>
807 </tr>
808 </table>
809  
810 <h2> Program </h2>
811  
812 <p>
813 Program melodického zvonku je napsaný v&nbsp;jazyce C firmy CCS.
814 Demoverze překladače je možné stáhnout z&nbsp;webu na adresa
815 <a href="http://www.ccsinfo.com/">http://www.ccsinfo.com</a>.
816 Demoverze podporuje jen vybrané procesory (obvykle několik typů)
817 a umožňuje napsat program v&nbsp;omezeném rozsahu (do 2048 slov).
818 </p>
819  
820 <p>
821 Program je bohatě komentovaný  a dostupný, je tedy snadné se s ním seznámit.
822 Vzhledem k&nbsp;omezeným zdrojům použitého procesoru používá program v&nbsp;hojné
823 míře globálních proměnných, protože to vede na kód kratší asi o 10%.
824 Některé programové konstrukce také vypadají na první pohled nelogicky,
825 ale jsou voleny s&nbsp;ohledem na&nbsp;dosažení minimální délky výsledného
826 kódu. Je třeba si uvědomit, že použitý překladač jazyka C patří k&nbsp;těm
827 nejlevnějším, a proto neumí generovat příliš optimalizovaný kód.
828 </p>
829  
830 <h3> Hlavní program a základní procedury </h3>
831  
832 <h4>main()</h4>
833  
834 <p>
835 Na začátku se hlavní program rozhoduje podle přítomnosti propojky na J5
836 a podle přítomnosti klidového signálu na RS232, zda má přejít do režimu
837 programování skladeb. Pokud ano, spustí se procedura Download().
838 </p>
839  
840 <p>
841 Pokud není v programovacím režimu, zapíná procesor napájení sobě a zesilovači
842 LM386 a po krátké prodlevě načítá stav tlačítek. Pak volá proceduru <code>Play()</code>,
843 která na základě čísla skladby v&nbsp;proměnné <code>CisloSkladby</code>
844 přehraje požadovanou skladbu.
845 </p>
846  
847 <p>
848 Následuje přechod do vypnutého stavu.
849 </p>
850  
851 <h4>Download()</h4>
852  
853 <p>
854 Tato procedura načítá nejprve celou řádku z&nbsp;RS232. Znaky mezera, čárka
855 a všechny řídící znaky kromě <code>CR</code> (odřádkování) a <code>BS</code>
856 (znak zpět) se chápou jako oddělovač (mezera). Znak <code>BS</code> umožňuje
857 návrat o 1 znak zpět. Znaky za znakem lomeno se&nbsp;ignorují stejně, jako
858 znaky za maximální délkou řádky.
859 </p>
860  
861 <p>
862 Po stisku <code>CR</code> se postupně zpracuje celá řádka. Hledají se
863 v&nbsp;ní klíčová slova (procedura <code>Word()</code>) a&nbsp;číselné parametry
864 (procedura <code>Number()</code>). Vyskytne-li se chybné slovo, dojde
865 k&nbsp;nastavení příznaku <code>Error</code> a na konci řádky místo krátkého
866 pípnutí dojde k&nbsp;chybovému pípnutí.
867 </p>
868  
869 <p>
870 Klíčová slova, tak jak jsou na řádce, se ihned vykonávají. Tedy noty hrají,
871 slova <code>TEMPO</code>, <code>PAUSE</code>, <code>PLAY</code>, <code>ERASE</code>
872 a <code>TEST</code> dělají přímo to, co dělat mají. Tato vlastnost
873 slouží k&nbsp;testování melodií či jejich úryvků aniž by se musely zapisovat
874 do paměti FLASH.
875 </p>
876  
877 <p>
878 Po slovu <code>BEGIN</code> se přejde do režimu záznamu do paměti a od
879 tohoto okamžiku se vše zaznamenává do paměti. Tento režim končí slovem <code>END</code>
880 (ale také slovy <code>ERASE</code>, <code>TEST</code> nebo <code>PLAY</code>).
881 </p>
882  
883 <p>
884 Pokud se během zpracování řádky odehrála alespoň jedna nota, nedojde na konci
885 řádky k&nbsp;pípnutí (pokud ovšem nebyla někde na řádce chyba).
886 </p>
887  
888 <h4> Play(), PlayData(), Find()</h4>
889  
890 <p>
891 Tyto procedury slouží k&nbsp;přehrání celé skladby, jedné noty a k&nbsp;nalezení
892 začátku zadaného čísla skladby.
893 </p>
894  
895 <h4> WriteDataInc(), WriteData, ReadData(), Erase() </h4>
896  
897 <p>
898 Tyto procedury slouží k&nbsp;zápisu, čtení a k&nbsp;mazání paměti skladeb.
899 K&nbsp;zápisu nebo ke smazání může dojít jen pokud je nasazena propojka na J5.
900 </p>
901  
902 <h4> SpecBeep()</h4>
903  
904 <p>
905 Tato procedura slouží k&nbsp;pípnutí dle parametru v&nbsp;proměnných
906 <code>Beep</code> a <code>Error</code>.
907 </p>
908  
909 <h3> Knihovna pro generování zvuků <code>Sound_t1.c</code> </h3>
910  
911 <p>
912 Tato knihovna používá časovač T1 spolu s&nbsp;jednotkou CCP1 ke generování
913 přerušení dle požadované půlperiody hraného tónu. V&nbsp;přerušovací rutině
914 <code>IntCCP1()</code> se pak ovládá výstupní port.
915 </p>
916  
917 <p>
918 Délka tónu se odměřuje pomocí přetečení časovače T0. Přetečení se zjišťuje
919 čtením příznaku T0IF, přerušení se zde nepoužívá.
920 </p>
921  
922 <h3> Definice skladeb <code>Data.c</code> </h3>
923  
924 <p>
925 Skladby se ukládají v&nbsp;poslední čtvrtině paměti FLASH a kódují se dle
926 následující tabulky.
927 </p>
928  
929 <table>
930 <tr>
931 <th> Slovo </th>
932 <th> Kód </th>
933 <th> Poznámka </th>
934 </tr>
935 <tr>
936 <td> <code>BEGIN n</code> </td>
937 <td> <code>1 0   0 n n n   n n n n   n n n n</code> </td>
938 <td> Začátek skladby a posunutí oktávy not skladby o <code><b>n</b></code> </td>
939 </tr>
940 <tr>
941 <td> <code>TEMPO n</code> </td>
942 <td> <code>1 0   1 n n n   n n n n   n n n n</code> </td>
943 <td> Změna tempa na <code><b>n</b></code> milisekund </td>
944 </tr>
945 <tr>
946 <td> <code>PAUSE n</code> </td>
947 <td> <code>1 1   0 n n n   n n n n   n n n n</code> </td>
948 <td> Změna mezery mezi notami na <code><b>n</b></code> milisekund </td>
949 </tr>
950 <tr>
951 <td> <code>o n d</code> </td>
952 <td> <code>0 d   d d d d   d o o o   n n n n</code> </td>
953 <td> Nota <code><b>n</b></code> v&nbsp;oktávě <code><b>o</b></code> délky <code><b>d</b></code> </td>
954 </tr>
955 <tr>
956 <td> <code>END</code> </td>
957 <td> <code>1 1   1 1 1 1   1 1 1 1   1 1 1 1</code> </td>
958 <td> Konec skladeb, prázdná paměť </td>
959 </tr>
960 </table>
961  
962 <p>
963 Aby se dalo použít stejného souboru s&nbsp;definicí skladby jak pro začlenění
964 skladby do firmwaru tak i pro programování přes RS232, jsou v&nbsp;souboru
965 <code>Data.c</code> nadefinována makra, která toto umožňují. Definice
966 skladby, která má být začleněna do firmwaru musí, používat čárky jako
967 oddělovače jednotlivých položek a číselné parametry není možné vynechávat.
968 Příklady skladeb napoví vše.
969 </p>
970  
971 </div>
972  
973 <!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE -->
974 <!-- ============== PATIČKA ============== -->
975 <div class="Footer">
976 <script type="text/javascript">
977 <!--
978 SetRelativePath("../../../../");
979 DrawFooter();
980 // -->
981 </script>
982 <noscript>
983 <p><b> Pro zobrazení (vložení) hlavičky je potřeba JavaScript </b></p>
984 </noscript>
985 </div>
986 <!-- AUTOINCLUDE END -->
987  
988 </body>
989 </html>