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.

Obrázek modulu AVRUSB01A

Acrobat PDF verze

Technické parametry

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

Popis konstrukce

Úvodem

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:

Nelegantní řešení

Nový modul

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í modulu

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).

Schéma, napájecí zdroj

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

Schéma, procesor

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.

Schéma, konektor AVR ISP Schéma, konektor napájení

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ě).

Schéma, I2C konektor Schéma, diody LED Schéma, konektor RS232

Seznam součástek

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  

Zapojení použitých IO

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).

Mechanická konstrukce

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

Osazení a oživení

Osazení

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

Osazovací výkres, strana součástek

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).

Osazovací výkres, strana spojů

Oživení

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.

Programové vybavení

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).