📘 Lekcja 1: Wprowadzenie do mikrokontrolerów AVR

Cel: zrozumieć, czym jest mikrokontroler AVR, jak działa „w środku” i dlaczego ATmega328P jest dobrym startem do nauki.

Poziom: od podstaw Czas: 45–90 min Wynik: rozumiesz fundamenty AVR

1) Co to jest mikrokontroler?

Mikrokontroler to „komputer w jednym układzie scalonym”, zaprojektowany do sterowania urządzeniami. W odróżnieniu od komputera PC, mikrokontroler ma wbudowane: pamięć programu, pamięć danych oraz zestaw peryferiów (np. timery, PWM, ADC, UART), które pozwalają bezpośrednio sterować światem fizycznym: diodami, silnikami, czujnikami, wyświetlaczami.

Najważniejsza idea Mikrokontroler wykonuje program krok po kroku, a jego „wejścia/wyjścia” łączą kod z elektroniką (piny GPIO).

2) AVR – czym się wyróżnia?

AVR to rodzina 8-bitowych mikrokontrolerów (historycznie Atmel, dziś Microchip), bardzo popularna w edukacji i prostych projektach embedded. Ich mocną stroną jest prostota, przewidywalność działania, dobre narzędzia (GCC-AVR, avrdude) oraz ogromna baza przykładów.

Typowe cechy AVR (w praktyce)

  • 8-bitowe CPU – operacje na bajtach, proste i szybkie sterowanie I/O.
  • Architektura Harvard – osobna pamięć dla programu i danych (szybszy dostęp).
  • RISC – prosty zestaw instrukcji, wiele instrukcji wykonuje się w 1 cyklu.
  • Rejestry I/O – sterowanie pinami i peryferiami przez zapis/odczyt rejestrów.
AVR - uproszczony schemat blokowy (CPU, pamięć, peryferia)
1 – Uproszczony schemat blokowy AVR: CPU + pamięci + peryferia + porty I/O.

3) „Co siedzi w środku” – najważniejsze bloki

Blok Co robi? Dlaczego to ważne w kursie?
CPU Wykonuje instrukcje programu (pobierz → wykonaj → przejdź dalej). Od tego zależy logika programu, pętle, warunki, reakcja na zdarzenia.
FLASH Pamięć programu – tu znajduje się Twój kod po wgraniu HEX. Wyjaśnia, skąd się bierze plik HEX i dlaczego program „zostaje” po odłączeniu zasilania.
SRAM Pamięć danych – zmienne w czasie działania programu. Tu żyją Twoje zmienne, bufory i wyniki obliczeń.
EEPROM Pamięć nieulotna danych (konfiguracje, licznik, ustawienia). Przydatna, gdy coś ma przetrwać restart (zrobimy to w dalszych projektach).
GPIO Piny wejścia/wyjścia – sterowanie LED, odczyt przycisków itd. To baza pierwszych lekcji (LED, przyciski, RGB, 7-seg).
Timery / PWM Odmierzanie czasu i generowanie sygnałów PWM. Klucz do „porządnych” opóźnień, regulatora jasności, dźwięku, itd.
ADC Przetwornik analogowo-cyfrowy – pomiar napięć z czujników. Wejście w świat czujników i pomiarów (później lekcja ADC).

4) ATmega328P – dlaczego akurat on?

ATmega328P to jeden z najpopularniejszych AVR – znany z Arduino UNO, ale my w tym kursie pracujemy „bliżej metalu”, czyli bez warstwy Arduino, bez gotowych funkcji typu digitalWrite(). Dzięki temu rozumiesz, co naprawdę dzieje się w układzie i jak pisać kod na poziomie rejestrów.

ATmega328P - ogólny pinout lub poglądowe rozmieszczenie portów
2– ATmega328P: porty, piny zasilania, reset, zegar.

Co będziemy robić na ATmega328P?

  • GPIO: LED, przyciski, logika sterowania
  • Timery: precyzyjne odmierzanie czasu, przerwania
  • PWM: regulacja jasności, dźwięk
  • Wyświetlacze: 7-segment (1 cyfra i multipleks)
  • ADC: pomiar napięcia, proste czujniki

5) Podstawy: jak mikrokontroler „myśli” (cykl pracy)

Mikrokontroler wykonuje instrukcje w pętli: pobiera kolejną instrukcję z pamięci programu (FLASH), wykonuje ją w CPU i przechodzi do następnej. „Reakcje na świat” realizujemy przez:

  • odczyt wejść (np. stan przycisku),
  • zapis na wyjścia (np. LED ON/OFF),
  • przerwania (zdarzenie wywołuje kod natychmiast),
  • timery (czas i PWM).
Ważne (błąd początkujących) „Opóźnienia” z _delay_ms() są OK na start, ale docelowo będziemy przechodzić na timery i przerwania, bo dają kontrolę i nie blokują programu.

6) Mini-powtórka: systemy liczbowe w elektronice

W embedded bardzo często zapisujemy wartości w systemie szesnastkowym (HEX), bo ładnie mapuje się na bity i bajty. Przykład: bajt ma 8 bitów, więc zakres to 0–255 (czyli 0x00–0xFF).

// Przykłady zapisów tej samej wartości:
255   // dziesiętnie
0xFF  // szesnastkowo
0b11111111 // binarnie (dla czytelności)
Bity, bajty i zapis HEX (poglądowa grafika)
3 – Zależność: bity → bajt → zapis w HEX.

7) Sprawdź się (krótki quiz)

  1. Wymień 3 różnice między mikrokontrolerem a komputerem PC.
  2. Co oznacza architektura Harvard w kontekście pamięci?
  3. Do czego służą GPIO?
  4. Dlaczego HEX jest tak często używany w embedded?
Zadanie domowe (5–10 minut) Otwórz datasheet ATmega328P (wystarczy 1–2 strony) i znajdź:
  • Jakie ma napięcie zasilania (zakres)?
  • Ile ma pamięci FLASH i SRAM?
  • Jak nazywają się porty I/O?