USB modul pro AVR
Milan Horkel
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.
Parametr | Hodnota | Poznámka |
---|---|---|
Rozhraní | USB | Low Speed |
Napájení | +5V | Z USB rozhraní |
Napájení vnitřní | +5V / +3.3V | Vlastní stabilizátor, max 800mA |
Funkce (dle firmwaru) | USBasp i2c-tiny-usb |
Programátor AVR Převodník USB - I2C |
Rozměry | 60 x 30 x 18 mm | Výška nad základnou |
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í.
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.
Původní řešení ve stavebnici MLAB bylo poněkud neelegantní. Posuďte sami:
|
|
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:
Zapojení vychází z předdefinovaného přiřazení vývodů USB knihovny usbdrv, 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 případně opravit, pokud autor nemá konfiguraci správně připravenou).
První částí zapojení je napájecí zdroj. Umožňuje pomocí propojky J2 použít jak napětí +5V přímo z 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. Pozor, osazujeme jen jednu pojistku (na plošném spoji leží přes sebe).
Další částí je procesor ATmega88, který je připojen na USB konektor.
Pro jeho vlastní programování se používá konektor J9 a je nutné zapojit propojku J6, která umožní programování.
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.
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ě).
Počet | Reference | Název | Pouzdro |
---|---|---|---|
Odpory | |||
10 | R2, R3, R8, R9, R10, R11, R14, R15, R16, R17 | 68 | R0805 |
1 | R7 | 330 | R0805 |
2 | R5, R6 | 470 | R0805 |
1 | R1 | 2k2 | R0805 |
3 | R4, R12, R13 | 4k7 | R0805 |
Keramické kondenzátory | |||
2 | C4, C5 | 22pF | C0805 |
2 | C1, C6 | 100nF | C0805 |
2 | C2, C3 | 10uF | C0805 |
Diody | |||
2 | D1, D2 | 1N4007SMD | MELF |
Zenerovy diody | |||
2 | D6, D7 | BZV55C3.6 | MINIMELF |
Svítivé diody | |||
2 | D3, D4 | HCL-1505-4(RED) | LED1206REV |
1 | D5 | HCL-1503-4(GREEN) | LED1206REV |
Pojistky | |||
1 | F1A | SR075-06 | R0805 |
0 | F1B | 1812L075PR | F1812 |
Integrované obvody | |||
1 | U1 | LT1117-3.3 | SOT223 |
1 | U2 | ATmega88-20AU | TQFP32 |
Krystaly | |||
1 | X1 | 12MHz | XTAL050 |
Mechanické součástky | |||
1 | J1 | USB_B_01 | USB_B_01 |
4 | J2, J5, J7, J10 | JUMP2 | JUMP2 |
1 | J6 | JUMP3 | JUMP3 |
2 | J4, J3 | JUMP2X3 | JUMP2X3 |
1 | J8 | JUMP2X5 | JUMP2X5 |
1 | J9 | JUMP2x3 | JUMP2x3/B |
Konstrukční součástky | |||
4 | Šroub M3x12 | ||
4 | Podložka M3 | ||
4 | Sloupek M3x5 | ||
2 | JUMPER | ||
1 | Plošný spoj |
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.
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).
Jedná se o standardní modul pro stavebnici MLAB určený k přišroubování k základní desce.
Na straně spojů nezapomeneme osadit drátové propojky (platí pro jednostranný plošný spoj).
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).
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.
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.
Firmwary musejí být nakonfigurovány s těmito parametry:
Parametr | Hodnota | Poznámka |
---|---|---|
USB D+ | PD2/INT0 | Je současně signálem externího přerušení INT0, obvyklé provedení programátoru USBasp používá port PB1. |
USB D- | PD4 | Obvyklé provedení programátoru USBasp používá port PB1. |
Přerušení | PD2/INT0 | Obvyklé provedení programátoru USBasp používá port PD2 spojený s portem PB1. |
Krystal | 12.0MHz | 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). |
Procesor | ATmega88 | Alternativně ATmega8 (nutný překlad firmwaru pro správně nastavený procesor). |