<!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> AVRUSB01A </title>
    <meta name="keywords" content="stavebnice MLAB USB AVR USBasp I2C">
    <meta name="description" content="Projekt MLAB, Modul pro AVR procesory, převodník USB na I2C, programátor AVR ISP">
    <!-- 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">
        USB modul pro AVR
      </p>

      <p class=Autor>
        Milan Horkel
      </p>

      <p class="Subtitle">
        Potřeboval jsem rychle připojit I2C zařízení k Linuxovému počítači. Protože se mi nelíbilo
        "bastl" provedení USB rozhraní s procesorem ATmega, zkomponoval jsem tento modul. Může
        sloužit jako ISP programátor pro AVR procesory, jako převodník USB na I2C a na další pokusy
        se softwarovou realizací USB na procesorech řadu ATmega. Obsahuje také stabilizátor 3,3V.
      </p>
      
      <p class="Subtitle">
        <img width="630" height="319" src="AVRUSB01A_soubory/image001.jpg" alt="Obrázek modulu AVRUSB01A">
      </p>

      <p>
        <a href="../AVRUSB01A.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> Rozhraní </td>
          <td> USB </td>
          <td> Low Speed </td>
        </tr>
        <tr>
          <td> Napájení </td>
          <td> +5V </td>
          <td> Z USB rozhraní </td>
        </tr>
        <tr>
          <td> Napájení vnitřní </td>
          <td> +5V / +3.3V </td>
          <td> Vlastní stabilizátor, max 800mA </td>
        </tr>
        <tr>
          <td> Funkce (dle firmwaru) </td>
          <td> USBasp<br>
               i2c-tiny-usb </td>
          <td> Programátor AVR<br>
               Převodník USB - I2C </td>
        </tr>
        <tr>
          <td> Rozměry </td>
          <td> 60&nbsp;x&nbsp;30&nbsp;x&nbsp;18&nbsp;mm </td>
          <td> Výška nad základnou </td>
        </tr>
      </table>

      <h1> Popis konstrukce </h1>

      <h2> Úvodem </h2>

      <p>
        Pro procesory AVR existuje knihovna (ne jedna, dokonce několik), která realizuje USB Low
        Speed (1.5Mbit/s) protokol čistě softwarovými prostředky. Jedná se o řešení kompromisní,
        protože obyčejné vývody procesorů AVR nesplňují elektrické parametry USB specifikace.
        Nicméně existuje spousta konstrukcí, které toto řešení používají a díky přeci jen laxnějším
        požadavkům pro Low Speed USB se jedná o řešení funkční.
      </p>

      <p>
        <i>Pozor, novější operační systémy v souladu s USB specifikací zakazují Bulk
        přenosy pro Low Speed USB zařízení. Takže některé firmwary nemusejí fungovat.</i>
      </p>

      <p>
        Původní řešení ve stavebnici MLAB bylo poněkud neelegantní. Posuďte sami:
      </p>

      <table>
        <tr>
          <td>
            <p>
              <img width="288" height="320" src="AVRUSB01A_soubory/image002.jpg"
              alt="Nelegantní řešení">
            </p>
          </td>
          <td>
            <p>
              <img width="190" height="96" src="AVRUSB01A_soubory/image003.jpg"
              alt="Nový modul">
            </p>
          </td>
        </tr>
      </table>

      <p>
        Modul tedy slouží pro běh standardních firmwarů, nebo pro tvorbu a testování vlastních.
        Dále poskytuje stabilizátor napětí 3.3V. Standardní firmwary poskytují tyto například
        tyto služby:
      </p>

      <ul>
        <li> Programování procesorů AVR (firmware USBasp,
             <a href="http://www.fischl.de/usbasp">http://www.fischl.de/usbasp</a>) </li>
        <li> Převodník USB na I2C (firmware i2c-tiny-usb,
             <a href="http://www.harbaum.org/till/i2c_tiny_usb">http://www.harbaum.org/till/i2c_tiny_usb</a>) </li>
        <li> a další... </li>
      </ul>

      <h2> Zapojení modulu </h2>

      <p>
        Zapojení vychází z předdefinovaného přiřazení vývodů USB knihovny <i>usbdrv</i>, různé
        firmwary mohou mít přiřazení (USB) vývodů odlišné a je třeba je před překladem přenastavit
        (a&nbsp;případně opravit, pokud autor nemá konfiguraci správně připravenou).
      </p>

      <p>
        První částí zapojení je napájecí zdroj. Umožňuje pomocí propojky J2 použít jak napětí +5V
        přímo z&nbsp;USB, tak i napětí +3.3V z vestavěného stabilizátoru. Na vstupu je ochranná
        pojistka, protože ji některá zařízení (v rozporu s USB specifikací) nemají a při případné
        zkratu by mohlo někde něco uhořet. <i>Pozor, osazujeme jen jednu pojistku
        (na plošném spoji leží přes sebe).</i>
      </p>

      <p>
        <img width="988" height="294" src="AVRUSB01A_soubory/image004.png"
        alt="Schéma, napájecí zdroj">
      </p>

      <p>
        Další částí je procesor ATmega88, který je připojen na USB konektor.
      </p>

      <p>
        <img width="988" height="454" src="AVRUSB01A_soubory/image005.png"
        alt="Schéma, procesor">
      </p>

      <p>
        Pro jeho vlastní programování se používá konektor J9 a je nutné zapojit propojku J6, která
        umožní programování.
      </p>

      <p>
        Po nahrání firmwaru "programátor AVR" je konektor J9 použit pro připojení cílového
        zařízení, které lze napájet napětím 3.3V z modulu přes spojku J10 a případně spojkou J2
        nastavit napětí +5V.
      </p>

      <p>
        <img width="494" height="254" src="AVRUSB01A_soubory/image006.png"
        alt="Schéma, konektor AVR ISP">
        <img width="334" height="254" src="AVRUSB01A_soubory/image007.png"
        alt="Schéma, konektor napájení">
      </p>

      <p>
        Po nahrání firmwaru "převodník I2C" je možné na konektor J8 připojit I2C sběrnici, případně
        povolit její napájení +3.3V přes J7 (J2 zapíná +5V z USB). K dispozici jsou dále LED diody
        D4 a D5 a případně vyvedené rozhraní RS232 (TTL úrovně).
      </p>

      <p>
        <img width="494" height="254" src="AVRUSB01A_soubory/image008.png"
        alt="Schéma, I2C konektor">
        <img width="334" height="254" src="AVRUSB01A_soubory/image009.png"
        alt="Schéma, diody LED">
        <img width="334" height="148" src="AVRUSB01A_soubory/image010.png"
        alt="Schéma, konektor RS232">
      </p>

      <h2> Seznam součástek </h2>

      <table class="Soupiska">
        <tr>
          <th> Počet </th>
          <th> Reference </th>
          <th> Název </th>
          <th> Pouzdro </th>
        </tr>
        <tr>
          <th colspan="4"> Odpory </th>
        </tr>
        <tr>
          <td> 10 </td>
          <td> R2, R3, R8, R9, R10, R11, R14, R15, R16, R17 </td>
          <td> 68 </td>
          <td> R0805 </td>
        </tr>
        <tr>
          <td> 1 </td>
          <td> R7 </td>
          <td> 330 </td>
          <td> R0805 </td>
        </tr>
        <tr>
          <td> 2 </td>
          <td> R5, R6 </td>
          <td> 470 </td>
          <td> R0805 </td>
        </tr>
        <tr>
          <td> 1 </td>
          <td> R1 </td>
          <td> 2k2 </td>
          <td> R0805 </td>
        </tr>
        <tr>
          <td> 3 </td>
          <td> R4, R12, R13 </td>
          <td> 4k7 </td>
          <td> R0805 </td>
        </tr>
        <tr>
          <th colspan="4"> Keramické kondenzátory </th>
        </tr>
        <tr>
          <td> 2 </td>
          <td> C4, C5 </td>
          <td> 22pF </td>
          <td> C0805 </td>
        </tr>
        <tr>
          <td> 2 </td>
          <td> C1, C6 </td>
          <td> 100nF </td>
          <td> C0805 </td>
        </tr>
        <tr>
          <td> 2 </td>
          <td> C2, C3 </td>
          <td> 10uF </td>
          <td> C0805 </td>
        </tr>
        <tr>
          <th colspan="4"> Diody </th>
        </tr>
        <tr>
          <td> 2 </td>
          <td> D1, D2 </td>
          <td> 1N4007SMD </td>
          <td> MELF </td>
        </tr>
        <tr>
          <th colspan="4"> Zenerovy diody </th>
        </tr>
        <tr>
          <td> 2 </td>
          <td> D6, D7 </td>
          <td> BZV55C3.6 </td>
          <td> MINIMELF </td>
        </tr>
        <tr>
          <th colspan="4"> Svítivé diody </th>
        </tr>
        <tr>
          <td> 2 </td>
          <td> D3, D4 </td>
          <td> HCL-1505-4(RED) </td>
          <td> LED1206REV </td>
        </tr>
        <tr>
          <td> 1 </td>
          <td> D5 </td>
          <td> HCL-1503-4(GREEN) </td>
          <td> LED1206REV </td>
        </tr>
        <tr>
          <th colspan="4"> Pojistky </th>
        </tr>
        <tr>
          <td> 1 </td>
          <td> F1A </td>
          <td> SR075-06 </td>
          <td> R0805 </td>
        </tr>
        <tr>
          <td> 0 </td>
          <td> F1B </td>
          <td> 1812L075PR </td>
          <td> F1812 </td>
        </tr>
        <tr>
          <th colspan="4"> Integrované obvody </th>
        </tr>
        <tr>
          <td> 1 </td>
          <td> U1 </td>
          <td> LT1117-3.3 </td>
          <td> SOT223 </td>
        </tr>
        <tr>
          <td> 1 </td>
          <td> U2 </td>
          <td> ATmega88-20AU </td>
          <td> TQFP32 </td>
        </tr>
        <tr>
          <th colspan="4"> Krystaly </th>
        </tr>
        <tr>
          <td> 1 </td>
          <td> X1 </td>
          <td> 12MHz </td>
          <td> XTAL050 </td>
        </tr>
        <tr>
          <th colspan="4">  Mechanické součástky </th>
        </tr>
        <tr>
          <td> 1 </td>
          <td> J1 </td>
          <td> USB_B_01 </td>
          <td> USB_B_01 </td>
        </tr>
        <tr>
          <td> 4 </td>
          <td> J2, J5, J7, J10 </td>
          <td> JUMP2 </td>
          <td> JUMP2 </td>
        </tr>
        <tr>
          <td> 1 </td>
          <td> J6 </td>
          <td> JUMP3 </td>
          <td> JUMP3 </td>
        </tr>
        <tr>
          <td> 2 </td>
          <td> J4, J3</td>
          <td> JUMP2X3 </td>
          <td> JUMP2X3 </td>
        </tr>
        <tr>
          <td> 1 </td>
          <td> J8 </td>
          <td> JUMP2X5 </td>
          <td> JUMP2X5 </td>
        </tr>
        <tr>
          <td> 1 </td>
          <td> J9 </td>
          <td> JUMP2x3 </td>
          <td> JUMP2x3/B </td>
        </tr>
        <tr>
          <th colspan="4"> Konstrukční součástky </th>
        </tr>
        <tr>
          <td> 4 </td>
          <td> &nbsp; </td>
          <td> Šroub M3x12 </td>
          <td> &nbsp; </td>
        </tr>
        <tr>
          <td> 4 </td>
          <td> &nbsp; </td>
          <td> Podložka M3 </td>
          <td> &nbsp; </td>
        </tr>
        <tr>
          <td> 4 </td>
          <td> &nbsp; </td>
          <td> Sloupek M3x5 </td>
          <td> &nbsp; </td>
        </tr>
        <tr>
          <td> 2 </td>
          <td> &nbsp; </td>
          <td> JUMPER </td>
          <td> &nbsp; </td>
        </tr>
        <tr>
          <td> 1 </td>
          <td> &nbsp; </td>
          <td> Plošný spoj </td>
          <td> &nbsp; </td>
        </tr>
      </table>

      <h2> Zapojení použitých IO </h2>

      <p>
        Použitý obvod ATmega88-20 v pouzdru TQFP je možné nahradit procesorem ATmega8, ale je třeba
        použít správnou variantu firmwaru přeloženou pro použitý procesor. Rychlost procesoru a
        krystal volíme dle požadavků firmwaru. USB knihovna podporuje jen vybrané kmitočty.
      </p>

      <p>
        Knihovna USB umožňuje připojení USB datových signálů k libovolnému portu procesoru, ale
        současně potřebuje, aby alespoň jeden signál vyvolával přerušení s dostatečně velkou
        prioritou. Zde je přerušovacím signálem INT0 na signálu D+ (vývod PD2).
      </p>

      <h2> Mechanická konstrukce </h2>

      <p>
        Jedná se o standardní modul pro stavebnici MLAB určený k přišroubování k základní desce.
      </p>

      <h1> Osazení a oživení </h1>

      <h2> Osazení </h2>

      <p>
        Na straně spojů nezapomeneme osadit drátové propojky (platí pro jednostranný plošný spoj).
      </p>

      <p>
        <img width="802" height="404" src="AVRUSB01A_soubory/image011.png"
        alt="Osazovací výkres, strana součástek">
      </p>

      <p>
        Na straně spojů jsou osazeny standardní SMD součástky, jen LED diody se osazují opačně,
        svítící stranou směrem do desky (je tam otvor velký tak akorát, aby se tam vešlo pouzdro
        standardní diody v pouzdru 1206).
      </p>

      <p>
        <img width="802" height="405" src="AVRUSB01A_soubory/image012.png"
        alt="Osazovací výkres, strana spojů">
      </p>

      <h2> Oživení </h2>

      <p>
        Oživení spočívá v optické kontrole na zkraty a v elektrické kontrole funkčnosti
        stabilizátoru +3.3V. Pak stačí externím programátorem nahrát příslušný firmware a ozkoušet
        jeho funkčnost.
      </p>

      <h1> Programové vybavení </h1>

      <p>
        Jednotlivé firmwary (nakonfigurované pro tento hardware) jsou součástí tohoto projektu
        spolu s jejich přeloženými binárními soubory v adresáři SW.
      </p>

      <p>
        Firmwary musejí být nakonfigurovány s těmito parametry:
      </p>

      <table>
        <tr>
          <th> Parametr </th>
          <th> Hodnota </th>
          <th> Poznámka </th>
        </tr>
        <tr>
          <td> USB D+ </td>
          <td> PD2/INT0 </td>
          <td> Je současně signálem externího přerušení INT0, obvyklé provedení programátoru USBasp používá port PB1. </td>
        </tr>
        <tr>
          <td> USB D- </td>
          <td> PD4 </td>
          <td> Obvyklé provedení programátoru USBasp používá port PB1. </td>
        </tr>
        <tr>
          <td> Přerušení </td>
          <td> PD2/INT0 </td>
          <td> Obvyklé provedení programátoru USBasp používá port PD2 spojený s portem PB1. </td>
        </tr>
        <tr>
          <td> Krystal </td>
          <td> 12.0MHz </td>
          <td> Obvyklá hodnota frekvence, nutno volit podle toho, jaké frekvence jsou podporované v
               USB knihovně (například 12.0MHz, 12.8MHz, 15.0MHz, 16.0MHz, 16.5MHz, 18.0MHz
               20.0MHz). </td>
        </tr>
        <tr>
          <td> Procesor </td>
          <td> ATmega88 </td>
          <td> Alternativně ATmega8 (nutný překlad firmwaru pro správně nastavený procesor). </td>
        </tr>
      </table>
      
    </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>