# Arduino Nano - Atmel MEGA328P

## Pinout

[![Arduino-Nano-Pinout-Large.png](https://wiki.hexadust.net/uploads/images/gallery/2024-12/scaled-1680-/R6ZtvvBFPpVNeDfS-arduino-nano-pinout-large.png)](https://wiki.hexadust.net/uploads/images/gallery/2024-12/R6ZtvvBFPpVNeDfS-arduino-nano-pinout-large.png)

- 5V - comes form USB-C VBUS and/or output of the regulator (VIN); MCU has operating voltage of 1.8 - 5.5V
- VIN - goes to the regulator and can be maximum 15 V; minimum 5 + ~1.1 (dropout) for regulator to regulate; MCU should run with 2.9 V
- 3V3 - output from USB-UART
- D13/PB5 is connected to LED

<details id="bkmrk-schematics"><summary>Schematics</summary>

![1ee669b8983149d48d41557d41e3fcb1.png](https://wiki.hexadust.net/uploads/images/gallery/2024-12/scaled-1680-/JzuORuvMSETUol5q-1ee669b8983149d48d41557d41e3fcb1.png)

</details>
## Atmel MEGA328P

- <span class="parametrics-key">Clock: 16 MHz</span>
- <span class="parametrics-key">Program Memory Size: </span><span class="parametrics-value">32 KiB</span>
- <span class="parametrics-key">RAM: </span><span class="parametrics-value">2 </span>KiB
- <span class="parametrics-key">Data EEPROM:</span><span class="parametrics-value"> 1 KiB</span>

[![atmega.jpg](https://wiki.hexadust.net/uploads/images/gallery/2024-12/scaled-1680-/7USYZ539xBdLo43z-atmega.jpg)](https://wiki.hexadust.net/uploads/images/gallery/2024-12/7USYZ539xBdLo43z-atmega.jpg)

Datasheet: [ATmega48A-PA-88A-PA-168A-PA-328-P-DS-DS40002061B.pdf](https://wiki.hexadust.net/attachments/54)

## LM1117C 50 - 5V regulator

[![arduino_nano_lm.jpg](https://wiki.hexadust.net/uploads/images/gallery/2024-12/scaled-1680-/HHQmAbjF8lTminS3-arduino-nano-lm.jpg)](https://wiki.hexadust.net/uploads/images/gallery/2024-12/HHQmAbjF8lTminS3-arduino-nano-lm.jpg)

Datasheet: [lm1117.pdf](https://wiki.hexadust.net/attachments/55)

### CH340C - USB-UART

Datasheet: [CH340DS1.PDF](https://wiki.hexadust.net/attachments/58)

## Programming  


### Arduino / avrdude

Install IDE (and `avrdude`):

```
xi arduino
```

The board shows up on `/dev/ttyUSB0` and can be programmed with `CTRL-R` (**Compile/Verify**) and `CTRL-U` (**Upload**).

### Rust

- [https://book.avr-rust.org/](https://book.avr-rust.org/)
- [https://github.com/avr-rust/awesome-avr-rust](https://github.com/avr-rust/awesome-avr-rust)
- [https://github.com/Rahix/avr-hal](https://github.com/Rahix/avr-hal)

```
cargo +stable install --locked ravedude
cargo install cargo-generate
cargo generate --git https://github.com/Rahix/avr-hal-template.git # Select: Arduino Nano New Bootloader

# May need specific compiler version to work (see rust-toolchain.toml)
rustup override set nightly-2024-03-22
rustup component add rust-src --toolchain nightly-2024-03-22-x86_64-unknown-linux-gnu

cargo build
RAVEDUDE_PORT=/dev/ttyUSB0 cargo run
```