0,0 → 1,990 |
<!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> |