background image

http://www.easy-soft.tsnet.pl/

Programowanie w układzie („in-circuit”)

Artykuł zawiera garść porad na temat programowania mikrokontrolerów w układzie. Przykłady aplikacji 
opisane w artykule wykorzystywać będą mikrokontrolery AVR, AT89S, 89C51RD2 oraz programator 
opisywany na tej stronie.

ICP lub ISP, czyli programowanie mikrokontrolera w układzie.

Co oznacza skrót ISP lub ICP? Ten pierwszy pochodzi od słów In circuit Serial Programming, ten 
drugi jest bardziej bezpośredni i pochodzi od In Circuit Programming. Oba oznaczają to samo. Jest to 
po prostu możliwość programowania mikrokontrolera w płytce, bez wylutowywania go, czy 
wyjmowania z podstawki. Jest to bardzo wygodne rozwiązanie, zwłaszcza dla elektronika - amatora, 
które umożliwia mu uruchomienie urządzenia czy wykonanie zmian w programie bez „dewastowania” 
całego układu. Nie do pominięcia jest również fakt, że niektóre mikrokontrolery (np. z serii HC firmy 
MOTOROLA czy ATMega firmy ATMEL) producent wyposaża w mechanizmy sprzętowych pułapek 
oraz możliwość pracy krokowej, umożliwiając w ten sposób tanie uruchamianie układu krok po kroku, 
bez użycia kosztownego emulatora sprzętowego a następnie zapis gotowej, uruchomionej aplikacji do 
pamięci programu. Wróćmy jednak do tematu artykułu.
Aby programowanie mikrokontrolera w układzie było możliwe, projektant układu (aplikacji mikrokontro-
lera) musi komponując otoczenie układu, spełnić pewne podstawowe warunki. Po pierwsze musi 
pamiętać, że bardzo często linie służące do zapisu pamięci FLASH są wykorzystywane również przez 
układy peryferyjne, również czasami jako dwukierunkowe. Na przykład UART (jednokierunkowo, 
doprowadzenia RxD i TxD mikrokontrolera) czy SPI (jednokierunkowo tylko, jeśli mikrokontroler 
pracuje wyłącznie w jednym z trybów, jako master lub jako slave; doprowadzenia MISO, MOSI, SCK 
oraz ewentualnie SS). Programowanie mikrokontrolera nie może też zakłócać pracy dołączonych 
układów. Po drugie należy spełnić takie warunki dopasowania sygnałów programujących, aby 
(zwłaszcza przy programowaniu mikrokontrolerów przez SPI!) sygnał SCK miał odpowiednio krótkie 
czasy narostu i opadania zboczy. Najlepiej aby nie przekraczały one 70..100ns. Niedopuszczalne jest 
również, aby sygnały programujące były zniekształcone, aby - zwłaszcza na zboczach sygnałów - 
występowały objawy wzbudzania się układu.

Mikrokontrolery firmy ATMEL z serii AVR i AT89S. 

Zapis pamięci przez interfejs SPI.

Programowanie mikrokontrolerów AT89S oraz AVR odbywa się przy aktywnym sygnale reset
Mikrokontrolery AVR wymagają, aby reset był logicznym „0”, AT89S aby reset był „1”. Zapis pamięci 
FLASH i EEPROM odbywa się przez interfejs szeregowy SPI. Programator przejmuje rolę układu 
master transmisji, natomiast programowania mikrokontroler pracuje jako slave. W takiej sytuacji to 
programator steruje i zarządza transmisją, można powiedzieć, że mikrokontroler jest sterowanym, 
biernym układem. 
Zazwyczaj, jeśli jest taka konieczność, w budowanych przez siebie aplikacjach wykorzystuję sygnał 
reset do sterowania pracą bufora separującego linie interfejsu od programatora. Bufor rozdzielający 
układy i programator dobrze jest wykonać z wykorzystaniem układów cyfrowych z serii TTL-LS, HCT 
lub innych. Mogą to być zwykłe bramki NAND, bramki trójstanowe lub multipleksery. W ten sposób 
można dodatkowo wpływać na kształt sygnału programującego, niwelując wpływ długich przewodów 
powodujących „rozciągnięcie” zboczy sygnałów

*

. Oczywiście dopuszczalne jest również użycie kluczy 

analogowych, jednak układy te raczej nie kształtują sygnału wejściowego. Dociera on do układu 
programowanego taki, jaki był na wejściu układu klucza. 
Na rysunku 1 umieściłem przykład opisywanego wyżej rozwiązania. Układ multipleksera 74LS157 
pełni rolę bufora separującego programator od układów sterowanych przez mikrokontroler z 
wykorzystaniem SPI. Oczywiście układ zbudować można w dowolny, inny sposób zwłaszcza, że wadą 
przedstawionego układu jest jednokierunkowość linii. Mogą one pracować wyłącznie jako wejścia lub 
wyjścia, zgodnie z wymogami standardu SPI. Kierunkiem przepływu informacji steruje sygnał reset 
wybierający, zależnie od swojej fazy, wejścia A lub B multipleksera (w stanie spoczynkowym pracują 
wejścia A, w stanie programowania wejścia B).

*

 Używając programatora ICP opisywanego na tej stronie z kablem o długości około 30 cm nie zaobserwowałem negatywnego wpływu 

długości taśmy łączącej programator z układem na pracę programatora.

J.Bogusz: „Programowanie AT89S8252 w układzie” strona 1 z 5

background image

http://www.easy-soft.tsnet.pl/

Rys.1. Układ multipleksera jako separator programatora i układów z interfejsem SPI.

Umieszczone na rysunku 1 rozwiązanie dotyczy mikrokontrolera z rodziny AVR. Analogicznie można 
zbudować układ przeznaczony dla AT89S pamiętając jednak, że układ ten wymaga sygnału reset 
przeciwnej fazie.
Na rysunku 2 umieściłem fragment schematu urządzenia, które zbudowano w oparciu o AT89S8252, 
posiadające możliwość programowania mikrokontrolera w układzie. Układ U1 to właściwy 
mikrokontroler. U3 to TL7705 produkowany przez firmę Texas Instruments, to tzw. resetter - układ, 
którego zadaniem jest (w dużym uproszczeniu) wysłanie sygnału "reset" po załączeniu napięcia 
zasilania. Inną odmianą tego układu jest TLC7705 ale uwaga: ma inaczej rozmieszczone 
wyprowadzenia.

Rys.2. Przykład aplikacji AT89S8252 programowanego „in-circuit”

J.Bogusz: „Programowanie AT89S8252 w układzie” strona 2 z 5

background image

http://www.easy-soft.tsnet.pl/

Programowanie układu AT89S8252 poprzez interfejs szeregowy wymaga aby sygnał "reset" miał 
poziom wysoki. Jest to możliwe po podaniu na wejście /RIN (nóżka 2) układu TL7705 poziomu 
niskiego. Ponieważ programator, którego używałem nie umożliwiał wyboru dowolnej fazy sygnału 
reset dla programowanego mikrokontrolera wymuszając stan logiczny niski dla wszystkich 

Rys 3. Buforowanie sygnałów MISO, MOSI i SCK.

programowanych układów, to niejako „na doczepkę”, musiałem używać bramki inwertora (na 
schemacie U4A/74HCT14) albo tranzystora do odwrócenia polaryzacji reset ze złącza programatora. 
Wejście bramki podłączone jest poprzez rezystor 390 Ohm do masy zasilania w celu wymuszenia 

J.Bogusz: „Programowanie AT89S8252 w układzie” strona 3 z 5

background image

http://www.easy-soft.tsnet.pl/

poziomu wysokiego na wyjściu bramki, gdy jej wejście nie jest podłączone do żadnego innego 
potencjału.  Dalsze sygnały podane są bezpośrednio na wyprowadzenia MISO, MOSI i SCK. Układ 
mikrokontrolera jest programowany gdy napięcie zasilania jest włączone. W związku z tym, dla 
uproszczenia programatora, napięcie +5V potrzebne do jego zasilania pobierane jest z 
programowanego układu. Tyle słowem komentarza.
Na rysunku 3 umieściłem fragment schematu urządzenia praktycznie pokazujący, w jaki sposób 
można sobie poradzić, gdy MISO, MOSI i SCK muszą być użyte w zupełnie innym jeszcze celu. 
Oczywiście to propozycja, pewna odmiana aplikacji z rysunku 1. Jak łatwo zauważyć, sygnały MISO, 
MOSI i SCK pod nazwami CL0, CL1 i M.STILL są wykorzystywane również do sterowania silnikiem 
krokowym (złącze G7). Sygnał reset (RST) z TL7705 doprowadzany jest - w odwrotnej fazie niż 
wymaga tego AT89S8252 - do bufora U9 (74HCT541), poprzez który wyprowadzane są sygnały 
sterujące na zewnątrz, między innymi MISO, MOSI i SCK pracujące jako porty wyjściowe. Pojawienie 
się stanu niskiego sygnału RST powoduje wprowadzenie wyjść HCT541 w stan wysokiej impedancji 
tak, że nic nie przedostaje się na zewnątrz. Nic, co mogłoby zakłócić pracę sterowanych urządzeń. 
Oczywiście można zbudować taki sam układ w zupełnie inny sposób, na przykład wykorzystując 
wspomniane wcześniej klucze analogowe.
Poniżej, na rysunku 4, jeszcze jedno rozwiązanie przeznaczone dla AT90S8515,czyli mikrokontrolera 
z rodziny AVR. Tutaj - inaczej niż w przypadku AT89 - nie jest potrzebny układ resettera. Znajduje się 
on bowiem wewnątrz struktury układu. Wystarczającym dla wejścia RESET mikrokontrolera jest 
podanie +zasilania poprzez rezystor o wartości 10..100k. Oczywiście mam zaufanie do producenta, 
jednak mimo wszystko do wejścia RESET mikrokontrolera podłączyłem kondensator elektrolityczny w 
celu uzyskania dodatkowego opóźnienia przy załączeniu napięcia zasilania. Równolegle z rezystorem 
R1 połączyłem diodę D1, katodą do + zasilania. Ma ona na celu rozładowanie pojemności 
kondensatora elektrolitycznego po wyłączeniu zasilania. 

Rys.4. Przykład aplikacji AT90S8515 programowanego w układzie.

J.Bogusz: „Programowanie AT89S8252 w układzie” strona 4 z 5

background image

http://www.easy-soft.tsnet.pl/

Mikrokontrolery 89C51RD2 i podobne. 

Zapis pamięci przez interfejs UART.

Mikrokontrolery RD2 i podobne programowane są z wykorzystaniem interfejsu UART. Przejście w tryb 
programowania wymuszane jest przez podanie stałego poziomu logicznego „1” na wyprowadzenie 
PSEN podczas startu mikrokontrolera po załączeniu zasilania czy też ustąpieniu sygnału reset. W 
jednej ze swoich aplikacji wykorzystuję do zapisu programu w pamięci FLASH wbudowany w płytkę 
driver UART, MAX202. Wszystko, co w takiej sytuacji jest potrzebne, to kabel łączący urządzenie z 
komputerem PC oraz aplikacja mikrokontrolera zaprojektowana w taki sposób, że przełączenie zworki 
umożliwiało podanie logicznej „1” na PSEN.
Cały ciężar programowania układu spada na oprogramowanie komputera PC. Należy tu nadmienić, że 
najbardziej popularne na polskim rynku są układy z serii RD2 produkcji jednej z trzech firm: 
nieistniejącej już TEMIC (kupiona przez ATMEL), PHILIPS oraz ATMEL. Oprogramowanie dla 
układów TEMIC oraz ATMEL jest obecnie wspólne. Program to freeware, który można ściągnąć ze 
strony producenta. Nosi on nazwę ATMEL – FLIP. Oprogramowanie PHILIPS, również darmowe i do 
pobrania ze strony WWW producenta, nosi nazwę WinISP. Niestety, mimo niemalże identycznych 
nazw, mikrokontrolery różnią się między sobą i w związku z tym programów nie da się używać 
zamiennie.
Po uruchomieniu programu, jeśli już podano logiczną „1” na wyprowadzenie PSEN oraz załączono 
(restartowano) mikrokontroler, należy z menu wybrać typ używanego a następnie przejść do menu 
połączenia i dokonać synchronizacji z programowanym układem. Układ nie zsynchronizowany nie 
pozwoli się zapisać! Używając rezonatora 22,1184MHz można zapisywać układ 89C51RD2 z 
prędkością aż 115200 bps.

Fot.1. Zrzut ekranu programu ATMEL- FLIP (wersja 1.8.8). Wybór programowanego układu. Obok 

symbolu układu znajduje się symbol kabla, zbliżony wyglądem do wtyku USB. To jest właśnie 
menu połączenia. Symbol czerwonej książki, to symbol zawartości odczytywanego z dysku lub 
zapisywanego na dysku bufora w pamięci RAM.

Jacek Bogusz
jacek.bogusz@easy-soft.tsnet.pl

J.Bogusz: „Programowanie AT89S8252 w układzie” strona 5 z 5