W pierwszym odcinku kursu zainstalowaliśmy pakiet programów WinAVR, nauczyliśmy się kompilować kody źródłowe programów oraz ładować programy do pamięci flash mikrokontrolera AVR. W tej części kursu zaczniemy pisać proste programy w języku C, poznamy w jaki sposób programować równoległe porty wejścia/wyjścia układów AVR. Zaczniemy od naprawdę prostych przykładów :), zupełnie od zera. Jeśli i tak coś w tekście będzie niezrozumiałe, to nie należy szybko się zniechęcać, w trakcie dalszej lektury kursu powinno się wyjaśnić.
Układ atmega8 w obudowie DIP28, na którym będziemy uruchamiać przykładowe programy, posiada 28 wyprowadzeń, z których 23 mogą służyć jako uniwersalne binarne wejścia/wyjścia. Linie we/wy atmega8 podzielone są na trzy grupy, nazwane: PORTB, PORTC i PORTD. Mikrokontrolery AVR w obudowach DIP40(atmega16, atmega32) posiadają cztery porty: A,B,C,D; natomiast attiny2313 w obudowie DIP20, posiada: PORTA (tylko PA0..PA2), PORTB i PORTD(PD0..PD6).
PORTB układu atemga8 posiada osiem linii we/wy (PB0..PB7), ale jeśli zamierzamy podłączyć do mikrokontrolera rezonator, to linie PB6 i PB7 odpadają. Z kolei wyprowadzenia: 17(PB3), 18(PB4) i 19(PB4) wykorzystywanie są przy programowaniu szeregowym ISP pamięci flash mikrokontrolera. PORTC uC atmaga8 posiada 7 linii we/wy (PC0..PC6), ale wyprowadzenie 1(PC6) normalnie pełni rolę wejścia sygnału reset mikroprocesora. Aby wykorzystywać wyprowadzenie 1(PC6) atmeg8 jako kolejną linię portu we/wy, potrzeba zaprogramować fuse-bit RSTDISBL (na temat fuse-bitów będę pisał), lecz w ten sposób pozbawimy się możliwości programowania szeregowego ISP pamięci FLASH mikrokontrolera. PORTD atmega8 posiada 8 linii we/wy (PD0..PD7).
Każda z wymienionych linii we/wy układu atmega8 może zostać indywidualnie skonfigurowana jako binarne wejście lub wyjście. Domyślnie wszystkie ustawione są wejściami z wyjątkiem wyprowadzenia 1 (RESET|PC6), które jest normalnie w atmega8 wejściem sygnału RESET mikroprocesora.
W dalszej części artykułu, znajdziesz szczegółowe opis następujących zagadnień: