<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title> MB01B </title>
<meta name="keywords" content="stavebnice MLAB melodický zvonek">
<meta name="description" content="Projekt MLAB, Programovatelný melodický zvonek">
<!-- AUTOINCLUDE START "Page/Head.cs.ihtml" DO NOT REMOVE -->
<link rel="StyleSheet" href="../../../../Web/CSS/MLAB.css" type="text/css" title="MLAB základnà styl">
<link rel="StyleSheet" href="../../../../Web/CSS/MLAB_Print.css" type="text/css" media="print">
<link rel="shortcut icon" type="image/x-icon" href="../../../../Web/PIC/MLAB.ico">
<script type="text/javascript" src="../../../../Web/JS/MLAB_Menu.js"></script>
<!-- AUTOINCLUDE END -->
</head>
<body lang="cs">
<!-- AUTOINCLUDE START "Page/Header.cs.ihtml" DO NOT REMOVE -->
<!-- ============== HLAVICKA ============== -->
<div class="Header">
<script type="text/javascript">
<!--
SetRelativePath("../../../../");
DrawHeader();
// -->
</script>
<noscript>
<p><b> Pro zobrazenà (vloženÃ) hlaviÄky je potÅeba JavaScript </b></p>
</noscript>
</div>
<!-- AUTOINCLUDE END -->
<!-- AUTOINCLUDE START "Page/Menu.cs.ihtml" DO NOT REMOVE -->
<!-- ============== MENU ============== -->
<div class="Menu">
<script type="text/javascript">
<!--
SetRelativePath("../../../../");
DrawMenu();
// -->
</script>
<noscript>
<p><b> Pro zobrazenà (vloženÃ) menu je potÅeba JavaScript </b></p>
</noscript>
</div>
<!-- AUTOINCLUDE END -->
<!-- ============== TEXT ============== -->
<div class="Text">
<p class="Title">
Melodický zvonek
</p>
<p class=Autor>
Milan Horkel
</p>
<p class="Subtitle">
Melodický zvonek MB01 použÃvá pro generovánà hudebnÃch
tónů procesor PIC16F819 a umožÅuje snadné pÅeprogramovánà melodiÃ. Zvonek je
možno napájet z baterie, protože v klidu neodebÃrá prakticky žádný
proud. Na výstup je možné pÅipojit reproduktor.
</p>
<p class="Subtitle">
<img width=290 height=235 src="Pictures/image001.jpg"
alt="Obrázek melodického zvonku">
</p>
<p>
<a href="../MB01B.cs.pdf"><img class="NoBorder"
src="../../../../Web/PIC/FileIco_PDF.ico"
alt="Acrobat"> PDF verze</a>
</p>
<h1> Technické parametry </h1>
<table>
<tr>
<th> Parametr </th>
<th> Hodnota </th>
<th> Poznámka </th>
</tr>
<tr>
<td> Napájenà </td>
<td> 9V </td>
<td> Asi od 4V, maximum 12V </td>
</tr>
<tr>
<td> SpotÅeba v klidu </td>
<td> â0 </td>
<td> Dáno zbytkovým proudem tranzistorů Q2 a Q3 </td>
</tr>
<tr>
<td> SpotÅeba pÅi bÄhu (potichu) </td>
<td> 20mA / 30mA </td>
<td> PÅi 9V / 12V </td>
</tr>
<tr>
<td> SpotÅeba maximálnÄ (nahlas) </td>
<td> 150mA </td>
<td> PÅi 12V </td>
</tr>
<tr>
<td> PoÄet melodià </td>
<td> Max 15 </td>
<td> VÅ¡echny možné kombinace 4 tlaÄÃtek </td>
</tr>
<tr>
<td> Délka skladeb celkem </td>
<td> 512 </td>
<td> PoÄÃtajà se noty, mezery a zmÄny parametrů (napÅÃklad tempa) </td>
</tr>
<tr>
<td> SpouÅ¡tÄnà skladeb </td>
<td> 4 tlaÄÃtka </td>
<td> Skladby od páté výše se spouÅ¡tÄjà stiskem vÃce tlaÄÃtek najednou </td>
</tr>
<tr>
<td> RozmÄry </td>
<td> 61x71x20mm </td>
<td> Bez pÅeÄnÃvajÃcÃho konektoru a Å¡roubů </td>
</tr>
</table>
<h1> Popis konstrukce </h1>
<h2> Slovo úvodem </h2>
<p>
CÃlem návrhu tohoto melodického zvonku bylo navrhnout modernà ÅeÅ¡enÃ,
se kterým i ménÄ vybavený amatér může nÄco dále dÄlat. DÃky pokroku
v technologii výroby integrovaných obvodů se v poslednà dobÄ
zaÄÃnajà objevovat velmi zajÃmavé mikroÅadiÄe (jednoÄipové mikropoÄÃtaÄe)
za velmi rozumnou cenu. Zde byl použit jeden z nich, jmenuje se
PIC16F819 a vyrábà jej firma MICROCHIP.
</p>
<p>
Procesor je pomÄrnÄ rychlý (5 miliónů instrukcà za sekundu), má malou
spotÅebu (cca 2mA za plného bÄhu) a funguje v Å¡irokém rozsahu napájenÃ
(od 2V do 5.5V). Je tedy velmi vhodný pro zaÅÃzenà napájené z baterie.
KromÄ toho má FLASH pamÄÅ¥ programu (2048 slov po 14 bitech), kterou je
možné mnohokrát pÅeprogramovat. Procesor může tuto pamÄÅ¥ FLASH sám
pÅeprogramovat.
</p>
<p>
Äást pamÄti programu je vyhrazena pro uloženà melodià a je tak možné
dodateÄnÄ melodie mÄnit. Nenà k tomu potÅeba žádný speciálnÃ
programátor, staÄà pÅipojit obyÄejné PC. Nové definice skladeb se
pÅenášejà do melodického zvonku prostÅednictvÃm sériové linky RS232.
Aby nemohlo dojÃt k nechtÄnému smazánà programu, je Äást pamÄti
FLASH procesoru uzamÄena, aby ji procesor nemohl pÅepsat.
</p>
<h2> Zapojenà melodického zvonku </h2>
<p>
<img width=486 height=888 src="Pictures/image003.gif"
alt="">
</p>
<h3> Procesor a obvody jeho napájenÃ</h3>
<p>
Srdcem zvonku je procesor U1. Äasovánà je ÅÃzeno krystalem X1. Aby bylo
možno procesor naprogramovat pÅÃmo v zapojenÃ, je zde programovacÃ
konektor J6, který sloužà pro naprogramovánà programu.
V bÄžném provozu ani pÅi pÅeprogramovávánà melodià již nenà tÅeba.
</p>
<p>
Zvonek zaÄÃná hrát po stisku nÄkterého tlaÄÃtka (nebo vÃce najednou).
PÅi stlaÄenà tlaÄÃtka se pÅes diody D3 až D6 pÅivede zemnà potenciál
na vstupy procesoru. Vstupnà nožiÄky procesoru jsou opatÅeny ochrannými
diodami (jsou uvnitÅ procesoru) a pÅes tyto diody dojde k pÅipojenÃ
zemnÃho potenciálu i signálu GND_PIC. TÃm dojde k tomu, že procesor
je napájen (pÅes odpor R1) a jeho program se rozbÄhne. Protože procesor
snese maximálnÄ 5.5V, je velikost napájecÃho napÄtà mezi vývody GND a VDD
procesoru omezeno Zenerovou diodou D2 na cca 5V.
</p>
<p>
Po rozbÄhu programu se nejdÅÃve aktivuje signál POWER_ON# (do stavu L)
a pÅes Q1 a Q2 se pÅipojà GND_PIC na zem. Po skonÄenà melodie se signál
POWER_ON# deaktivuje (pÅejde do tÅetÃho stavu) a procesor tak sám sobÄ
vypne napájenÃ. TÃm je zajiÅ¡tÄna prakticky nulová klidová spotÅeba.
</p>
<p>
Na vývodu RB3 procesoru generuje program výstupnà signál (aÅ¥ už pÅÃmo
digitálnÄ nebo pomocà PWM) a na vstupu RB1 oÄekává sériová data
z poÄÃtaÄe pÅi pÅeprogramovávánà melodiÃ. PÅestože RS232 signály jsou
v rozsahu +/- 5 až +/-15V, je možné tyto signály pÅipojit pÅÃmo
ke vstupu pouze pÅes omezovacà odpor R7. Ochranné diody na vstupu procesoru
ochránà vstupnà tranzistory pÅed napÄtÃm nad a pod napájecÃm napÄtÃm
procesoru. Odpor R8 zajišťuje definovanou úroveÅ na vstupu, pokud nenÃ
nic pÅipojeno.
</p>
<p>
Propojka PGM MODE (J5) sloužà k vynucenému zapnutà napájenÃ
v dobÄ programovánà nových melodià i v dobÄ programovánÃ
programu do procesoru pÅes ISP konektor (J6) . Program pÅed vlastnÃm
programovánÃm pamÄti FLASH kontroluje, že je tato propojka nasunuta,
a je tak zajiÅ¡tÄno, že ani pÅi vybité baterii nemůže prakticky dojÃt
ke smazánà melodie. Ke smazánà programu nemůže dojÃt nikdy, protože tato
Äást pamÄti programu je chránÄna nastavenÃm ochranných bitů konfiguraÄnÃho
slova a procesor sám sobÄ tuto pamÄÅ¥ nemůže pÅepsat.
</p>
<h3> NF ZesilovaÄ </h3>
<p>
Jako koncový zesilovaÄ byl použit obvod LM386 v klasickém zapojenÃ.
Jeho napájenà je spÃnáno tranzistorem Q3 jen po dobu hranà melodie.
Tranzistor Q3 je buzen vývodem RA4 procesoru PIC.
</p>
<h2> Mechanická konstrukce </h2>
<p>
Melodický zvonek je sestaven na jednostranném ploÅ¡ném spoji se ÄtyÅmi
upevÅovacÃmi otvory v rozÃch. Podél kratšà strany jsou 4 tlaÄÃtka
pro spouÅ¡tÄnà melodiÃ. Ke konektoru J3 je možné pÅipojit vnÄjšà tlaÄÃtka.
MÃsto odporového trimru P1 je možné pÅipojit (logaritmický) potenciometr
jako regulátor hlasitosti.
</p>
<h2> Osazenà a oživenà </h2>
<h3> Osazenà </h3>
<p>
PÅi osazovánà je tÅeba dodržet polarity diod, tranzistorů a elektrolytických
kondenzátorů. Pokud jsou použity funkÄnà souÄástky a jsou správnÄ osazeny,
mÄlo by zaÅÃzenà fungovat na prvnà pokus. PodmÃnkou je použità naprogramovaného
procesoru.
</p>
<h3> Oživenà </h3>
<p>
Nejprve zkontrolujeme polaritu ochranné diody D1 a vizuálnÄ zkontrolujeme
zejména zkraty. Procesor i zesilovaÄ můžeme zasunout do patic. Pokud si
troufáme, můžeme je pÅipájet pÅÃmo do desky.
</p>
<p>
Pokud máme procesor pÅedem naprogramovaný, je oživenà snazÅ¡Ã, protože by
zvonek mÄl rovnou zaÄÃt fungovat. Nejprve pÅipojÃme zdroj o napÄtà cca 5V
s omezenÃm proudu (asi na 100mA). UjistÃme se, že <b>nenÃ</b>
nasunuta propojka na J5. V klidu by zvonek nemÄl odebÃrat prakticky
žádný proud. Po stisku tlaÄÃtka by mÄl zvonek hrát nÄkterou
z pÅedprogramovaných melodiÃ. Pokud hraje, postupnÄ zvyÅ¡ujeme napájecÃ
napÄtà až na cca 10V a pÅitom kontrolujeme, zda napájecà napÄtà procesoru
(nejsnáze se mÄÅà na ZenerovÄ diodÄ D2) nepÅekroÄà 5.5V.
</p>
<p>
Pokud nehraje je tÅeba zkontrolovat toto:
</p>
<ul>
<li> napájenà na procesoru pÅi stisku tlaÄÃtka (dioda D2) â cca 3 až 5V, </li>
<li> zda kmitá oscilátor procesoru â logickou sondou na vývodu CLKO procesoru, </li>
<li> zda fungujà tlaÄÃtka â napÄtà na RB4 a RB7 klesá k nule pÅi stisku tlaÄÃtka, </li>
<li> zda spÃnajà tranzistory Q1 a Q2 â pÅi nasunuté propojce na J5, </li>
<li> zda procesor generuje zvuk - na RB3 telefonnÃm sluchátkem nebo piezoelementem proti zemi, </li>
<li> zda spÃná Q3 napÄtà pro zesilovaÄ U2. </li>
</ul>
<p>
Po skonÄenà skladby by se zvonek mÄl opÄt vypnout a nemÄl by odebÃrat žádný proud.
</p>
<p>
Pokud procesor nemáme nahraný, osadÃme jej do zvonku, <b>nasuneme</b>
propojku na J5 a zkontrolujeme pÅi postupném zvyÅ¡ovánà napájecÃho napÄtÃ,
zda na procesoru (D2) je napÄtà cca 5V. Pokud ano, je možno ke konektoru J6
pÅipojit programátor a nahrát do procesoru program. Propojku J5 opÄt vyjmeme.
Zbytek oživovánà je stejný.
</p>
<p>
<img width=432 height=346 src="Pictures/image002.jpg"
alt="Osazovák">
</p>
<table class="Soupiska">
<tr>
<th> Reference </th>
<th> Hodnota </th>
<th> Reference </th>
<th> Hodnota </th>
</tr>
<tr>
<th colspan="2"> Odpory </th>
<th colspan="2"> PolovodiÄe a krystaly </th>
</tr>
<tr>
<td> R15 </td>
<td> 10 </td>
<td> D1 </td>
<td> 1N4005 </td>
</tr>
<tr>
<td> R4,R1 </td>
<td> 680 </td>
<td> D3,D4,D5,D6 </td>
<td> 1N4148 </td>
</tr>
<tr>
<td> R11 </td>
<td> 2k2 </td>
<td> D2 </td>
<td> BZX83V005.1 </td>
</tr>
<tr>
<td> R2,R3,R5,R6,R9,R10,R13,R14 </td>
<td> 10k </td>
<td> Q1 </td>
<td> BC327 </td>
</tr>
<tr>
<td> R7,R12 </td>
<td> 27k </td>
<td> Q2 </td>
<td> BC337 </td>
</tr>
<tr>
<td> R8 </td>
<td> 100k </td>
<td> Q3 </td>
<td> BC640 </td>
</tr>
<tr>
<th colspan="2"> Odporové trimry </th>
<td> U1 </td>
<td> PIC16F819-I/P </td>
</tr>
<tr>
<td> P1 </td>
<td> 10k </td>
<td> U2 </td>
<td> LM386 </td>
</tr>
<tr>
<th colspan="2"> Kondenzátory </th>
<td> X1 </td>
<td> 20MHz </td>
</tr>
<tr>
<td> C4,C5 </td>
<td> 22pF </td>
<th colspan="2"> Mechanické souÄásti </th>
</tr>
<tr>
<td> C14 </td>
<td> 4n7 </td>
<td> SW1,SW2,SW3,SW4 </td>
<td> P-B1720 </td>
</tr>
<tr>
<td> C3,C6,C7,C8,C9 </td>
<td> 10nF </td>
<td> J1,J2 </td>
<td> JUMP3 </td>
</tr>
<tr>
<td> C15,C16 </td>
<td> 33nF </td>
<td> J3 </td>
<td> JUMP5 </td>
</tr>
<tr>
<td> C1,C2,C10 </td>
<td> 100nF </td>
<td> J5 </td>
<td> JUMP2 </td>
</tr>
<tr>
<td> C13 </td>
<td> 1M/63V </td>
<td> J6 </td>
<td> PIC_ISP </td>
</tr>
<tr>
<td> C12 </td>
<td> 47uF/16V </td>
<td> J4 </td>
<td> DB9M_90 </td>
</tr>
<tr>
<td> C11,C17 </td>
<td> 330uF/16V </td>
<td> </td>
<td> </td>
</tr>
</table>
<h1> Trocha hudebnà teorie </h1>
<p>
Aby hudba znÄla libozvuÄnÄ (pÅÃjemnÄ), je tÅeba, aby použÃvané tóny
ve stupnicÃch splÅovaly podmÃnku, že jejich frekvence majà (malý)
spoleÄný násobek. NapÅÃklad dvojnásobek jednoho tónu aby byl
trojnásobkem jiného tónu. Takových stupnic lze skonstruovat mnoho.
Aby bylo možné na klavÃr (nebo podobný nástroj, který umà vyrábÄt
jen urÄité konkrétnà tóny) hrát skladby komponované v různých
stupnicÃch bez pÅelaÄovánà nástroje, použÃvá se tzv. temperované ladÄnÃ.
Temperované ladÄnà nenà ideálnÃ, jedná se o kompromis hÅeÅ¡Ãcà na to,
že lidský sluch nenà dokonalý.
</p>
<p>
Temperované ladÄnà spoÄÃvá v tom, že se oktáva rozdÄlà na 12 stejných
dÃlů, které majà geometrický odstup frekvencà tónů. Oktáva zahrnuje frekvence
v rozsahu 1:2 a je v nà celkem 7 tónů a 5 půltónů.
Z toho vyplývá, že pomÄr sousednÃch tónů a půltónů je vždy stejný a je
roven 2<sup>1/12</sup>, tedy pÅibližnÄ 1:1.06 .
</p>
<p>
NásledujÃcà tabulka uvádà pro jednotlivé tóny jejich frekvence.
Vycházà se z frekvence komornÃho A, která je 440Hz. Tóny o
oktávu výš majà frekvence dvakrát vyššÃ, a naopak tóny o oktávu nÞ majÃ
frekvence poloviÄnÃ.
</p>
<table>
<tr>
<th> â Tón </th>
<th colspan="8" class="Center"> Frekvence [Hz]</th>
</tr>
<tr>
<th> Oktáva â</th>
<th class="Center"> 0 </th>
<th class="Center"> 1 </th>
<th class="Center"> 2 </th>
<th class="Center"> 3 </th>
<th class="Center"> 4 </th>
<th class="Center"> 5 </th>
<th class="Center"> 6 </th>
<th class="Center"> 7 </th>
</tr>
<tr>
<th> C </th>
<td> 32,70 </td>
<td> 65,41 </td>
<td> 130,8 </td>
<td> 261,6 </td>
<td> 523,3 </td>
<td> 1046,5 </td>
<td> 2093,0 </td>
<td> 4186,0 </td>
</tr>
<tr>
<th> Cis </th>
<td> 34,65 </td>
<td> 69,30 </td>
<td> 138,6 </td>
<td> 277,2 </td>
<td> 554,4 </td>
<td> 1108,7 </td>
<td> 2217,5 </td>
<td> 4434,9 </td>
</tr>
<tr>
<th> D </th>
<td> 36,71 </td>
<td> 73,42 </td>
<td> 146,8 </td>
<td> 293,7 </td>
<td> 587,3 </td>
<td> 1174,7 </td>
<td> 2349,3 </td>
<td> 4698,6 </td>
</tr>
<tr>
<th> Dis </th>
<td> 38,89 </td>
<td> 77,78 </td>
<td> 155,6 </td>
<td> 311,1 </td>
<td> 622,3 </td>
<td> 1244,5 </td>
<td> 2489,0 </td>
<td> 4978,0 </td>
</tr>
<tr>
<th> E </th>
<td> 41,20 </td>
<td> 82,41 </td>
<td> 164,8 </td>
<td> 329,6 </td>
<td> 659,3 </td>
<td> 1318,5 </td>
<td> 2637,0 </td>
<td> 5274,0 </td>
</tr>
<tr>
<th> F </th>
<td> 43,65 </td>
<td> 87,31 </td>
<td> 174,6 </td>
<td> 349,2 </td>
<td> 698,5 </td>
<td> 1396,9 </td>
<td> 2793,8 </td>
<td> 5587,7 </td>
</tr>
<tr>
<th> Fis </th>
<td> 46,25 </td>
<td> 92,50 </td>
<td> 185,0 </td>
<td> 370,0 </td>
<td> 740,0 </td>
<td> 1480,0 </td>
<td> 2960,0 </td>
<td> 5919,9 </td>
</tr>
<tr>
<th> G </th>
<td> 49,00 </td>
<td> 98,00 </td>
<td> 196,0 </td>
<td> 392,0 </td>
<td> 784,0 </td>
<td> 1568,0 </td>
<td> 3136,0 </td>
<td> 6271,9 </td>
</tr>
<tr>
<th> Gis </th>
<td> 51,91 </td>
<td> 103,83 </td>
<td> 207,7 </td>
<td> 415,3 </td>
<td> 830,6 </td>
<td> 1661,2 </td>
<td> 3322,4 </td>
<td> 6644,9 </td>
</tr>
<tr>
<th> A </th>
<td> 55 </td>
<td> 110 </td>
<td> 220 </td>
<td> <b>440</b> </td>
<td> 880 </td>
<td> 1760 </td>
<td> 3520 </td>
<td> 7040 </td>
</tr>
<tr>
<th> Ais </th>
<td> 58,27 </td>
<td> 116,54 </td>
<td> 233,1 </td>
<td> 466,2 </td>
<td> 932,3 </td>
<td> 1864,7 </td>
<td> 3729,3 </td>
<td> 7458,6 </td>
</tr>
<tr>
<th> H </th>
<td> 61,74 </td>
<td> 123,47 </td>
<td> 246,9 </td>
<td> 493,9 </td>
<td> 987,8 </td>
<td> 1975,5 </td>
<td> 3951,1 </td>
<td> 7902,1 </td>
</tr>
<tr style='color:gray'>
<th> ( C ) </th>
<td> 65,41 </td>
<td> 130,81 </td>
<td> 261,6 </td>
<td> 523,3 </td>
<td> 1046,5 </td>
<td> 2093,0 </td>
<td> 4186,0 </td>
<td> 8372,0 </td>
</tr>
</table>
<h1> Programové vybavenà </h1>
<h2> Uživatelský návod </h2>
<h3> PÅehrávánà skladeb </h3>
<p>
PÅi pÅehrávánà nenà na J5 propojka. Hlasitost se nastavuje trimrem P1.
</p>
<p>
Melodický zvonek zaÄne hrát stiskem libovolného tlaÄÃtka (tlaÄÃtek).
PÅestože jsou na desce jen 4 tlaÄÃtka, je možné do zvonku naprogramovat
až 15 skladeb. Prvnà ÄtyÅi jsou spuÅ¡tÄny pÅÃmo pÅi stlaÄenà jednoho
ze ÄtyÅ tlaÄÃtek, pro aktivaci dalÅ¡Ãch skladeb je nutné stisknout
nÄkolik tlaÄÃtek najednou dle následujÃcà tabulky.
</p>
<table>
<tr>
<th> ÄÃslo skladby </th>
<th> Kombinace tlaÄÃtek </th>
<th> ÄÃslo skladby </th>
<th> Kombinace tlaÄÃtek </th>
</tr>
<tr>
<td> 1 </td>
<td> ⢠o o o </td>
<td> 9 </td>
<td> o ⢠o ⢠</td>
</tr>
<tr>
<td> 2 </td>
<td> o ⢠o o </td>
<td> 10 </td>
<td> o o ⢠⢠</td>
</tr>
<tr>
<td> 3 </td>
<td> o o ⢠o </td>
<td> 11 </td>
<td> ⢠⢠⢠o </td>
</tr>
<tr>
<td> 4 </td>
<td> o o o ⢠</td>
<td> 12 </td>
<td> ⢠⢠o ⢠</td>
</tr>
<tr>
<td> 5 </td>
<td> ⢠⢠o o </td>
<td> 13 </td>
<td> ⢠o ⢠⢠</td>
</tr>
<tr>
<td> 6 </td>
<td> ⢠o ⢠o </td>
<td> 14 </td>
<td> o ⢠⢠⢠</td>
</tr>
<tr>
<td> 7 </td>
<td> ⢠o o ⢠</td>
<td> 15 </td>
<td> ⢠⢠⢠⢠</td>
</tr>
<tr>
<td> 8 </td>
<td> o ⢠⢠o </td>
<td colspan="2"> ⢠znamená stisknuto, o znamená v klidu </td>
</tr>
</table>
<h3> Programovánà skladeb </h3>
<p>
PÅi programovánà se použÃvá propojka na J5 a definice skladeb se pÅivádÃ
z poÄÃtaÄe ze sériové linky na konektor J4. PÅi rozbÄhu otestuje
program, zda je na J5 propojka a zda je pÅipojen poÄÃtaÄ ke konektoru J4.
Pokud ano, pÅejde do režimu programovánÃ. To se projevà zacvrdlikánÃm. Aby
se program správnÄ spustil pÅi pÅipojenà napájenÃ, musà být napájenÃ
odpojené alespoŠ10 sekund. Pokud je nasazena propojka na J5 a nedojde
ke správnému zresetovánà procesoru, může dojÃt k poÅ¡kozenà obsahu
pamÄti skladeb a skladby bude tÅeba znovu nahrát.
</p>
<p>
Postup pro pÅechod do programovacÃho režimu:
</p>
<ul>
<li> OdpojÃme baterii a poÄkáme alespoÅ 10 sekund </li>
<li> PÅipojÃme kabel RS232 k poÄÃtaÄi </li>
<li> PÅipojÃme baterii </li>
<li> NasadÃme propojku J5 </li>
<li> Stiskneme nÄkteré tlaÄÃtko a mÄlo by se ozvat zacvrdlikánÃ</li>
</ul>
<p>
Pro pÅenos dat do zvonku je možné použÃt témÄÅ libovolný terminálový program.
Parametry pÅenosu dat do zvonku jsou 9600Bd, 8bitů, 1stopbit, žádná parita.
ÅÃzenà pÅenosu se nepoužÃvá. Protože data procesor zapisuje do své pamÄti
programu, nemůže ÄÃst dalšà data, než dokonÄà zápis pÅedchozÃch. Proto
je nutné nastavit Äasovou prodlevu mezi Åádky na cca 100ms.
PÅenos je jen jednosmÄrný, zvonek neumà odesÃlat žádné informace sériovou
linkou smÄrem k poÄÃtaÄi. Má pouze propojené signály RX a TX tak, aby
znaky odesÃlané do zvonku byly zobrazované na displeji terminálu.
</p>
<p>
Pro propojenà s poÄÃtaÄem se použÃvá nulmodemový kabel (tedy kÅÞený,
spojenà RX-TX, TX-RX).
</p>
<p>
V prostÅedà Windows 98 je k dispozici program Hyperterminál
(Start/Programy/PÅÃsluÅ¡enstvÃ/Komunikace/Hyperterminál). Pokud nenÃ,
znamená to, že nebyl nainstalován, a je možné nainstalovat jej dodateÄnÄ
nebo použÃt nÄjaký jiný terminálový program. Hyperterminál nás na úvod
vyzve k nastavenà základnÃch komunikaÄnÃch parametrů (9600Bd, 8,
žádná, 1, žádné). Dále je tÅeba nastavit
(Soubor/Vlastnosti/NastavenÃ/Nastavenà ASCII)
zpoždÄnà Åádků 100ms.
</p>
<p>
V této chvÃli bychom mÄli vidÄt znaky psané na klávesnici v oknÄ
terminálu. Pokud je zvonek v režimu programovánÃ, mÄl by krátce pÃpnout
pÅi každém stisku odÅádkovánÃ. Znamená to, že reaguje na posÃlaná data.
Nynà již nic nebránà ruÄnÃmu ovládánÃ.
</p>
<p>
VÄtšà množstvà dat (napÅÃklad celou melodii) je vhodné pÅipravit
do samostatného souboru a ten pak pÅes schránku vložit do terminálu
(u Hyperterminálu pravé tlaÄÃtko, funkce Vložit k hostiteli). VÄtÅ¡ina
terminálových programů umà i pÅÃmo odeslat textový soubor protistranÄ, ale
Hyperterminál to neumÃ.
</p>
<h3> PÅÃkazy a formát dat pro programovánà skladeb </h3>
<p>
Procesor vždy nejprve pÅevezme celou Åádku a poté se ji snažà zpracovat.
Pokud Åádce nerozumÃ, pÃpne odliÅ¡nÄ. Z Åádky se uvažuje jen prvnÃch 40 znaků.
Text za â//â je komentáÅ. KomentáŠmůže být libovolnÄ dlouhý.
</p>
<p>
KlÃÄová slova a jejich význam je v následujÃcà tabulce. Parametry jsou
malá pÅirozená ÄÃsla v uvedeném rozsahu. Pokud je zadáno ÄÃslo vÄtÅ¡Ã,
zvonek použije jen odpovÃdajÃcà spodnà bity ÄÃsla.
</p>
<table>
<tr>
<th> KlÃÄová slova a parametry </th>
<th> Meze </th>
<th> Význam </th>
</tr>
<tr>
<td> <code>PLAY <b>n</b></code> </td>
<td> <code><b>n</b>: 1 .. 15</code> </td>
<td> Zahraj skladbu <code><b>n</b></code> </td>
</tr>
<tr>
<td> <code>ERASE</code> </td>
<td> </td>
<td> Smaž všechny skladby </td>
</tr>
<tr>
<td> <code>BEGIN <b>n</b></code> </td>
<td> <code><b>n</b>: 0 .. 7</code> </td>
<td> ZaÄátek definice skladby; ÄÃslo udává posunutà skladby o udaný poÄet
oktáv nahoru </td>
</tr>
<tr>
<td> <code>TEST <b>n</b></code> </td>
<td> <code><b>n</b>: 0 .. 7</code> </td>
<td> Jako <code>BEGIN</code>, ale následujÃcà noty nejsou programovány
do pamÄti, ale pÅehrávány </td>
</tr>
<tr>
<td> <code>TEMPO <b>n</b></code> </td>
<td> <code><b>n</b>: 1 .. 2047</code> </td>
<td> Délka nejkratšà noty v ms; nenÃ-li použito, je nastaveno na 100ms;
může se použÃt vÃcekrát v jedné skladbÄ </td>
</tr>
<tr>
<td> <code>PAUSE <b>n</b></code> </td>
<td> <code><b>n</b>: 1 .. 2047</code> </td>
<td> Délka prodlevy mezi notami; nenÃ-li použito, je nastaveno na 100ms;
může se použÃt vÃcekrát v jedné skladbÄ </td>
</tr>
<tr>
<td> <code>[<b>a</b>]<b> C</b> [<b>b</b>]</code> </td>
<td> <code><b>a</b>: 0 .. 7<br></code>
<code><b>C</b>: C, Cis, D, Dis, E, F, Fis, <br></code>
<code> G, Gis, A, Ais, H, Space<br></code>
<code><b>b</b>: 1 .. 63</code> </td>
<td> ÄÃslo oktávy (seÄÃtá se s parametrem u <code>BEGIN</code>); nenÃ-li
uvedeno, použije se poslednà hodnota<br>
Nota <code><b>C</b></code> v oktávÄ <code><b>a</b></code> o délce
<code><b>b</b></code>; Space je nÄmá nota (mezera)<br>
Délka je v násobcÃch parametru <code>TEMPO</code>, nenÃ-li uvedena, je 1 </td>
</tr>
<tr>
<td> <code>END</code> </td>
<td> </td>
<td> Konec skladby, dalšà noty již budou pouze pÅehrávány </td>
</tr>
<tr>
<td> / text </td>
<td> </td>
<td> KomentáÅ; vÅ¡e za znakem / do konce Åádky se ignoruje </td>
</tr>
<tr>
<td colspan=3> <i>Znaky <code>[</code> a <code>]</code> znamenajà volitelný parametr</i> </td>
</tr>
</table>
<h2> Program </h2>
<p>
Program melodického zvonku je napsaný v jazyce C firmy CCS.
Demoverze pÅekladaÄe je možné stáhnout z webu na adresa
<a href="http://www.ccsinfo.com/">http://www.ccsinfo.com</a>.
Demoverze podporuje jen vybrané procesory (obvykle nÄkolik typů)
a umožÅuje napsat program v omezeném rozsahu (do 2048 slov).
</p>
<p>
Program je bohatÄ komentovaný a dostupný, je tedy snadné se s nÃm seznámit.
Vzhledem k omezeným zdrojům použitého procesoru použÃvá program v hojné
mÃÅe globálnÃch promÄnných, protože to vede na kód kratšà asi o 10%.
NÄkteré programové konstrukce také vypadajà na prvnà pohled nelogicky,
ale jsou voleny s ohledem na dosaženà minimálnà délky výsledného
kódu. Je tÅeba si uvÄdomit, že použitý pÅekladaÄ jazyka C patÅà k tÄm
nejlevnÄjÅ¡Ãm, a proto neumà generovat pÅÃliÅ¡ optimalizovaný kód.
</p>
<h3> Hlavnà program a základnà procedury </h3>
<h4>main()</h4>
<p>
Na zaÄátku se hlavnà program rozhoduje podle pÅÃtomnosti propojky na J5
a podle pÅÃtomnosti klidového signálu na RS232, zda má pÅejÃt do režimu
programovánà skladeb. Pokud ano, spustà se procedura Download().
</p>
<p>
Pokud nenà v programovacÃm režimu, zapÃná procesor napájenà sobÄ a zesilovaÄi
LM386 a po krátké prodlevÄ naÄÃtá stav tlaÄÃtek. Pak volá proceduru <code>Play()</code>,
která na základÄ ÄÃsla skladby v promÄnné <code>CisloSkladby</code>
pÅehraje požadovanou skladbu.
</p>
<p>
Následuje pÅechod do vypnutého stavu.
</p>
<h4>Download()</h4>
<p>
Tato procedura naÄÃtá nejprve celou Åádku z RS232. Znaky mezera, Äárka
a vÅ¡echny ÅÃdÃcà znaky kromÄ <code>CR</code> (odÅádkovánÃ) a <code>BS</code>
(znak zpÄt) se chápou jako oddÄlovaÄ (mezera). Znak <code>BS</code> umožÅuje
návrat o 1 znak zpÄt. Znaky za znakem lomeno se ignorujà stejnÄ, jako
znaky za maximálnà délkou Åádky.
</p>
<p>
Po stisku <code>CR</code> se postupnÄ zpracuje celá Åádka. Hledajà se
v nà klÃÄová slova (procedura <code>Word()</code>) a ÄÃselné parametry
(procedura <code>Number()</code>). Vyskytne-li se chybné slovo, dojde
k nastavenà pÅÃznaku <code>Error</code> a na konci Åádky mÃsto krátkého
pÃpnutà dojde k chybovému pÃpnutÃ.
</p>
<p>
KlÃÄová slova, tak jak jsou na Åádce, se ihned vykonávajÃ. Tedy noty hrajÃ,
slova <code>TEMPO</code>, <code>PAUSE</code>, <code>PLAY</code>, <code>ERASE</code>
a <code>TEST</code> dÄlajà pÅÃmo to, co dÄlat majÃ. Tato vlastnost
sloužà k testovánà melodià Äi jejich úryvků aniž by se musely zapisovat
do pamÄti FLASH.
</p>
<p>
Po slovu <code>BEGIN</code> se pÅejde do režimu záznamu do pamÄti a od
tohoto okamžiku se vÅ¡e zaznamenává do pamÄti. Tento režim konÄà slovem <code>END</code>
(ale také slovy <code>ERASE</code>, <code>TEST</code> nebo <code>PLAY</code>).
</p>
<p>
Pokud se bÄhem zpracovánà Åádky odehrála alespoÅ jedna nota, nedojde na konci
Åádky k pÃpnutà (pokud ovÅ¡em nebyla nÄkde na Åádce chyba).
</p>
<h4> Play(), PlayData(), Find()</h4>
<p>
Tyto procedury sloužà k pÅehránà celé skladby, jedné noty a k nalezenÃ
zaÄátku zadaného ÄÃsla skladby.
</p>
<h4> WriteDataInc(), WriteData, ReadData(), Erase() </h4>
<p>
Tyto procedury sloužà k zápisu, Ätenà a k mazánà pamÄti skladeb.
K zápisu nebo ke smazánà může dojÃt jen pokud je nasazena propojka na J5.
</p>
<h4> SpecBeep()</h4>
<p>
Tato procedura sloužà k pÃpnutà dle parametru v promÄnných
<code>Beep</code> a <code>Error</code>.
</p>
<h3> Knihovna pro generovánà zvuků <code>Sound_t1.c</code> </h3>
<p>
Tato knihovna použÃvá ÄasovaÄ T1 spolu s jednotkou CCP1 ke generovánÃ
pÅeruÅ¡enà dle požadované půlperiody hraného tónu. V pÅeruÅ¡ovacà rutinÄ
<code>IntCCP1()</code> se pak ovládá výstupnà port.
</p>
<p>
Délka tónu se odmÄÅuje pomocà pÅeteÄenà ÄasovaÄe T0. PÅeteÄenà se zjišťuje
ÄtenÃm pÅÃznaku T0IF, pÅeruÅ¡enà se zde nepoužÃvá.
</p>
<h3> Definice skladeb <code>Data.c</code> </h3>
<p>
Skladby se ukládajà v poslednà ÄtvrtinÄ pamÄti FLASH a kódujà se dle
následujÃcà tabulky.
</p>
<table>
<tr>
<th> Slovo </th>
<th> Kód </th>
<th> Poznámka </th>
</tr>
<tr>
<td> <code>BEGIN n</code> </td>
<td> <code>1 0  0 n n n  n n n n  n n n n</code> </td>
<td> ZaÄátek skladby a posunutà oktávy not skladby o <code><b>n</b></code> </td>
</tr>
<tr>
<td> <code>TEMPO n</code> </td>
<td> <code>1 0  1 n n n  n n n n  n n n n</code> </td>
<td> ZmÄna tempa na <code><b>n</b></code> milisekund </td>
</tr>
<tr>
<td> <code>PAUSE n</code> </td>
<td> <code>1 1  0 n n n  n n n n  n n n n</code> </td>
<td> ZmÄna mezery mezi notami na <code><b>n</b></code> milisekund </td>
</tr>
<tr>
<td> <code>o n d</code> </td>
<td> <code>0 d  d d d d  d o o o  n n n n</code> </td>
<td> Nota <code><b>n</b></code> v oktávÄ <code><b>o</b></code> délky <code><b>d</b></code> </td>
</tr>
<tr>
<td> <code>END</code> </td>
<td> <code>1 1Â Â 1 1 1 1Â Â 1 1 1 1Â Â 1 1 1 1</code> </td>
<td> Konec skladeb, prázdná pamÄÅ¥ </td>
</tr>
</table>
<p>
Aby se dalo použÃt stejného souboru s definicà skladby jak pro zaÄlenÄnÃ
skladby do firmwaru tak i pro programovánà pÅes RS232, jsou v souboru
<code>Data.c</code> nadefinována makra, která toto umožÅujÃ. Definice
skladby, která má být zaÄlenÄna do firmwaru musÃ, použÃvat Äárky jako
oddÄlovaÄe jednotlivých položek a ÄÃselné parametry nenà možné vynechávat.
PÅÃklady skladeb napovà vÅ¡e.
</p>
</div>
<!-- AUTOINCLUDE START "Page/Footer.cs.ihtml" DO NOT REMOVE -->
<!-- ============== PATIÄKA ============== -->
<div class="Footer">
<script type="text/javascript">
<!--
SetRelativePath("../../../../");
DrawFooter();
// -->
</script>
<noscript>
<p><b> Pro zobrazenà (vloženÃ) hlaviÄky je potÅeba JavaScript </b></p>
</noscript>
</div>
<!-- AUTOINCLUDE END -->
</body>
</html>
|