Portal dla pasjonatów motoryzacji

Programowanie kontrolerów atmel dla początkujących. Budowa i programowanie mikrokontrolerów AVR

Lekcja 0

Tak więc dzisiaj otwieramy serię lekcji na temat programowania mikrokontrolerów z rodziny AVR.

Dzisiaj zostaną omówione następujące kwestie:

  1. Co to jest mikrokontroler?
  2. Gdzie stosuje się mikrokontrolery?

Wstęp.

Mikrokontrolery są wszędzie. W telefonach, pralkach, „inteligentnych domach”, obrabiarkach w fabryce, a także w niezliczonej liczbie urządzeń technicznych. Ich powszechne zastosowanie umożliwia zastąpienie skomplikowanych układów analogowych bardziej skompresowanymi układami cyfrowymi.

Czym więc jest mikrokontroler?

mikrokontroler (Jednostka mikrokontrolera, MCU) - mikroukład przeznaczony do sterowania urządzeniami elektronicznymi. Można go sobie wyobrazić jako prosty komputer, który może wchodzić w interakcję z urządzeniami zewnętrznymi. Na przykład otwierać i zamykać tranzystory, odbierać dane z czujników temperatury, wyświetlać dane na ekranach LCD itp. . Ponadto mikrokontroler może wykonywać różnorodne przetwarzanie danych wejściowych, podobnie jak Twój komputer osobisty.

Oznacza to, że mikrokontrolery otwierają przed nami niemal nieograniczone możliwości sterowania dowolnymi urządzeniami, dzięki obecności portów I/0 (porty wejściowe/wyjściowe (wyjście)), a także możliwości ich programowania.

Gdzie stosuje się mikrokontrolery?

  1. Sprzęt AGD (Pralki, kuchenki mikrofalowe itp.).
  2. Technologia mobilna (roboty, systemy robotyczne, komunikacja itp.).
  3. Urządzenia przemysłowe (Systemy sterowania maszynami).
  4. Sprzęt komputerowy (płyty główne, systemy sterowania urządzeniami peryferyjnymi).
  5. Sprzęt rozrywkowy (zabawki dla dzieci, dekoracje).
  6. Pojazdy (systemy zarządzania silnikiem samochodowym, systemy bezpieczeństwa)

To nie jest pełna lista zastosowań mikrokontrolerów. Często bardzo korzystna jest wymiana zestawu układów sterujących na jeden mikrokontroler, ze względu na uproszczenie produkcji, mniejsze zużycie energii.

Pierwsze kroki z AVR

AVR- rodzina mikrokontrolerów Atmel, które mają wystarczającą wydajność dla większości urządzeń amatorskich. Są również szeroko stosowane w przemyśle.

Mikrokontrolery (zwane dalej MK) mocno wkroczyły w nasze życie, w Internecie można znaleźć wiele ciekawych obwodów wykonywanych na MK. Czego nie można zamontować na MK: różne wskaźniki, woltomierze, sprzęt gospodarstwa domowego (urządzenia zabezpieczające, urządzenia przełączające, termometry ...), wykrywacze metali, różne zabawki, roboty itp. lista może być bardzo długa. Pierwszy obwód mikrokontrolera zobaczyłem 5-6 lat temu w czasopiśmie radiowym i niemal natychmiast przewróciłem stronę, myśląc sobie: „Nadal nie potrafię tego złożyć”. Rzeczywiście, w tamtym czasie MK było dla mnie czymś bardzo skomplikowanym i niezrozumiałym urządzeniem, nie miałem pojęcia, jak one działają, jak je flashować i co z nimi zrobić w przypadku nieprawidłowego oprogramowania. Ale około rok temu po raz pierwszy zmontowałem swój pierwszy obwód na MK, był to obwód woltomierza cyfrowego na wskaźnikach 7-segmentowych i mikrokontroler ATmega8. Tak się złożyło, że mikrokontroler kupiłem przez przypadek, kiedy stałem w dziale części do radia, gość przede mną kupował MK, i ja też zdecydowałem się go kupić i spróbować coś złożyć. W moich artykułach opowiem Ci o Mikrokontrolery AVR, nauczę Cię, jak z nimi pracować, rozważymy programy oprogramowania, stworzymy prosty i niezawodny programator, rozważymy proces oprogramowania i, co najważniejsze, problemy, które mogą pojawić się nie tylko dla początkujących.

Główne parametry niektórych mikrokontrolerów rodziny AVR:

mikrokontroler

Pamięć flash

pamięć RAM

Pamięć EEPROM

Porty we/wy

dostarczasz

Dodatkowe parametry MK AVR mega:

Temperatura pracy: -55…+125*С
Temperatura przechowywania: -65…+150*С
Napięcie na pinie RESET względem masy: max 13V
Maksymalne napięcie zasilania: 6,0 V
Maksymalny prąd linii we/wy: 40 mA
Maksymalny prąd na linii zasilającej VCC i GND: 200mA

Przypisanie pinów dla modeli ATmega 8X

Przypisanie pinów dla modeli ATmega48x, 88x, 168x

Przypisanie pinów dla modeli ATmega8515x

Przypisanie pinów dla modeli ATmega8535x

Przypisanie pinów dla modeli ATmega16, 32x

Przypisanie pinów dla modeli ATtiny2313

Na końcu artykułu załączono archiwum z arkuszami danych niektórych mikrokontrolerów.

Bity nastawcze FUSE MK AVR

Pamiętaj, że zaprogramowany bezpiecznik to 0, niezaprogramowany to 1. Zachowaj ostrożność przy ustawianiu bezpieczników, błędnie zaprogramowany bezpiecznik może zablokować mikrokontroler. Jeśli nie jesteś pewien, który bezpiecznik chcesz zaprogramować, lepiej za pierwszym razem flashować MK bez bezpieczników.

Najpopularniejszymi mikrokontrolerami dla radioamatorów są ATmega8, w dalszej kolejności ATmega48, 16, 32, ATtiny2313 i inne. Mikrokontrolery sprzedawane są w pakietach TQFP i DIP, polecam początkującym kupować w DIP. Jeśli kupisz TQFP, bardziej problematyczne będzie ich flashowanie, będziesz musiał kupić lub przylutować płytkę. ich nogi są bardzo blisko siebie. Radzę mikrokontrolery w pakietach DIP, umieszczam je na specjalnych gniazdach, jest to wygodne i praktyczne, nie trzeba lutować MK, jeśli chcesz go przeflashować, lub wykorzystać do innego projektu.

Prawie wszystkie współczesne mikrokontrolery mają możliwość programowania w obwodzie ISP, tj. jeśli Twój mikrokontroler jest przylutowany do płytki, to aby zmienić oprogramowanie nie musimy wylutowywać go z płytki.

Do programowania służy 6 pinów:
RESETOWANIE- Wejście MK
VCC- Plus zasilanie, 3-5 V, zależy od MK
GND- Przewód wspólny, minus moc.
MOSI- wejście MK (sygnał informacyjny w MK)
MISO- wyjście MK (sygnał informacyjny z MK)
SCK- wejście MK (sygnał zegarowy w MK)

Czasami wykorzystują też wyjścia XTAL 1 i XTAL2, kwarc przywiera do tych wyjść jeśli MK będzie pracował z zewnętrznego generatora, w ATmega 64 i 128 wyjścia MOSI i MISO nie są wykorzystywane do programowania ISP, zamiast tego wyjścia MOSI są podłączone do nogę PE0, a MISO do PE1. Podłączając mikrokontroler do programatora, przewody łączące powinny być jak najkrótsze, a kabel od programatora do portu LPT również nie powinien być zbyt długi.

Oznaczenie mikrokontrolera może zawierać niezrozumiałe litery z cyframi, np. Atmega 8L 16PU, 8 16AU, 8A PU itp. Litera L oznacza, że ​​MK pracuje na niższym napięciu niż MK bez litery L, zwykle 2,7V . Liczby po myślniku lub spacji 16PU lub 8AU wskazują wewnętrzną częstotliwość oscylatora znajdującego się w MK. Jeśli bezpieczniki są ustawione na pracę z zewnętrznego kwarcu, kwarc należy ustawić na częstotliwość nie przekraczającą maksymalnej zgodnie z arkuszem danych, jest to 20 MHz dla ATmega48/88/168 i 16 MHz dla innych atmegas.

Schemat ideowy programatora na porcie LPT pokazano na rysunku. Jako sterownik magistrali użyj układu 74AC 244 lub 74HC244 (K1564AP5), 74LS244 (K555AP5) lub 74ALS244 (K1533AP5).

dioda LED VD1 sygnalizuje tryb rejestracji mikrokontrolera,

dioda VD2 - odczyt,

LED VD3 - obecność zasilania obwodu.

Układ pobiera napięcie potrzebne do zasilania ze złącza ISP tj. z programowalnego urządzenia. Obwód ten jest poprawionym obwodem programatora STK200/300 (dodano diody LED dla ułatwienia obsługi), dlatego jest kompatybilny ze wszystkimi programami programatora PC, które współpracują z obwodem STK200/300. Aby pracować z tym programatorem, użyj programu CVAVR

Programator można wykonać na płytce drukowanej i umieścić w obudowie złącza LPT, jak pokazano na rysunkach:




Do pracy z programatorem wygodnie jest użyć przedłużacza portu LPT, który można łatwo wykonać samodzielnie (na przykład z kabla Centronix do drukarki), najważniejsze jest, aby nie oszczędzać przewodów uziemiających (18 -25 stóp złącza) lub kup. Długość kabla pomiędzy programatorem a programowalnym mikroukładem nie powinna przekraczać 20-30 cm.

Lekcja 1

Witajcie drodzy czytelnicy!

Dzisiaj zbliżymy się do programowania mikrokontrolerów AVR, zbierając wszystko, czego potrzebujesz, aby zacząć. Więc zacznijmy.

Istnieją dwa sposoby opanowania AVR. Rozważmy każdy z nich.

1. Arduino

Arduino to projektant elektroniki i wygodna platforma do szybkiego rozwoju urządzeń elektronicznych. Oznacza to, że płytka Arduino zawiera wszystko, czego potrzebujesz do szybkiego rozwoju urządzeń technicznych. Zawiera mikrokontroler AVR, jego okablowanie (elementy niezbędne do działania mikrokontrolera), programator (urządzenie do „flashowania” mikrokontrolera).

Rozważ zalety tego podejścia:

  1. Szybki start rozwoju. Kupując ten produkt możesz od razu przystąpić do rozpoczęcia pracy z mikrokontrolerem, bez dodatkowych przygotowań.
  2. Niski próg wejścia. Aby rozpocząć opracowywanie urządzeń technicznych, nie potrzebujesz żadnych specjalnych umiejętności.
  3. Szeroka gama wtykowych „osłon”
  4. Społeczność. W Internecie znajdziesz wiele lekcji i zadań opartych na wykorzystaniu platformy Arduino.

Istnieją jednak wady, które przewyższają zalety platformy. Arduino :

  1. Kupując Arduino tracisz możliwość zanurzenia się głębiej w świat AVR, dowiedzenia się, kim jest programista, potrzebnej uprzęży i ​​wiele więcej.
  2. Wąska linia modeli. Bardzo często konieczne jest dobranie konkretnego mikrokontrolera do konkretnego zadania. Niestety, Arduino nie będzie w stanie zapewnić Ci szeregu modeli do każdego możliwego i nie do pomyślenia zadania. I prędzej czy później staniesz przed koniecznością użycia mikrokontrolera, którego nie ma w ofercie płytek Arduino.
  3. Kolejny język programowania. Język programowania platform Arduino znacznie różni się od standardowego AVR C, AVR ASM, dlatego konieczne staje się przejście na Arduino IDE i poznanie języka Arduino.

Jednak pomimo wszystkich negatywnych aspektów Arduino jest całkiem odpowiednie do wstępnych badań mikrokontrolerów AVR. Ale nie nadużywaj tego, jeśli naprawdę chcesz poznać świat mikrokontrolerów i zanurzyć się w nim z głową. Dlatego zaproponuję Wam drugi, moim zdaniem najlepszy sposób na rozpoczęcie pracy z rodziną AVR.

2.Samodzielny montaż.

Mikrokontrolery AVR są dość przyjazne dla początkujących i pozwalają samodzielnie złożyć wszystko, czego potrzebujesz do swojej pracy, z prostych, niedrogich i tanich komponentów.

Zalety tego podejścia:

  1. Głębokość nurkowania.O wiele więcej dowiesz się samodzielnie zbierając wszystko, czego potrzebujesz, zdobywając wiele przydatnej wiedzy i umiejętności.
  2. Możliwość samodzielnego doboru komponentów do rozwiązania zadania.
  3. Standardowe języki AVR C/AVR ASM Możliwość wyboru odpowiedniego środowiska programistycznego Ogromna baza wiedzy i lekcji z tych języków.
  4. Taniość Często (ale nie zawsze) opłaca się odmówić gotowego rozwiązania i złożyć wszystko samodzielnie.

Wady tego podejścia:

  1. Złożoność. Samodzielne złożenie wszystkiego po raz pierwszy, przy braku umiejętności i wiedzy, jest znacznie trudniejsze niż zakup gotowego produktu.

Ale nie boimy się trudności, bo po ich przejściu nauczymy się wielu nowych i przydatnych rzeczy!

Zacznijmy więc zbierać niezbędne rzeczy na początek.

1.Mikrokontroler.

2.Programista.

Najprawdopodobniej możesz go kupić w najbliższym sklepie lub zamówić przez Internet. Możliwe jest jednak samodzielne złożenie programatora podłączonego do portu COM komputera osobistego, składającego się z najprostszych elementów, którego łączny koszt wynosi około 50 rubli. Linków do instrukcji samodzielnego montażu programatora szukaj na końcu artykułu.

Kiselev Roman, maj 2007 Artykuł zaktualizowano 26 maja 2014 r

Czym więc jest mikrokontroler (zwany dalej MK)? To relatywnie mały komputer umieszczony w jednym układzie scalonym. Posiada procesor (jednostkę arytmetyczno-logiczną lub ALU), pamięć flash, pamięć EEPROM, mnóstwo rejestrów, porty I/O oraz dodatkowe bajery, takie jak timery, liczniki, komparatory, USART itp. Mikrokontroler po włączeniu zasilania -up, uruchamia się i rozpoczyna wykonywanie programu zapisanego w pamięci flash. Jednocześnie może sterować szeroką gamą urządzeń zewnętrznych poprzez porty I/O.

Co to znaczy? Oznacza to, że w MK można zaimplementować dowolny obwód logiczny, który będzie realizował określone funkcje. Oznacza to, że MK jest mikroukładem, którego wewnętrzną zawartość w rzeczywistości sami tworzymy. Pozwala to, po zakupie kilku zupełnie identycznych MK, na montaż na nich zupełnie różnych obwodów i urządzeń. Jeśli chcesz dokonać jakichkolwiek zmian w działaniu urządzenia elektronicznego, nie będziesz musiał używać lutownicy, wystarczy przeprogramować MK. Nie musisz nawet wyjmować go z urządzenia, jeśli używasz amplitunera AVR, ponieważ te mikrokontrolery obsługują programowanie w obwodzie. W ten sposób mikrokontrolery wypełniają lukę pomiędzy programowaniem a elektroniką.

AVR to mikrokontrolery 8-bitowe, to znaczy ich jednostka ALU może wykonywać proste operacje na liczbach tylko 8-bitowych w jednym cyklu. Teraz czas porozmawiać o tym, jakiego MK użyjemy. Pracuję z MK ATMega16. Jest to bardzo powszechne i można go kupić w prawie każdym sklepie z częściami radiowymi za około 100 rubli. Jeśli go nie znajdziesz, to możesz kupić dowolną inną serię MK MEGA, ale w tym przypadku będziesz musiał poszukać do niego dokumentacji, ponieważ te same „nogi” różnych MK mogą pełnić różne funkcje, a łącząc się, wydaje się, że wszystkie wnioski są prawidłowe, możesz otrzymać działające urządzenie, a może po prostu chmurę śmierdzącego dymu. Kupując ATMega16, upewnij się, że jest on dostarczany w dużej 40-pinowej obudowie DIP, a także kup gniazdo, do którego pasuje. Do pracy z nim potrzebne będą również dodatkowe urządzenia: diody LED, przyciski, złącza itp.

ATMega16 posiada bardzo dużą ilość różnorodnych funkcji. Oto niektóre z jego cech:

  • Maksymalna częstotliwość taktowania - 16 MHz (8 MHz dla ATMega16L)
  • Większość poleceń jest wykonywana w jednym cyklu
  • 32 8-bitowe rejestry robocze
  • 4 pełne 8-bitowe porty we/wy
  • dwa 8-bitowe timery/liczniki i jeden 16-bitowy
  • 10-bitowy przetwornik analogowo-cyfrowy (ADC)
  • wewnętrzny generator zegara o częstotliwości 1 MHz
  • komparator analogowy
  • interfejsy SPI, I2C, TWI, RS-232, JTAG
  • programowanie w obwodzie i samoprogramowanie
  • moduł modulacji szerokości impulsu (PWM).

Pełną specyfikację tego urządzenia, a także instrukcje dotyczące ich użytkowania, można znaleźć w karcie katalogowej tego MK. To prawda, jest po angielsku. Jeśli znasz angielski, pobierz tę kartę katalogową, zawiera ona wiele przydatnych informacji.

Przejdźmy w końcu do rzeczy. Polecam wykonanie specjalnej płytki prototypowej pod mikrokontroler, na której będzie można zmontować dowolny obwód elektryczny z mikrokontrolerem bez lutownicy (lub prawie bez niej). Zastosowanie takiej płytki znacznie ułatwi pracę z MK i przyspieszy proces nauki jego programowania. To wygląda tak:

Co będzie do tego potrzebne?

Po pierwsze wymagana jest sama tablica. Kupiłem gotowy w sklepie z częściami radiowymi za 115 rubli. Następnie przylutowałem do niego wszystkie niezbędne części. Okazało się to niezwykle wygodną rzeczą, na której można zmontować dowolny obwód elektryczny w ciągu kilku minut, wpychając kable i instalując mikroukłady i wskaźniki.

Do łączenia elementów obwodu bardzo wygodnie jest używać pętli, na końcach których instalowane są złącza. Złącza te zakłada się na „nóżki” wystające obok każdego portu MK. Mikrokontroler należy zamontować w gnieździe, a nie przylutować do płytki, w przeciwnym razie bardzo trudno będzie go usunąć w przypadku przypadkowego spalenia. Poniżej znajduje się pinout MK ATMEGA16:

Wyjaśnijmy, które nogi nas teraz interesują.

  • VCC - zasilanie dostarczane jest tutaj (4,5 - 5,5 V) ze stabilizowanego źródła
  • GND - masa
  • RESET - reset (przy niskim poziomie napięcia)
  • XTAL1, XTAL2 - tutaj podłącza się rezonator kwarcowy
  • PA, PB, PC, PD - porty wejścia/wyjścia (odpowiednio A, B, C i D).

Jako źródło zasilania możesz użyć wszystkiego, co wytwarza napięcie stałe 7–11 V. Do stabilnej pracy MK potrzebny jest stabilizowany zasilacz. Jako stabilizator można zastosować mikroukłady z serii 7805. Są to liniowe stabilizatory zintegrowane, których wejście zasilane jest nieregulowanym prądem stałym 7-11 V, a wyjście jest stabilizowane 5 V. Przed i po 7805 należy umieścić kondensatory filtrujące (elektrolityczne do filtrowania szumów o niskiej częstotliwości i ceramiczne do filtrowania wysokich). Jeśli nie możesz znaleźć stabilizatora, jako źródła zasilania możesz użyć akumulatora 4,5 V. Z niego MK musi być zasilany bezpośrednio.

Poniżej schemat podłączenia MK:

Zastanówmy się teraz, co tu jest po co.

BQ1 to rezonator kwarcowy, który ustawia częstotliwość roboczą MK. Można ustawić dowolne do 16 MHz, ale ponieważ w przyszłości planujemy współpracę z portem COM, to polecam zastosować rezonatory dla częstotliwości: 14,7456 MHz, 11,0592 MHz, 7,3725 MHz, 3,6864 MHz lub 1,8432 MHz (to później okaże się dlaczego). Użyłem 11,0592 MHz. Oczywiste jest, że im wyższa częstotliwość, tym większa prędkość urządzenia.

R1 to rezystor podciągający, który utrzymuje napięcie 5 V na wejściu RESET. Niski poziom napięcia na tym wejściu oznacza reset. Po resecie MK uruchamia się (10–15 ms) i ponownie rozpoczyna wykonywanie programu. Ponieważ jest to wejście o wysokiej rezystancji, nie można go pozostawić „wiszącego w powietrzu” – niewielki przetwornik doprowadzi do nieoczekiwanego resetu MK. Do tego właśnie służy R1. Dla niezawodności polecam również zainstalowanie kondensatora C6 (nie więcej niż 20 mikrofaradów).

SB1 - przycisk resetowania.

Rezonator kwarcowy i kondensator filtrujący C3 powinny znajdować się jak najbliżej MK (nie dalej niż 5-7 cm), ponieważ w przeciwnym razie w przewodach mogą wystąpić zakłócenia, co doprowadzi do nieprawidłowego działania MK.

Sam programista jest zakreślony na schemacie w niebieskim prostokącie. Wygodnie jest wykonać go w postaci przewodu, którego jeden koniec jest podłączony do portu LPT, a drugi do określonego złącza obok MK. Przewód nie może być zbyt długi. Jeśli z tym kablem będą problemy (zwykle nie, ale wszystko się może zdarzyć), to trzeba będzie wlutować adapter Altera ByteBlaster. Jak to zrobić napisane jest w opisie programatora AVReal.

Skoro już uporaliśmy się ze sprzętem, czas zająć się oprogramowaniem.

Istnieje kilka środowisk programistycznych do programowania AVR. Po pierwsze, jest to AVR Studio – oficjalny system programowania firmy Atmel. Umożliwia pisanie w asemblerze oraz debugowanie programów napisanych w asemblerze, C i C++. IAR to komercyjny system programowania w językach C, C++ i asemblerze. WinAVR to kompilator typu open source. AtmanAVR to system programowania dla AVR z interfejsem niemal jeden do jednego, podobnym do tego z Visual C++ 6. AtmanAVR pozwala także na debugowanie programów i zawiera wiele funkcji pomocniczych, które ułatwiają pisanie kodu. Ten system programowania jest komercyjny, ale zgodnie z licencją można z niego korzystać „za darmo” przez miesiąc.

Sugeruję rozpoczęcie pracy z IAR jako najbardziej „przejrzystym” środowiskiem programistycznym. W IAR projekt jest w całości tworzony przez „uchwyty”, dlatego po wykonaniu kilku projektów będziesz już wyraźnie wiedział, co oznacza każda linijka kodu i co się stanie, jeśli to zmienisz. Pracując z AtmanAVR, będziesz albo musiał skorzystać z gotowego szablonu, co jest bardzo kłopotliwe i trudne do zrozumienia dla osoby bez doświadczenia, albo będziesz miał mnóstwo problemów z plikami nagłówkowymi podczas budowania projektu od zera. Zajmując się IAR, później przyjrzymy się innym kompilatorom.

Więc najpierw zdobądź trochę IAR. Jest to bardzo powszechne i nie powinno być problemu ze znalezieniem. Po pobraniu skądś IAR 3.20 zainstaluj kompilator/środowisko robocze i uruchom je. Następnie możesz rozpocząć pracę.

Uruchamianie IAR, wybierz plik/nowy/obszar roboczy, wybierz ścieżkę do naszego projektu i utwórz dla niego folder i nadaj mu nazwę, na przykład „Prog1”. Teraz tworzymy projekt: Projekt / Utwórz nowy projekt… Nazwijmy to też - „Prog1”. Kliknij prawym przyciskiem myszy tytuł projektu w drzewie projektu i wybierz „Opcje”

Tutaj skonfigurujemy kompilator dla konkretnego MK. Najpierw należy wybrać typ procesora ATMega16 w zakładce Target, w zakładce Library Configuration zaznaczyć checkbox Włącz definicje bitów w plikach I/O-include (aby móc w programie używać nazw bitów różnych rejestrów MK code), wybierz typ biblioteki C w tym samym miejscu /EC++. W kategorii ICCAVR w zakładce Język zaznacz checkbox Włącz obsługę wielobajtową, a w zakładce Optymalizacja wyłącz optymalizację (w przeciwnym razie zrujnuje to nasz pierwszy program).

Następnie wybierz kategorię XLINK. Tutaj musisz zdefiniować format skompilowanego pliku. Ponieważ teraz ustawiamy opcje trybu debugowania (Debugowanie), jak opisano w tytule, musimy uzyskać plik debugowania jako wynik. Później otworzymy go w AVR Studio. Aby to zrobić, musisz wybrać rozszerzenie .cof, a typ pliku to ubrof 7.

Teraz kliknij OK, a następnie zmień Debugowanie na Wydanie.

Ponownie przechodzimy do Opcji, gdzie wszystkie parametry oprócz XLINK są ustawione tak samo. W XLINK zmień rozszerzenie na .hex i format pliku na intel-standard.

To wszystko. Teraz możemy zacząć pisać nasz pierwszy program. Utwórz nowe Źródło/tekst i wpisz w nim następujący kod:

#włączać"iom16.h" krótki unsigned int i; próżnia główny( próżnia) ( DDRB = 255; PORTB = 0; chwila(1) { Jeśli(PORTB == 255) PORTB = 0; w przeciwnym razie PORTB++; Do(i=0; tj

W folderze znajduje się plik „iom16.h”. (C:\Program Files)\IAR Systems\Embedded Workbench 3.2\avr\inc. Jeśli używasz innego MK, na przykład ATMega64, wybierz plik „iom64.h”. Te pliki nagłówkowe przechowują informacje o MK: zdefiniowane są nazwy rejestrów, bity w rejestrach, nazwy przerwań. Każdy pojedynczy pin portu A, B, C lub D może działać jako wejście lub wyjście. Jest to określane przez rejestr kierunku danych (DDR). 1 sprawia, że ​​„noga” jest wyjściem, 0 jest wejściem. Zatem ustawiając np. DDRA = 13, robimy „nogi” wyjścia PB0, PB2, PB3, reszta to wejścia, bo Liczba 13 w formacie binarnym będzie wynosić 00001101.

PORTB to rejestr określający stan „nog” portu. Wpisując tam 0, ustawiamy na wszystkich wyjściach napięcie na 0 V. Powstaje wówczas nieskończona pętla. Podczas programowania mikrokontrolerów zawsze wykonują nieskończoną pętlę, w której MCU wykonuje jakąś akcję, dopóki nie zostanie zresetowany lub dopóki nie wystąpi przerwanie. W tym cyklu piszą niejako „kod tła”, który MK wykonuje na ostatniej turze. Może to być np. wyświetlenie informacji na wyświetlaczu. W naszym przypadku zawartość rejestru PORTB jest zwiększana aż do jego zapełnienia. Potem wszystko zaczyna się od nowa. Na koniec pętla for przez dziesięć tysięcy cykli. Należy wytworzyć widoczne opóźnienie w przełączaniu stanu portu B.



Teraz zapisujemy ten plik w folderze projektu jako Prog1.c, kopiujemy plik iom16.h do folderu projektu, wybieramy Projekt / Dodaj pliki i dodajemy „iom16.h” i „Prog1.c”. Wybierz Release, naciśnij F7, program się skompiluje i powinien pojawić się komunikat:


Całkowita liczba błędów: 0
Całkowita liczba ostrzeżeń: 0

Oto zdjęcie mojego programisty:

Pobierz programator AVReal. Skopiuj go (AVReal32.exe) do folderu Release/exe, gdzie powinien znajdować się plik Prog1.hex. Zasilamy MK, podłączamy kabel do programowania. Otwórz Far Managera (najwygodniej jest w nim flashować MK), przejdź do tego folderu, naciśnij Ctrl + O. Ponieważ mamy zupełnie nowego MK, uzupełniamy

avreal32.exe +MEGA16 -o11.0592MHZ -p1 -fblev=0,jtagen=1,cksel=F,sut=1 –w

Nie zapomnij ustawić poprawnie częstotliwości, jeśli nie używasz 11059200 Hz! Jednocześnie tzw. bezpieczniki - rejestry sterujące jego pracą (zastosowanie wewnętrznego generatora, Jtag itp.). Następnie jest gotowy do odbioru pierwszego programu. Programista otrzymuje jako parametry używany port LPT, częstotliwość, nazwę pliku i inne (wszystkie są wymienione w opisie AVReal). Wpisujemy:

Avreal32.exe +Mega16 -o11.0592MHz -p1 -e -w -az -% Prog1.hex

Jeżeli połączenie będzie prawidłowe programista zgłosi pomyślne zaprogramowanie. Nie ma gwarancji, że to zadziała za pierwszym razem (przy pierwszym wywołaniu programu). Ja sam mogę być programowany od drugiego razu. Być może port LPT jest wadliwy lub występują zakłócenia w kablu. Jeśli wystąpią problemy, sprawdź dokładnie kabel. Z własnego doświadczenia wiem, że 60% usterek wiąże się z brakiem styku w odpowiednim miejscu, 20% z obecnością w niepotrzebnym, a kolejne 15% z błędnym lutowaniem. Jeśli wszystko inne zawiedzie, przeczytaj opis programisty, spróbuj złożyć Byte Blaster.

Załóżmy, że wszystko działa dla Ciebie. Jeśli teraz podłączysz osiem diod LED do portu B MK (zrób to przy wyłączonym MK i wskazane jest włączenie rezystorów 300-400 Ohm szeregowo z diodami LED) i podłączysz zasilanie, stanie się mały cud - przepłynie przez nie „fala”!

© Kiselev Roman
Maj 2007