MIKROPROCESORY

Tu znajdziesz kompendium wiedzy przydatnej w praktycznej eksploatacji mikroprocesorów oraz ich programowaniu. Strona będzie ciągle aktualizowana. Znajdą się na niej schematych ciekawych układów, listingi programów, linki do ciekawych i wartych odwiedzenia stron. Zapraszam do współpracy i wymiany doświadczeń.

Środowisko BASCOM AVR

Oprogramowanie środowiska BASCOM AVR pobieramy ze strony MCS Elecrtonics. Pobieramy najnowszy plik instalacyjny BASCOM-AVR Demo Version i stąd polskojęzyczny help.


Instalacja i konfiguracja środowiska BASCOM AVR


  • Uruchamiamy instalator środowiska BASCOM AVR i nie przeszkadzamy w instalacji (czyli potwierdzamy wszystkie domyślne ustawienia).
  • Uruchamiamy BASCOM AVR.
  • Klikamy na zakładkę Opcje, następnie Kompilator i na Chip.
  • Rozwijamy listę mikroprocesorów przy oknie Chip i wybieramy typ programowanego mikrokontrolera (np. m32def.dat dla ATmega32).


  • Klikamy na zakładkę Output i wg uznania ustawiamy pracę kompilatora.


  • W zakładce Communication ustawiamy parametry transmisji emulatora terminala.


  • Następnie ustawiamy do jakich pinów podłączone są wyjścia interfejsów I2C, SPI i 1WIRE.


  • W zakładce LCD ustawiamy typ i podłączenia wyświetlacza LCD.


  • W zakładce Options możemy ustawić ścieżki do plików muzycznych odtwarzanych po prawidłowym zaprogramowaniu mikroprocesora oraz przy błędzie programatora.
  • Teraz wybieramy zakładkę Comunication z paska zakładek głównych i ustawiamy port COM komputera PC przeznaczony do komunikacji szeregowej i parametry transmisji.


  • Wybieramy zakładkę Environment i ustawiamy (otwierając kolejno podzakładki Editor, Font, IDE, PDF) parametry pracy kompilatora i edytora.



  • Analogicznie postępujemy w zakładkach Simulator, Monitor, Printer.
  • W zakładce Programmer ustawiamy jakiego typu używamy programator i parametry komunikacji z nim. Jeżeli używamy programatora zgodnego z USBasp, to ustawiamy External programmer, w polu Program podajemy ścieżkę do programu avrdude.exe i w polu Parameter wpisujemy -p m128 -c usbasp -U flash:w:"{FILE}":a -U flash:v:"{FILE}":a.


  • Na koniec koniecznie klikamy na Default, żeby ustawione parametry ładowały się przy każdym uruchomieniu kompilatora. Klikając na OK zamykamy okno ustawień.

Tworzenie programów

Wiedzę potrzebną w trakcie programowania, niestety, trzeba posiąść przez naukę i analizowanie różnych programów. Pomocnym będzie oczywiście Internet. Polecam następujące strony:

ELPORTAL
mikrokontrolery.net

Kod programu piszemy w edytorze środowiska BASCOM AVR, które wspomaga pisanie programu kolorowaniem składni, automatyczną tabulacją, wykrywaniem błędów itd. Dobrą praktyką jest zasada tworzenia zwięzłego programu głównego, zawierającego przede wszystkim odwołania do podprogramów. Podprogramy powinny być tworzone w taki sposób, żeby były jak najbardziej uniwersalne. Da to nam możliwość wklejania napisanych już podprogramów do nowo tworzonych programów, skaracając czas ich tworzenia. Programy dostępne w Intrernecie często publikowane są w wersji źródłowej (nie skompilowanej - z rozszerzeniem .bas). Po ściągnięciu takiego programu na dysk naszego komputera, otwieramy go w środowisku BASCOM AVR i w razie potrzeby (jeżeli prawa autorskie tego nie zabraniają) modyfikujemy zgodnie z potrzebami naszej koncepcji programu oraz dostosowujemy do projektowanego układu elektronicznego. Tak przygotowany program, zanim zostanie wgrany do pamięci mikrokontrolera, należy skompilować. Wybieramy zakładkę Programowanie, a następnie Kompiluj, albo klikamy ikonę Compile Program na pasku narzędzi lub używamy klawisza funkcyjnego F7. Błędy kompilacji wyszczególnione są w dolnej części okna programu BASCOM AVR, z podaniem rodzaju błędu i numeru linii programowej. Wszystkie błędy należy poprawić i ponownie zlecić kompilację programu. Po prawidłowym skompilowaniu programu otrzymujemy wynikowe pliki określone w ustawieniach środowiska BASCOM AVR. Pliki, które możemy wykorzystać do zaprogramowania mikrokontrolera mają rozszerzenie .hex albo .bin. Najczęściej korzystamy z pliku w formacie INTEL HEX.


Opis formatu Intel HEX

:10008000AF5F67F0602703E0322CFA92007780C361
:1000900089001C6B7EA7CA9200FE10D2AA00477D81
:0B00A00080FA92006F3600C3A00076CB
:00000001FF

  • Pierwszy znak (:) oznacza poczatek linii danych.
  • Nastepne dwa znaki oznaczają długość danych w linii (10h w tym przypadku).
  • Nastepne cztery znaki oznaczaja adres zapisywania danych (0080h).
  • Nastepne dwa znaki oznaczają typ danych (00 - dane, 01 - koniec pliku).
  • Dalej nastepują dane.
  • Ostatnie dwa znaki są sumą kontrolną, tzn. sumą wszystkich znaków (cyfr) w linii, podzieloną przez 256 (100h).
  • Ostatnia linia ma specjalne znaczenie i zawsze wygląda tak jak powyżej.

Teraz możemy zaprogramować mikrokontroler. Podłączamy do komputera programator. Wkładamy w odpowiednią podstawkę programatora układ scalony mikrokontrolera przeznaczony do zaprogramowania, klikamy zakładkę Programowanie, Wyślij do chip, a następnie Programuj albo Programuj ręcznie. Możemy także klinąć ikonę Program chip na pasku narzędzi lub użyć klawisza funkcyjnego F4. Zaprogramowany układ instalujemy na płytce elktroniki i testujemy prawidłowość działania programu. Drugim sposobem jest programowanie mikrokontrolera bezpośrednio w układzie elektronicznym (tzw. programowanie szeregowe za pomocą złącza ISP).


Programowanie szeregowe mikroprocesorów

Większość dobrze zaprojektowanych układów elektronicznych wykorzystujących mikrokontrolery posiada złącze ISP (In System Programming - złącze programowania w systemie). Obecnie najczęściej stosowane są złącza 6-cio lub 10-cio pinowe według standardu określonego przez firmę ATMEL.


Złącza programowania - standard KANDA

	MOSI	- Master Out Slave In
	MISO	- Master In Slave Out
	SCK	- Shift Clock
	RST	- RESET układu docelowego 
	VCC 	- napięcie zasilania układu docelowego 
	LED	- opcjonalna dioda LED
	GND 	- masa układu docelowego

Jeżeli złącza ISP na płytce układu nie ma, to można przylutować przewody z programatora do ścieżek układu, połączonych bezpośrednio z właściwymi nóżkami mikrokontrolera. Programator musi mieć możliwość wymuszenia sygnałów na liniach SCK oraz MOSI, a mikroprocesor możliwość wysłania odpowiedzi przez linię MISO. Przy obecnych cenach programatorów polecam zakupienie programatora AVR zgodnego z USBasp ISP wraz z taśmą IDC i dodatkowo przejściówki z KANDA 10-pinowego na 6-pinowego.

UWAGA! Programowanie ATMega128 odbywa się w nieco inny sposób. Nie korzysta się z linii MISO i MOSI tylko ze specjalnych wyprowadzeń PD1 i PD0 (wszystko jest opisane w nocie katalogowej). Stąd konieczność podłączenia sygnału MISO do PDO (nóżka PE1 procesora), a MOSI do PD1 (nóżka PE0 procesora).


Ustawianie bitów zabezpieczających i bitów FUSE

W mikrokontrolerach AVR można ustawić specjalne bity zabezpieczające (LOCK BITS) i bity konfiguracyjne (FUSE BITS). Bity zabezpieczające służą do zabezpieczenia zaprogramowanego mikrokontrolera przed powtórnym zapisaniem lub przed możliwością odczytu zapisanych danych (np. gdy chcemy chronić nasz program przed skopiowaniem). Bity konfiguracyjne ustawiają sposób pracy mikrokontrolera (np. decydują o źródle sygnału zegarowego). Zaprogramowanie bitów FUSE jest trwałe - operacja kasowania ich już nie zmieni (usunie tylko bity zabezpieczające), ale można je zmienić przez ponowne zaprogramowanie. Rejestry bitów konfiguracyjnych różnią się dla różnych mikrokontrolerów. Ustawiając bity konfiguracyjne należy dokładnie zapoznać się z dokumentacją danego mikroprocesora. Zaprogramowanie żądanych funkcji polega na ustawieniu stanu 0 na bitach odpowiadających tym funkcjom. Ustawienie stanu 1 oznacza nie włączenie funkcji. Ustawienia bitów konfiguracyjnych i zabezpieczających dokonujemy używając programu sterującego programatorem. Błędne wpisanie bitów FUSE może zakończyć się niemożliwością dostępu do mikrokontrolera za pomocą interfejsu SPI. W takiej sytuacji pozostaje tylko przeprogramowanie mikrokontrolera za pomocą programatora programującego w sposób równoległy.


Bootloader

Bootloader jest programem umieszczanym w Boot-Bloku pamięci flash mikrokontrolera. Program ten umożliwia wgrywanie programów do pamięci mikrokontrolera za pośrednictwem interfejsu UART lub konwertera USB-UART (nie wszystkie mikrokontrolery wyposażone są w taką możliwość). Za pomocą bootloadera nie ma możliwości zmiany bitów FUSE. Bootloader może być uruchamiany automatycznie za pomocą linii DTR interfejsu UART, używanej do zerowania mikrokontrolera lub ręcznie poprzez jego zerowanie. Poniższy schemat przedstawia interfejs sprzętowy umożliwiający komunikację z bootloaderem umieszczonym w pamieci flash mikrokontrolera. Interface oparty jest na konwerterze napięć MAX232. Rezystor R6 blokuje możliwość zerowania mikrokontrolera, gdy złącze RS232 nie jest podłączone do komputera. Bootloader umożliwia również programowanie pamięci EEPROM.

W środowisku BASCOM AVR ładowanie programu za pomocą bootloadera wgranego już do mikrokontrolera wymaga następujących ustawień:

  • klikamy na zakładkę Opcje następnie Programator i z rozwijanej listy programatorów wybieramy MCS bootloader,
  • klikamy na zakładkę Serial, ustawiamy właściwy port COM i żądaną szybkość transmisji,
  • akceptujemy klikając na OK.

Teraz możemy wczytać program, który chcemy wgrać do mikrokontrolera i naciskamy F7 żeby go skompilować, a następnie F4 celem wgrania do pamięci flash mikrokontrolera. W podkatalogu SAMPLES, zawierającym przykłady programów, znajduje się plik Bootloader.bas, w którym należy wybrać typ mikrokontrolera, do jakiego będzie on ładowany. Na przykład dla mikrokontrolera ATmega128 należy aktywować linie:

$regfile = "m128def.dat"
Const Loaderchip = 128

Pierwsza linia wskazuje plik z rejestrami mikrokontrolera, a druga na typ mikrokontrolera. Można również w pliku bootloadera skonfigurować prędkość transmisji przez UART.


Przydatne linki

Zestawienie mikrokontrolerów 8-bitowych
firmy Atmel serii AT89 na stronie sklepu TME

Zestawienie mikrokontrolerów AVR
firmy Atmel na stronie sklepu TME

  Nota katalogowa ATmeg8
  Nota katalogowa ATmeg128