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.
Mega tanie, bezprzewodowe moduły Internet of Things na dobre zadomowiły się w naszych sieciach. Od…
Pewnie nie każdy posiadacz tytułowej stacji lutowniczej wie, że posiada ona możliwość aktualizacji firmware'u. Producent…
Jakiś czas temu, przeglądając Aliexpress natknąłem się na ciekawy shield do Arduino Nano. Według opisu…
W mailach i komentarzach kilka razy przewijała się prośba o ten wpis. Chodzi o aktualizację…
Dziś tematyka audio, a nawet audiofilska. Uznany wzmacniacz słuchawkowy Lehmann Black Cube Linear o dość…
Tradycyjnie w styczniu, publikuję podsumowanie minionego roku na stronie grylewicz.pl. Poniżej trochę liczb, lista najpopularniejszych…
Zobacz komentarze