W poprzednich wpisach zamieściłem garść informacji, gdzie zaopatrzyć się w płytkę z mikroprocesorem AVR ATtiny2313 z 4 wyświetlaczami 7-segmentowymi LED, jak ją zmodernizować, jak wykonać samemu bardzo prosty programator AVR i jak zainstalować w Linuksie niezbędne pakiety i wygodne środowisko Eclipse by móc komfortowo pisać programy. Lista powiązanych wpisów znajduje się na końcu tego tekstu.
Dzisiaj pokażę prościutki program, który przetestuje naszą płytkę i przy okazji opiszę podstawową obsługę IDE Eclipse. Z części sprzętowej będzie potrzebna płytka stykowa (można się bez niej obejść, ale będzie mało wygodnie), 6 diod led – ja użyłem pomarańczowe o średnicy 3mm, sześć rezystorów o oporności z przedziału 470Ω…1kΩ, zasilacz o napięciu 5V, programator AVR i oczywiście mini płytka testowa z kabelkiem.
Opis podłączenia programatora do płytki można znaleźć w tym wpisie Najprostszy programator AVR za 3zł do mini płytki testowej. Kabelki z wtyczką, odzyskane z dekodera DSB-616 są różnokolorowe, opisałem je, zakładając, że biały kabel jest założony na pin 1 (czyli znajduje się najbliżej kondensatorów elektrolitycznych płytki). Pierwsza kolumna to numery pinów w gniazdku płytki, druga to kolory kabli, trzecia to ich przeznaczenie, czwarta zawiera tylko niezbędne do programowania:
Pin 1 - biały - +5V - +5V Pin 2 - szary - PB.7 - SCK Pin 3 - pomarańczowy - PB.5 - MOSI Pin 4 - niebieski - PB.4 Pin 5 - zielony - GND - GND Pin 6 - zółty - Reset - Reset Pin 7 - czerwony - PB.6 - MISO Pin 8 - brązowy - PA.0 Pin 9 - czarny - PA.1
Jeśli mamy już prawidłowo podłączony programator i zasilanie do płytki, to w linuksie trzeba nadać uprawnienia do portu LPT, poprzez wydanie komendy w terminalu:
sudo chmod a+rw /dev/parport0
Po wpisaniu hasła roota, zalogowany użytkownik dostanie odpowiednie prawa i będzie można bez przeszkód programować mikrokontroler.
Kolejny etap to uruchomienie Eclipse. O jego instalacji i konfiguracji pisałem tutaj: Instalacja narzędzi dla AVR i IDE Eclipse w Linux Mint. Podczas startu standardowo zostaniemy zapytani o domyślną ścieżkę dla projektów – można ustawić swoją lub zostawić domyślną. Gdy środowisko się uruchomi, wybieramy z górnego menu File->New…->C Project, w oknie jak niżej, w polu Project name wpisujemy nazwę projektu – będzie ona jednocześnie nazwą folderu – tutaj nie używamy polskich znaków i spacji:
Zatwierdzamy przyciskiem [Next >]. W następnym oknie Select Configurations odznaczamy opcję Debug, pozostawiamy tylko zaznaczoną pozycję Release. Po wciśnięciu [Next >] możemy zatwierdzić ustawienia przyciskiem [Finish] mimo iż wybrany jest zły MCU – ustawimy to później. W okienku po lewej o nazwie Project Explore powinniśmy widzieć swój projekt. Podświetlamy go klikając lewym klawiszem myszy, a z górnego menu wybieramy Project->Properties. W kolumnie po lewej rozwijamy grupę AVR i wybieramy AVRDude. W zakładce Programmer, klikamy na [New…] w polu Programmer Configuration. W polu Configuration Name wpisujemy nazwę dla tworzonej konfiguracji, np: Bascom_prog. Z lewej kolumny Programmer Hardware (-c) wybieramy posiadany programator, w naszym przypadku Bascom SAMPLE programming cable. Przycisk [OK] zamknie to okno, sprawdzamy czy konfiguracja jest ustawiona i wciskamy [Apply]. Teraz w kolumnie po lewej wybieramy Target Hardware – w polu MCU Type ustawiamy ATtiny2313, a w MCU Clock Frequence wpisujemy 8000000. Zatwierdzamy przyciskiem [Apply] i [OK].
Teraz klikając prawym myszy na naszym projekcie w lewej kolumnie wybieramy New…->Source File, wpisujemy nazwę pliku (bez spacji i polskich znaków) z rozszerzeniem .c:
Zatwierdzamy przyciskiem [Finish], w Eclipsie pojawi się edytor, w którym możemy pisać kod.
Napisałem kilka linijek w C. Jest to bardzo prosty program, jego zadaniem jest przetestowanie wszystkich portów pod kątem prawidłowego połączenia i braku zwarć. Oto cały kod:
#include <avr/io.h> #include <util/delay.h> int main (void) { unsigned char segment, cyfra; DDRA |= 0x03; DDRB = 0xFF; DDRD = 0xFF; PORTA &= 0xFC; PORTD = 0xFF; while (1) { for (cyfra = 0; cyfra < 8; cyfra++) { PORTD = 0xFF; PORTB = (1<<cyfra); _delay_ms(500); if (cyfra < 4) { for (segment = 0; segment < 7; segment++) { PORTD = ~(1<<segment); _delay_ms(500); } } } PORTB = 0x00; PORTA |= 0xFD; _delay_ms(500); PORTA &= 0xFC; PORTA |= 0xFE; _delay_ms(500); PORTA &= 0xFC; } }
Kod w takim zapisie jak wyżej jest średnio czytelny. Edytor w Eclipse posiada kolorowanie składni, dzięki czemu wszystko staje się o wiele bardziej przejrzyste. Plik mini_test.c i mini_test.hex można ściągnąć korzystając z linku na końcu tekstu.
Kod źródłowy w języku C musi zostać skompilowany i przetłumaczony na język maszynowy zrozumiały dla mikroprocesora. W tym celu upewniamy się, że nasz plik jest podświetlony w kolumnie po lewej, zapisujemy go ikonką dyskietki lub skrótem [CTRL]+[S] i wciskamy ikonkę młotka z menu w górnej części lub korzystamy z wygodnego skrótu [CTRL]+[B], przeglądamy okienko Console w poszukiwaniu ewentualnych problemów:
Załadowanie programu do mikroprocesora jest również łatwe – za pomocą ikony z napisem AVR* i strzałką w dół, lub wygodniej, skrótem [CTRL]+[ALT]+[U]. Również wynik działania otrzymamy w konsoli:
Jak widać, wszystko się powiodło i program został załadowany. Teraz od płytki koniecznie trzeba odłączyć zasilanie i programator oraz podłączyć diody LED plusem do portów mikrokontrolera i przez rezystor do masy. Poniżej schemat, który to ułatwi – dodatkowo przewody zostały oznaczone kolorami, tak jak w oryginale:
Po dwukrotnym sprawdzeniu poprawności połączeń – szczególnie zasilania, można podłączyć napięcie +5V do płytki. Jeśli wszystko jest OK, powinny zapalać się pojedyncze segmenty pierwszego wyświetlacza, później drugiego itd., a na końcu diody LED. Jeśli podczas całego testu świeci się jednocześnie tylko jeden segment lub tylko jedna dioda, to płytkę możemy uznać za w pełni sprawną.
Poniżej krótki filmik z działania mojego programu (diody LED nie zapalają się w kolejności, bo tak zostały podłączone):
Jak pisałem na wstępnie, podaję linki do poprzednich wpisów związanych z płytką testową:
Jeśli chciałbyś szybko przyswoić język C i programować mikroprocesory AVR, polecam ten kurs: KURS C programowania mikrokontrolerów AVR.
Kod źródłowy i plik wynikowy użyty w tym wpisie pobierzesz tu:
>> POBIERZ pliki mini_test
W kolejnym wpisie dotyczącym mini płytki AVR udostępnię program termometru z wykorzystaniem popularnego czujnika DS18b20.
Radio nieodłącznie kojarzy się z nieśmiertelnym FM lub transmisją intermetową. Standard DAB+ wydaje się być…
Poniżej opiszę odpowiednik drogiej (w stosunku do pojemności) baterii 9V o oznaczeniu 6F22. Ze względu…
Widząc migającą na pomarańczowo lampę ostrzegawczą, zastanawiałem się (ciekawe czy tylko ja) jak jest zbudowana,…
W tym wpisie przedstawię bardzo ciekawe narzędzie na RaspberryPi, przydatne każdemu administratorowi urządzeń sieciowych. W…
Poniżej opiszę mały, przydatny gadżet, który przechwytuje obraz i dźwięk z portu HDMI i przekazuje…
Tytuł tego wpisu zawiera część komunikatu z menedżera urządzeń systemu Windows 11, po wsadzeniu w…
Zobacz komentarze