ATmega328P Microcontroller
The ATmega328P microcontroller is the heart of the Arduino Uno. Processes data in 8-bit chunks. Its versatility and ease of use make it a common choice in hobbyist and educational microcontroller boards.
Key Features of the ATmega328P:
- RISC Architecture: This system uses Reduced Instruction Set Computing (RISC) architecture, simplifying instruction processing and allowing faster execution.
- Low Power Consumption: It’s designed for low-power applications, making it suitable for portable and battery-powered projects.
- 32 KB Flash Memory: Used to store the program written by the user, including variables and constants. This is non-volatile memory, meaning it retains data even when the board is powered off.
- 2 KB SRAM: The Static RAM (SRAM) is used for temporary storage during program execution, storing variables and arrays. It’s volatile, so data is lost when the board powers off.
- 1 KB EEPROM: Electrically Erasable Programmable Read-Only Memory (EEPROM) is used to store small amounts of data permanently, even when the board is powered off. Useful for saving configuration settings.
Voltage Regulator
The voltage regulator on the Arduino Uno ensures that the board and its components receive a stable 5V supply, regardless of input variations. The Arduino Uno can accept an input range of 7V to 12V through the DC barrel jack, but the voltage regulator adjusts this to a consistent 5V for the microcontroller and other components. This stability is crucial for accurate sensor readings and reliable operation of connected devices.
Importance of the Voltage Regulator:
- Prevents Damage: Regulates high input voltages to prevent damage to sensitive components.
- Stabilises Power: Supplies a consistent voltage even when the input fluctuates.
- Protects against Reverse Polarity: Some boards include reverse polarity protection to prevent damage if the power source is connected backward.
USB Interface (ATmega16U2)
The USB interface on the Arduino Uno is controlled by the ATmega16U2 microcontroller, which acts as a USB-to-serial converter. This interface allows the board to communicate with a computer for programming and data exchange. When connected via USB, the board is powered, and data can be sent through the Serial Monitor in the Arduino IDE.
Functions of the USB Interface:
- Data Transmission: Allows for code uploading and serial communication between the Arduino and a computer.
- Power Supply: Provides a 5V power source from the USB port, useful for development without an external power source.
- Serial Communication: Facilitates data exchange for debugging, monitoring, and controlling components attached to the Arduino.
Digital I/O Pins (0-13)
The Arduino Uno has 14 digital I/O pins, each of which can be configured as either an input or an output. These pins are versatile and can handle various tasks, from reading digital sensors to controlling LEDs and motors.
- Digital Output: When set as outputs, digital pins can send a HIGH (5V) or LOW (0V) signal, turning devices like LEDs on or off.
- Digital Input: When set as inputs, digital pins can detect whether a signal is HIGH or LOW. This is useful for reading buttons, switches, or digital sensors.
Pulse Width Modulation (PWM) Pins
- Six digital pins (3, 5, 6, 9, 10, and 11) can Pulse Width Modulation (PWM). PWM simulates analogue control by switching the digital pin on and off at varying frequencies. This is useful for controlling brightness in LEDs and speed in DC motors.
Example of Using Digital Pins:
To set pin seven as an output and control an LED, we use:
pinMode(7, OUTPUT);
digitalWrite(7, HIGH); // Turn the LED on
digitalWrite(7, LOW); // Turn the LED off
4.5 Analog Input Pins (A0-A5)
The Arduino Uno has six analogue input pins labelled A0 to A5. These pins are connected to an analog-to-digital converter (ADC) within the ATmega328P, allowing the board to measure varying voltage levels from 0 to 5V. The ADC converts these voltages into a digital value between 0 and 1023, providing 10-bit resolution.
Applications of Analog Pins:
- Sensor Reading: Analog pins are commonly used to read values from analogue sensors, such as temperature, light, or potentiometers.
- Custom Reference Voltage: Users can adjust the range and sensitivity of the analogue readings by connecting a reference voltage to the AREF pin.
Example of Reading from an Analog Pin:
To read and print the value from an analogue sensor connected to pin A0:
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
Power Pins
The power section of the Arduino Uno includes several pins that supply different voltage levels and serve different functions.
- 5V Pin: Provides a 5V output, which is the main power source for most external components.
- 3.3V Pin: Provides a 3.3V output, useful for sensors and modules that operate at this lower voltage.
- GND (Ground) Pins: There are several GND pins on the board. They are essential for completing circuits and should be connected to the ground of any external components used with the Arduino.
- VIN Pin: If an external source powers the Arduino, this pin will have the same voltage as the input. It can be used to supply power to external devices that need the same voltage as the input source.
Example of Using the 5V and GND Pins:
To power an external LED with a resistor, connect the LED’s positive leg to the 5V pin, its negative leg to a resistor, and the resistor to the GND pin.
4.7 Reset Button and Reset Pin
The reset button restarts the program running on the Arduino Uno, which is helpful during debugging and testing. There is also a dedicated reset pin, which, when connected to ground, performs the same function as the reset button.
Applications of Reset:
- Restart the Program: Useful for quickly restarting a program without disconnecting power.
- External Reset Circuits: The reset pin can be connected to external circuits that automatically reset the Arduino, useful for projects requiring periodic restarts.
4.8 ICSP Heade
The ICSP (In-Circuit Serial Programming) header is a six-pin interface used to program the ATmega328P microcontroller directly, bypassing the USB interface. This is particularly useful for advanced users who want to reload the bootloader or program the microcontroller directly with custom code.
4.9 LEDs on the Arduino Uno
There are a few onboard LEDs with specific functions that aid in debugging and monitoring.
- Power LED (ON): Indicates that the board is receiving power.
- TX and RX LEDs: Flash when data is transmitted (TX) or received (RX) through the USB or serial interface. They are useful for monitoring communication.
- Built-in LED (Pin 13): This LED is connected to pin 13 and can be controlled by the user. It’s helpful for simple tests and debugging, as it allows testing without external components.
4.10 AREF Pin (Analog Reference)
The AREF pin (Analog Reference) allows for the connection of an external reference voltage for the analog input pins. This feature is useful when more accurate or custom voltage ranges are needed for analog readings.
To use the AREF pin, the following command should be added to setup()
analogReference(EXTERNAL);
This sets the Arduino to use the external voltage connected to AREF as the reference for analogue readings instead of the default 5V.