From 43dc5b859a2f20f490e7e5b25708ac0dbbfcadd1 Mon Sep 17 00:00:00 2001 From: christian Date: Sat, 24 Oct 2026 13:20:18 +0200 Subject: [PATCH] Add ATmega328P CH340 profile and SOS sketch --- README.md | 21 +++++++ boards/atmega328p-ch340/README.md | 60 +++++++++++++++++++ sketches/atmega328p-ch340/sos_blink/README.md | 28 +++++++++ .../atmega328p-ch340/sos_blink/sos_blink.ino | 46 ++++++++++++++ 4 files changed, 155 insertions(+) create mode 100644 boards/atmega328p-ch340/README.md create mode 100644 sketches/atmega328p-ch340/sos_blink/README.md create mode 100644 sketches/atmega328p-ch340/sos_blink/sos_blink.ino diff --git a/README.md b/README.md index f6eb110..a040ad9 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,22 @@ Minima har ikke LED-matrix eller Qwiic-stik. CAN kræver en ekstern transceiver. Detaljer, identifikation og links findes i [`boards/arduino-uno-r4-minima`](boards/arduino-uno-r4-minima/README.md). +### ATmega328P + CH340 (UNO/Nano-kompatibelt) + +- **MCU:** ATmega328P, identificeret via signatur `1E 95 0F` +- **USB-seriel:** WCH CH340, `VID 1A86 / PID 7523` +- **Bootloader:** STK500v1/Optiboot-kompatibel ved 115200 baud +- **Hukommelse:** 32 KB flash, 2 KB SRAM og 1 KB EEPROM +- **Typiske interfaces:** GPIO, PWM, UART, I²C, SPI og 10-bit ADC +- **Onboard:** normalt bruger-LED på D13 samt reset-knap +- **Trådløst og sensorer:** ingen indbyggede +- **Anvendt FQBN:** `arduino:avr:uno` + +USB-identiteten kan ikke skelne sikkert mellem en UNO R3-klon og en nyere +Nano-klon. Profilen bruger derfor det verificerede hardwaregrundlag frem for et +ugaranteret produktnavn. Detaljer findes i +[`boards/atmega328p-ch340`](boards/atmega328p-ch340/README.md). + ## Projektstruktur Boards og sketches bruger samme stabile board-id: @@ -77,6 +93,11 @@ dokumentation, forbindelser og biblioteker beskrives ved den enkelte sketch. - [`sos_blink`](sketches/arduino-uno-r4-minima/sos_blink) – SOS i morsekode på den indbyggede LED +### ATmega328P + CH340 + +- [`sos_blink`](sketches/atmega328p-ch340/sos_blink) – SOS i morsekode på den + standardmæssige D13-LED + ## Tilføjelse af flere boards Nye boards får en profil under `boards//` og deres sketches placeres diff --git a/boards/atmega328p-ch340/README.md b/boards/atmega328p-ch340/README.md new file mode 100644 index 0000000..e95bda3 --- /dev/null +++ b/boards/atmega328p-ch340/README.md @@ -0,0 +1,60 @@ +# ATmega328P + CH340 Arduino-kompatibelt board + +## Identifikation + +| Felt | Verificeret værdi | +| --- | --- | +| Aktuel port | `COM8` | +| USB-serielchip | WCH CH340 | +| USB-ID | `VID 1A86 / PID 7523` | +| Mikrocontroller | ATmega328P | +| MCU-signatur | `1E 95 0F` | +| Bootloaderprotokol | STK500v1/Arduino | +| Uploadhastighed | 115200 baud | +| Anvendt Arduino CLI FQBN | `arduino:avr:uno` | + +Identiteten blev kontrolleret skrivebeskyttet med `avrdude`; flashhukommelsen +blev ikke ændret. CH340 og denne bootloaderkombination bruges både på UNO +R3-kloner og nyere Nano-kloner. Den præcise formfaktor kan derfor kun afgøres +ud fra boardets fysiske layout eller silketryk. + +## Out-of-the-box + +Et standard Arduino-kompatibelt ATmega328P-board tilbyder: + +- bruger-LED på D13; +- digitale ind- og udgange; +- seks PWM-kanaler; +- analoge målinger med 10-bit ADC; +- UART, I²C/TWI og SPI; +- eksterne interrupts og pin-change interrupts; +- hardwaretimere, watchdog og 1 KB ikke-flygtig EEPROM. + +Boardet har normalt ingen indbyggede sensorer, Wi-Fi eller Bluetooth. Antallet +af analoge pins og strømforsyningsmuligheder afhænger af, om den fysiske model +er UNO-, Nano- eller en anden ATmega328P-kompatibel variant. + +## Typiske MCU-data + +| Egenskab | Værdi | +| --- | --- | +| Arkitektur | 8-bit AVR | +| Typisk clock | 16 MHz | +| Flash | 32 KB, inklusive bootloader | +| SRAM | 2 KB | +| EEPROM | 1 KB | +| ADC | 10-bit | +| Timere | 2 × 8-bit og 1 × 16-bit | +| Typisk logikniveau | 5 V; kontrollér altid boardets mærkning | + +## Sketches i dette repo + +- [`sos_blink`](../../sketches/atmega328p-ch340/sos_blink) – blinker SOS i + morsekode med den standardmæssige indbyggede LED + +## Kilder + +- [Arduino UNO R3 hardware documentation](https://docs.arduino.cc/hardware/uno-rev3/) +- [Arduino Nano hardware documentation](https://docs.arduino.cc/hardware/nano/) +- [Arduino AVR core board definitions](https://github.com/arduino/ArduinoCore-avr/blob/master/boards.txt) +- [ATmega328P datasheet](https://docs.arduino.cc/resources/datasheets/ATmega328P-datasheet.pdf) diff --git a/sketches/atmega328p-ch340/sos_blink/README.md b/sketches/atmega328p-ch340/sos_blink/README.md new file mode 100644 index 0000000..f6aa8be --- /dev/null +++ b/sketches/atmega328p-ch340/sos_blink/README.md @@ -0,0 +1,28 @@ +# SOS Blink + +Blinker `SOS` (`... --- ...`) i morsekode med den standardmæssige indbyggede +LED på D13. Sketchen kræver ingen eksterne komponenter. + +En tidsenhed er 200 ms: + +- prik: 1 enhed tændt +- streg: 3 enheder tændt +- mellemrum mellem signaler: 1 enhed +- mellemrum mellem bogstaver: 3 enheder +- mellemrum mellem gentagelser: 7 enheder + +## Kompilering + +```powershell +arduino-cli compile --fqbn arduino:avr:uno sketches/atmega328p-ch340/sos_blink +``` + +## Upload + +Boardet blev registreret på `COM8` med en 115200-baud Optiboot-kompatibel +bootloader: + +```powershell +arduino-cli upload --port COM8 --fqbn arduino:avr:uno sketches/atmega328p-ch340/sos_blink +``` + diff --git a/sketches/atmega328p-ch340/sos_blink/sos_blink.ino b/sketches/atmega328p-ch340/sos_blink/sos_blink.ino new file mode 100644 index 0000000..32b1aa7 --- /dev/null +++ b/sketches/atmega328p-ch340/sos_blink/sos_blink.ino @@ -0,0 +1,46 @@ +// SOS in Morse code on a standard ATmega328P Arduino-compatible board. +// S = ... O = --- S = ... + +constexpr unsigned long UNIT_MS = 200; + +void blinkSymbol(unsigned long onUnits) { + digitalWrite(LED_BUILTIN, HIGH); + delay(onUnits * UNIT_MS); + digitalWrite(LED_BUILTIN, LOW); + + // Every Morse symbol is followed by a one-unit gap. + delay(UNIT_MS); +} + +void blinkLetter(const char *pattern) { + for (const char *symbol = pattern; *symbol != '\0'; ++symbol) { + blinkSymbol(*symbol == '.' ? 1 : 3); + } +} + +void letterGap() { + // blinkSymbol() already supplied the first of the three gap units. + delay(2 * UNIT_MS); +} + +void wordGap() { + // blinkSymbol() already supplied the first of the seven gap units. + delay(6 * UNIT_MS); +} + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + digitalWrite(LED_BUILTIN, LOW); +} + +void loop() { + blinkLetter("..."); + letterGap(); + + blinkLetter("---"); + letterGap(); + + blinkLetter("..."); + wordGap(); +} +