ATmega328
The ATmega328 is a single-chip microcontroller created by Atmel in the megaAVR family.
Specifications
The Atmel 8-bit AVR RISC-based microcontroller combines 32 kB ISP flash memory with read-while-write capabilities, 1 kB EEPROM, 2 kB SRAM, 23 general purpose I/O lines, 32 general purpose working registers, three flexible timer/counters with compare modes, internal and external interrupts, serial programmable USART, a byte-oriented 2-wire serial interface, SPI serial port, 6-channel 10-bit A/D converter (8-channels in TQFP and QFN/MLF packages), programmable watchdog timer with internal oscillator, and five software selectable power saving modes. The device operates between 1.8-5.5 volts. The device achieves throughput approaching 1 MIPS per MHz.[1]
Key parameters
Parameter | Value |
---|---|
CPU type | 8-bit AVR |
Performance | 20 MIPS at 20 MHz[2] |
Flash memory | 32 kB |
SRAM | 2 kB |
EEPROM | 1 kB |
Pin count | 28-pin PDIP, MLF, 32-pin TQFP, MLF[2] |
Maximum operating frequency | 20 MHz |
Number of touch channels | 16 |
Hardware QTouch Acquisition | No |
Maximum I/O pins | 26 |
External interrupts | 24 |
USB Interface | No |
USB Speed | No |
Series alternatives
A common alternative to the ATmega328 is the "picoPower" ATmega328P. A comprehensive list of all other member of the megaAVR series can be found on the Atmel website.[3]
Applications
As of 2013 the ATmega328 is commonly used in many projects and autonomous systems where a simple, low-powered, low-cost micro-controller is needed. Perhaps the most common implementation of this chip is on the popular Arduino development platform, namely the Arduino Uno and Arduino Nano models.
Programming
Reliability qualification shows that the projected data retention failure rate is much less than 1 PPM over 20 years at 85 °C or 100 years at 25 °C.[4]
Programming signal | Pin Name | I/O | Function |
---|---|---|---|
RDY/BSY | PD1 | O | High means the MCU is ready for a new command, otherwise busy. |
OE | PD2 | I | Output Enable (Active low) |
WR | PD3 | I | Write Pulse (Active low) |
BS1 | PD4 | I | Byte Select 1 (“0” = Low byte, “1” = High byte) |
XA0 | PD5 | I | XTAL Action bit 0 |
XA1 | PD6 | I | XTAL Action bit 1 |
PAGEL | PD7 | I | Program memory and EEPROM Data Page Load |
BS2 | PC2 | I | Byte Select 2 (“0” = Low byte, “1” = 2nd High byte) |
DATA | PC[1:0]:PB[5:0] | I/O | Bi-directional data bus (Output when OE is low) |
Programming mode is entered when PAGEL (PD7), XA1 (PD6), XA0 (PD5), BS1 (PD4) is set to zero.[2] RESET pin to 0V and VCC to 0V. VCC is set to 4.5 - 5.5V. Wait 60 μs, and RESET is set to 11.5 - 12.5 V. Wait more than 310 μs.[2] Set XA1:XA0:BS1:DATA = 100 1000 0000, pulse XTAL1 for at least 150 ns, pulse WR to zero. This starts the Chip Erase. Wait until RDY/BSY (PD1) goes high. XA1:XA0:BS1:DATA = 100 0001 0000, XTAL1 pulse, pulse WR to zero. This is the Flash write command.[2] And so on..
Symbol | Pins | I/O | Description |
---|---|---|---|
MOSI | PB3 | I | Serial data in |
MISO | PB4 | O | Serial Data out |
SCK | PB5 | I | Serial Clock |
Serial data to the MCU is clocked on the rising edge and data from the MCU is clocked on the falling edge. Power is applied to VCC while RESET and SCK are set to zero. Wait for at least 20 ms and then the Programming Enable serial instruction 0xAC, 0x53, 0x00, 0x00 is sent to the MOSI pin. The second byte (0x53) will be echoed back by the MCU.[2]
See also
- ATmega88
- ATmega168
Notes
- ↑ "ATmega328P". Retrieved 2016-07-14.
- 1 2 3 4 5 6 7 8 "Atmel 8-bit AVR Microcontrollers ATmega328/P Datasheet Complete" (PDF). Retrieved 2016-07-14.
- ↑ "megaAVR Microcontrollers". Atmel. Retrieved 2016-07-14.
- ↑ "Atmel 8-bit AVR Microcontrollers ATmega328/P Datasheet Summary" (PDF). June 2016. Retrieved 2016-07-14.
External links
- "ATmega328 documents". Atmel.