1) Cel lekcji
W tej lekcji przestajesz myśleć o LED-zie jako o „jednym pinie”. Zaczynasz traktować port mikrokontrolera jako 8-bitową magistralę wyjść.
- sterowanie wieloma diodami jednocześnie,
- używanie masek bitowych,
- tworzenie wzorców świecenia,
- praca na całym rejestrze PORT.
To jest fundament pod: wyświetlacze LED, linijki świetlne, wskaźniki, multipleksowanie.
2) Konfiguracja sprzętowa
Podłącz diody LED (z rezystorami) do portu PORTB:
- PB0 – LED1
- PB1 – LED2
- PB2 – LED3
- PB3 – LED4
Wspólna masa (GND), zasilanie 5V jak w poprzedniej lekcji.
3) Ustawienie wielu wyjść jednocześnie
DDRB |= (1 << PB0) | (1 << PB1) | (1 << PB2) | (1 << PB3);
Jedna linia kodu ustawia cztery piny naraz.
Wniosek:
Rejestr DDRB to tylko liczba 8-bitowa. Operujesz na bitach, nie na „pinach”.
Rejestr DDRB to tylko liczba 8-bitowa. Operujesz na bitach, nie na „pinach”.
4) Zapalanie kilku LED jednocześnie
PORTB |= (1 << PB0) | (1 << PB2); // LED1 i LED3
Możesz sterować dowolną kombinacją diod jednym zapisem.
5) Wzorce świecenia – podejście binarne
PORTB = 0b00001111; // wszystkie 4 LED ON
_delay_ms(500);
PORTB = 0b00000000; // wszystkie OFF
_delay_ms(500);
To dokładnie to samo, co:
PORTB = 0x0F;
Uwaga dydaktyczna:
Zapis binarny jest czytelniejszy na początku nauki niż heksadecymalny.
Zapis binarny jest czytelniejszy na początku nauki niż heksadecymalny.
6) Efekt „biegnącego światła”
while (1)
{
PORTB = (1 << PB0); _delay_ms(200);
PORTB = (1 << PB1); _delay_ms(200);
PORTB = (1 << PB2); _delay_ms(200);
PORTB = (1 << PB3); _delay_ms(200);
}
To klasyczny efekt testowy stosowany w elektronice i automatyce.
7) Biegnące światło – wersja logiczna (shift)
uint8_t pattern = 0x01;
while (1)
{
PORTB = pattern;
_delay_ms(200);
pattern <<= 1;
if (pattern > 0x08) pattern = 0x01;
}
To jest bardzo ważny moment.
Właśnie używasz przesunięć bitowych jak w prawdziwych sterownikach LED.
Właśnie używasz przesunięć bitowych jak w prawdziwych sterownikach LED.
8) Zadania praktyczne – poziom podstawowy
- Zapal wszystkie LED naraz.
- Zrób miganie: wszystkie ON / wszystkie OFF.
- Zrób efekt „prawo → lewo”.
9) Zadania praktyczne – poziom średni
- Zrób „licznik binarny” na 4 LED.
- Zwiększaj wartość co 300 ms.
- Zresetuj licznik po 15.
10) Zadanie rozszerzające
Zaimplementuj tablicę wzorców:
uint8_t patterns[] = {
0b0001,
0b0011,
0b0111,
0b1111
};
I odtwarzaj je w pętli.
Jeśli to rozumiesz – jesteś gotowy na przyciski i warunki logiczne.