Zaczynamy od podstaw programowania w C naszych mikro kontrolerów.
Aby zapoznać się z danym mikro kontrolerem , zalecam zapoznanie się z jego kartą katalogową. Będą w niej informacje na temat wszystkich wyprowadzeń, przerwań, timerów, schematy połączeń, komendy, rejestry i wiele innych cennych informacji.
W naszym przypadku zaczynamy zabawę z mikro kontrolerem o nazwie
Attiny2313. Kontroler ten posiada 20 pinów we/wy. Piny pełnią zazwyczaj kilka funkcji i każdy ma swoją nazwę, a w nawiasie alternatywne działanie.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJSOosWEuATX5SQjIt1FONmRFy079zbRkTLjkhLjVgtSfc3XKp1hRgTIIl7Kdsp4CmVtjsTtFDAKkMOHB_iN59UCfc80Ot043XrgXotf1Im03LyDmtSUEvD-4yC3QfUgls96eJCAxZ7FMx/s320/piny.png) |
Schemat wyprowadzeń attiny2313 |
Jak widać nasz kontroler posiada piny
A,B i
D. Nazwane są kolejno
PORTA, PORTB i PORTD.
Każdy z portów posiada trzy rejestry:
DDRx, PORTx i PINx . W miejsce x wstawiamy nazwy pinów np.
DDRA, PORTA, PINA.
Opisanie poszczególnych rejestrów:
Stan bitów w rejestrze
DDRx odpowiada za to czy dany port jest wejściem (
0) czy wyjściem(
1).
Przykład:
DDRB = 0xFF ustawia wszystkie piny (PB0..PB7) portu A jako wyjścia.
DDRB = 0x01 ustawia pin PB0 jako wyjścia, a reszta pinów (PB1..PB7) jako wejścia.
Rejestr
PORTx ustawiamy stan danego pinu na wysoki(1) lub niski(0) , ale tylko w przypadku jeżeli rejestr
DDRx ustawiony jest jako wyjście(1).
Przykład:
DDRB = 0xF0 ustawia piny PB4..PB7 jako wyjścia
PORTB = 0xF0 ustawian pinom PB4..PB7 stan wysoki na wyjściu
Rejestr
PINx służy do odczytu stanu napięcia na danym pinie, w przypadku kiedy DDRx ustawiliśmy jako wejścia(0).
Jak widać do każdego rejestru wartości wpisujemy w systemie szesnastkowym (HEX).
Najłatwiej można to zapamiętać w taki sposób że mamy rejestr 8 bitowy, dzielimy na pół i mamy 4 starsze i 4 młodsze bity. Literaz F szesnastkowo to binarnie 1111, cyfra 0 szesnastkowo to binarnie 0000, łącząc te dwa znaki F0 otrzymamy 11110000 czyli piny Px4..Px7 ustawimy na stan wysoki.
Jak zmieniać pojedyńcze wartości w rejestrze? Otóż musimy używać operatorów bitowych takich jak:
OR (lub) |
np.
PORTB |= (1<<3) ustawi 3 bit na 1
AND (i) &
np.
PORTB &= (1<<5) ustawi 5 bit na 0
Z odczytywaniem wartości na poszczególnych pinach jest podobnie.
przykład
if(PINB & 0x02) jeżeli drugi pin (PB1) ustawiony jest na wartość 1 to wykona się instrukcja
kolejny przykład pokazuje jeżeli wartość wynosi 0
if(PIN & 0x04) jeżeli trzeci pin (PB2) ustawiony na 0 to wykona się instrukcja
Wymienione zostały najważniejsze komendy i rejestry jakie będą potrzebne na początek. Warto się ich nauczyć i przećwiczy , ponieważ znacznie ułatwią nam pisanie programów. Polecam podłączenie paru diod LED, oraz paru przycisków i sprawdzać co się dzieje. Można również podłączyć wyświetlacz 7 segmentowy i podłączać do każdej "nóżki" inny port mikro kontrolera, w celu testowania różnych ustawień.