{HEADER END}
{FILE START}

MLAB

[/] [Designs/] [MB01B/] [DOC/] [HTML/] [MB01B.cs.html] - Revize 3255

Porovnej s předchozí - Blame - Stáhnout jako soubor

<!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&nbsp;baterie, protože v&nbsp;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">&nbsp;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&nbsp;technologii výroby integrovaných obvodů se v&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;zapojení, je zde programovací
        konektor J6, který slouží pro naprogramování programu.
        V&nbsp;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&nbsp;připojení
        zemního potenciálu i signálu GND_PIC. Tím dojde k&nbsp;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&nbsp;počítače při přeprogramovávání melodií. Přestože RS232 signály jsou
        v&nbsp;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&nbsp;MODE (J5) slouží k&nbsp;vynucenému zapnutí napájení
        v&nbsp;době programování nových melodií i v&nbsp;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&nbsp;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&nbsp;čtyřmi
        upevňovacími otvory v&nbsp;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&nbsp;omezením proudu (asi na 100mA). Ujistíme se, že <b>není</b>
        nasunuta propojka na J5. V&nbsp;klidu by zvonek neměl odebírat prakticky
        žádný proud. Po stisku tlačítka by měl zvonek hrát některou
        z&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;rozsahu 1:2 a je v&nbsp;ní celkem 7 tónů a 5 půltónů.
        Z&nbsp;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&nbsp;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> •&nbsp;o&nbsp;o&nbsp;o </td>
          <td> 9 </td>
          <td> o&nbsp;•&nbsp;o&nbsp;• </td>
        </tr>
        <tr>
          <td> 2 </td>
          <td> o&nbsp;•&nbsp;o&nbsp;o </td>
          <td> 10 </td>
          <td> o&nbsp;o&nbsp;•&nbsp;• </td>
        </tr>
        <tr>
          <td> 3 </td>
          <td> o&nbsp;o&nbsp;•&nbsp;o </td>
          <td> 11 </td>
          <td> •&nbsp;•&nbsp;•&nbsp;o </td>
        </tr>
        <tr>
          <td> 4 </td>
          <td> o&nbsp;o&nbsp;o&nbsp;• </td>
          <td> 12 </td>
          <td> •&nbsp;•&nbsp;o&nbsp;• </td>
        </tr>
        <tr>
          <td> 5 </td>
          <td> •&nbsp;•&nbsp;o&nbsp;o </td>
          <td> 13 </td>
          <td> •&nbsp;o&nbsp;•&nbsp;• </td>
        </tr>
        <tr>
          <td> 6 </td>
          <td> •&nbsp;o&nbsp;•&nbsp;o </td>
          <td> 14 </td>
          <td> o&nbsp;•&nbsp;•&nbsp;• </td>
        </tr>
        <tr>
          <td> 7 </td>
          <td> •&nbsp;o&nbsp;o&nbsp;• </td>
          <td> 15 </td>
          <td> •&nbsp;•&nbsp;•&nbsp;• </td>
        </tr>
        <tr>
          <td> 8 </td>
          <td> o&nbsp;•&nbsp;•&nbsp;o </td>
          <td colspan="2"> •&nbsp;znamená&nbsp;stisknuto, o&nbsp;znamená&nbsp;v&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;počítačem se používá nulmodemový kabel (tedy křížený,
        spojení RX-TX, TX-RX).
      </p>

      <p>
        V&nbsp;prostředí Windows 98 je k&nbsp;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&nbsp;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&nbsp;této chvíli bychom měli vidět znaky psané na klávesnici v&nbsp;okně
        terminálu. Pokud je zvonek v&nbsp;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&nbsp;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&nbsp;následující tabulce. Parametry jsou
        malá přirozená čísla v&nbsp;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&nbsp;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&nbsp;ms; není-li použito, je nastaveno na 100ms;
               může se použít vícekrát v&nbsp;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&nbsp;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&nbsp;parametrem u <code>BEGIN</code>); není-li
               uvedeno, použije se poslední hodnota<br>
               Nota <code><b>C</b></code> v&nbsp;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&nbsp;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&nbsp;jazyce C firmy CCS.
        Demoverze překladače je možné stáhnout z&nbsp;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&nbsp;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&nbsp;omezeným zdrojům použitého procesoru používá program v&nbsp;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&nbsp;ohledem na&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;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&nbsp;ní klíčová slova (procedura <code>Word()</code>) a&nbsp;číselné parametry
        (procedura <code>Number()</code>). Vyskytne-li se chybné slovo, dojde
        k&nbsp;nastavení příznaku <code>Error</code> a na konci řádky místo krátkého
        pípnutí dojde k&nbsp;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&nbsp;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&nbsp;pípnutí (pokud ovšem nebyla někde na řádce chyba).
      </p>

      <h4> Play(), PlayData(), Find()</h4>

      <p>
        Tyto procedury slouží k&nbsp;přehrání celé skladby, jedné noty a k&nbsp;nalezení
        začátku zadaného čísla skladby.
      </p>

      <h4> WriteDataInc(), WriteData, ReadData(), Erase() </h4>

      <p>
        Tyto procedury slouží k&nbsp;zápisu, čtení a k&nbsp;mazání paměti skladeb.
        K&nbsp;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&nbsp;pípnutí dle parametru v&nbsp;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&nbsp;jednotkou CCP1 ke generování
        přerušení dle požadované půlperiody hraného tónu. V&nbsp;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&nbsp;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&nbsp;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&nbsp;definicí skladby jak pro začlenění
        skladby do firmwaru tak i pro programování přes RS232, jsou v&nbsp;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>
{FILE END}
{FOOTER START}

Poháněno WebSVN v2.1 alpha 1