ATmega328 je jednočipový mikrořadič z rodiny megaAVR navržený firmou Atmel.
Atmel je 8bitový mikrořadič založený na architektuře AVR RISC, který integruje 32 kiB ISP flash paměti s podporou read-while-write, 1 kB EEPROM, 2 kB SRAM, 23 univerzálních vstupně-výstupních vývodů, 32 univerzálních registrů, tři flexibilní čítače/časovače s porovnávacími režimy, vnitřní a vnější přerušení, programovatelný sériový obvod USART, bajtově orientované 2vodičové sériové rozhraní, sériový port SPI, 6kanálový 10bitový A/D převodník (ve verzích TQFP a QFN/MLF 8kanálový), programovatelný watchdog timer s interním oscilátorem, a pět programovatelných režimů pro úsporu energie. Napájecí napětí může být v rozsahu 1,8 až 5,5 voltů. Výkon procesoru odpovídá 1 MIPS (ze anglického Millions Instructions Per Second) při frekvenci 1MHz.[1]
Parameter | Value |
---|---|
Typ CPU | 8-bit AVR |
Výkon | 20 MIPS při 20 MHz[2] |
Paměť flash | 32 kB |
SRAM | 2 kB |
EEPROM | 1 kB |
Počet vývodů | 28 u verze PDIP, 32 u verze TQFP; QFN/MLF má variantu s 28 i 32 vývody |
Maximální frekvence |
20 MHz |
Počet touch channels | 16 |
Hardware QTouch Acquisition | Ne |
Maximální počet vstupně-výstupních vývodů | 23 |
Počet externích přerušení | 2 |
Rozhraní USB | Ne |
Možnou náhradou za ATmega328 je „picoPower“ ATmega328P. Úplný seznam ostatních členů řady megaAVR lze nalézt na webových stránkách Atmel.[3]
Od roku 2013 se ATmega328 běžně používá v mnoha projektech a autonomních systémech, které vyžadují jednoduché, úsporné a levné mikrořadiče[zdroj?]. K nejrozšířenějším využitím obvodu patří zařízení jednoúčelové průmyslové automatizace, jednoúčelová zařízení (battery management, meteorologické stanice, měřicí zařízení) apod.
Testy spolehlivosti ukazují, že očekávaná míra selhání uchovávání dat je mnohem menší než 1 PPM za více než 20 let při teplotě 85 °C nebo 100 let při 25 °C.[4]
Programování signál | Jméno pinu | I/O | Funkce |
---|---|---|---|
RDY/BSY | PD1 | O | Vysoká úroveň znamená, že MCU je připraveno pro nový příkaz, jinak je zaneprázdněno. |
OE | PD2 | I | Output Enable (Aktivní při nízké úrovni) |
WR | PD3 | I | Write Impuls (Aktivní při nízké úrovni) |
BS1 | PD4 | I | Výběr bajtu 1 ("0" = nižší bajt, "1" = vyšší bajt) |
XA0 | PD5 | I | XTAL Action bit 0 |
XA1 | PD6 | I | XTAL Action bit 1 |
PAGEL | PD7 | I | Zápis do paměti programu nebo dat (flash a EEPROM) |
PS2 | PC2 | I | Výběr bajtu 2 ("0" = nižší bajt, "1" = vyšší bajt) |
DATA | PC[1:0]:PB[5:0] | I/O | Obousměrná datová sběrnice (je-li Output Enable na nízké úrovni, pak výstup) |
Vstup do programovacího módu se děje nastavením vývodů PAGEL (PD7), XA1 (PD6), XA0 (PD5), BS1 (PD4) na napětí 0 V[2] s následným nastavením RESET na 0 V a vypnutím napájení VCC. Pak je na VCC přivedeno napájení o napětí 4,5 - 5,5 V a po prodlevě 60 µs se vstup RESET nastaví na 11,5 - 12,5 V, přičemž tento stav musí trvat nejméně 310 µs.[2] Pak se nastaví XA1:XA0:BS1:DAT = 100 1000 0000 a pošle se impuls o délce trvání alespoň 150 ns na XTAL1 a impuls na nulu na WR. Tím se zahájí výmaz paměti obvodu, jehož ukončení signalizuje obvod uvedením RDY/BSY (PD1) na vysokou úroveň. Nastavit XA1:XA0:BS1:DAT = 100 0001 0000, přivést impuls na XTAL1, a impuls na WR na nulu je příkaz pro zápis do flash paměti.[2] A tak dále.
Symbol | Kolíky | I/O | Popis |
---|---|---|---|
MOSI | PB3 | I | Vstup sériových dat |
MISO | PB4 | O | Výstup sériových dat |
SCK | PB5 | I | Hodiny pro sériová data |
Sériová data do MCU jsou taktována vzestupnou hranou, data z MCU jsou taktována sestupnou hranou. Při přivedení napájecího napětí na VCC jsou vstupy RESET a SCK nastaveny na nulu. Po prodlevě alespoň 20 ms je třeba poslat sériové instrukce „povolit programování“ 0xAC, 0x53, 0x00, 0x00 na vývod MOSI. MCU opakuje druhý byte (0x53).[2]
V tomto článku byl použit překlad textu z článku ATmega328 na anglické Wikipedii.