programator uniwersalny

Transkrypt

programator uniwersalny
PROGRAMATOR UNIWERSALNY
PRZEZNACZENIE
Opisany w artykule programator został zaprojektowany jako element wyposażenia
warsztatu elektronika hobbysty. Żyjemy w czasach kiedy coraz więcej urządzeń jest
wykonywanych w oparciu o rozmaite układy programowalne, jednak ceny większości
profesjonalnych programatorów są zaporowe dla amatorów samodzielnego
konstruowania układów z mikrokontrolerami i układami programowalnymi.
Wygląd programatora RKProg - kliknij aby powiększyć
Wygląd programu obsługującego programator na PC - kliknij aby powiększyć
CHARAKTERYSTYKA URZĄDZENIA
Programator jest urządzeniem wykonanym z popularnych i tanich elementów
elektronicznych. Składa się z zaledwie 4 układów scalonych (z czego 2 to stabilizatory, 1
sześciokrotny inwerter i 1 mikrokontroler), kilku tranzystorów oraz innych elementów
dyskretnych. Jedynym utrudnieniem jest posiadanie zaprogramowanego układu AT89C52
(zobacz programator procesorów ATMEL AT89C może być pomocny) sterującego pracą
urządzenia. Układ jest łatwy do wykonania i uruchomienia przez średniozaawansowanego
elektronika amatora. Konstrukcja układu jest modułowa. Składa się on z płytki bazowej
zawierającej część sterującą programatora oraz z odpowiednich adapterów. Urządzenie
zostało tak zaprojektowane aby wszystkie moduły można było wykonać na laminacie
jednostronnym.
FUNKCJE URZĄDZENIA
Obsługa układów:







Szeregowe pamięci EEPROM z magistralą I2C typu 24C01A, 24C02, 24C04,
24C08, 24C16, 24C32, 24C64, 24C128, 24C256, 24C512.
Szeregowe pamięci EEPROM z magistralą Microwire typu 93C06, 93C46, 93C56,
93C57, 93C66.
Mikrokontrolery jednoukładowe firmy ATMEL serii MCS-51: AT89C1051,
AT89C2051, AT89C4051, AT89C51, AT89C52, AT89C55, AT89S53, AT89S8252.
Mikrokontrolery jednoukładowe firmy ATMEL serii AVR: AT90S1200, AT90S2313,
AT90S4414, AT90S8515. Układy te są programowane w trybie równoległym przez
co mamy możliwość programowania ich konfiguracji (nie robią tego proste
programatory szeregowe SPI, których wiele opisów można znaleźć w sieci
Internet).
Mikrokontrolery jednoukładowe firmy MICROCHIP: PIC16F83, PIC16F84
Równoległe pamięci EPROM typy od 2716 do 27080.
Równoległe pamięci FLASH typy od 29x010 do 29x080.
W przyszłości będą obsługiwane:
1


Układy GAL typu 16V8, 20V8, 22V10
Układy ze zmiennym kodem KeeLoq f-my MICROCHIP
Nie są to możliwości imponujące (jak na programator uniwersalny) lecz w zupełności
wystarczające. Aby rozszerzyć zakres obsługiwanych układów nie trzeba w zasadzie
zmieniać układu - wystarczy dokonać zmian w programie (wielka zaleta układów
opartych o mikrokontrolery).
Pliki do pobrania (obejrzenia)
Schemat programatora RKProg (GIF) - kliknij aby powiększyć
Rysunek płytki programatora RKProg (PDF)
Rozmieszczenie elementów na płytce programatora RKProg (PDF)
ZASADA DZIAŁANIA
Programator jest urządzeniem mikroprocesorowym sterowanym z komputera
nadrzędnego (hosta) poprzez interfejs szeregowy RS-232. Komunikacja odbywa się z
prędkością 19200 bodów, która została wybrana jako kompromis pomiędzy szybkością
komunikacji a możliwą liczbą błędów transmisji. Program pracujący na komputerze
nadrzędnym wysyła odpowiednie komendy i dane oraz kontroluje ich poprawne przyjęcie
przez programator. Natomiast program "zaszyty" w układzie AT89C52 sterujący pracą
programatora odpowiednio je interpretuje, steruje układem programowanym dbając
jednocześnie o odpowiednie poziomy napięć i zależności czasowe. Dzięki takiemu
rozdzieleniu funkcji program sterujący programatorem może być napisany na dowolną
platformę sprzętową (PC, Amiga, ATARI ST itp.) jak i programową (DOS, Windows, UNIX,
OS/2 itp. ) - program sterujący musi jedynie wysyłać odpowiednie komendy i
odpowiednio interpretować odpowiedzi z programatora. W chwili obecnej istnieje
oprogramowanie sterujące programatorem pracujące pod kontrolą systemu MS-Windows.
Zasilanie
Modelowy programator jest zasilany napięciem stałym o napięciu ok. 26V. Zasilacz i
układ przełączający napięcia programujące jest tak skonstruowany, że można zastosować
napięcie niższe (min. 14V), lecz nie będzie wtedy możliwe programowanie elementów
wymagających napięć programujących wyższych od 12V. Napięcie podane z zasilacza
podane jest na wejście stabilizatora trzykońcówkowego U1 (7812), który wstępnie obniża
napięcie i dostarcza je do interfejsu RS-232. Z ww. układu zasilany jest stabilizator U2
(7805) zasilający resztę urządzenia. Kondensatory C1 do C5 filtrują napięcie zasilające i
zapobiegają wzbudzaniu się stabilizatorów.
Wyjaśnienia wymaga układ złożony z tranzystora T1, rezystora R1 oraz diod D1 i D2.
Służy on do podwyższania napięcia zasilającego do 6V w przypadku programowania
układów wymagających takiego napięcia (np. pamięci EPROM). Jeżeli nie przewidujemy
wykorzystywania programatora do programowania tego typu układów można nie
2
montować ww. elementów a końcówkę 2 układu U2 obowiązkowo zewrzeć z masą np.
poprzez wlutowanie mostka w miejsce kolektora i emitera tranzystora T1.
Dioda LED (D3) sygnalizuje załączenie napięcia zasilającego.
Interfejs RS-232
Ze specyfikacji interfejsu RS-232 wynika, ze powinien on wykorzystywać poziomy napięć
od -12V do +12V względem masy a układ AT89C52 używa poziomów TTL. Wynika stąd,
że trzeba wykonać konwersję poziomów. Wykorzystano tu pewną "sztuczkę" polegającą
na wykorzystaniu charakterystyk wejściowych układów dopasowujących poziomy napięć
znajdujących się w praktycznie każdym komputerze PC (są to MC1489 lub MAX232) - nie
reagują one na ujemny poziom napięcia. W związku z tym interfejs w programatorze
zrealizowany za pomocą inwertera U3A w odpowiedzi na stan wysoki linii TXD układu
AT89C52 nie daje na wyjściu napięcia ujemnego a "tylko" 0V. Stan niski na ww. linii
spowoduje pojawienie się napięcia zbliżonego do +12V dzięki "podciągnięciu" wyjścia
bramki U3A do poziomu +12V za pomocą rezystora R7.
Interfejs linii RXD procesora także wykonano w oparciu o inwerter (U3C). Jednak aby
dopasować poziomy napięć interfejsu RS-232 do poziomów TTL wykorzystano układ
złożony z diody zenera Z5 i rezystora R8 ograniczającego prąd płynący przez diodę.
Dioda pełni podwójną rolę - w przypadku pojawienia się na wejściu (końcówka 2 złącza
J3) napięcia dodatniego większego od jej napięcia przebicia - ogranicza napięcie do ok.
+5V, jeśli na ww. wejściu wystąpi napięcie ujemne - dioda będzie spolaryzowana w
kierunku przewodzenia i ograniczy napięcie na wejściu inwertera do ok. -0,6V co nie
spowoduje zniszczenia układu U3. Rezystor R9 zamyka obwód otwartego kolektora
bramki U3C.
Układ przełączający napięcia programujące
Do przełączania napięć wykorzystano wysokonapięciową wersją inwerterów z otwartym
kolektorem 74LS06 (U3) wraz z diodami zenera Z1 do Z4 i Z6, rezystorami R3, R4, R5,
kondensatorem C6 oraz tranzystorami T2 (BD139) i T3 (BC237). Dzięki takiemu
rozwiązaniu udało się uzyskać kompromis pomiędzy skomplikowaniem układu a kosztem
(są dostępne przetworniki CA z interfejsem I2C) oraz zlikwidować problem kalibracji
napięć (pod warunkiem, że elementy są sprawne i napięcia diod zenera mieszczą się w
klasie). Przełączanie napięcia odbywa się poprzez podanie stanu wysokiego na
odpowiednie wejście inwertera (dopuszczalne, a nawet pożądane jest wysterowanie
więcej niż jednego wejścia inwertera przełączającego - zyskujemy dodatkowe
zabezpieczenie na wypadek uszkodzenia się (przerwy w obwodzie wyjść ww. bramek) jest to realizowane programowo. Tranzystor T2 z rezystorem R3 włącza / wyłącza
ustalone wcześniej napięcie. Tranzystor T3 pracuje jako wtórnik emiterowy, zwiększając
obciążalność źródła napięcia programującego.
Załączanie zasilania układu programowanego
Do załączania napięcia zasilania układu programowanego wykorzystano układ złożony z
tranzystora T4 (BD140), rezystora R11 i kondensatora C11. Dziwić może umieszczenie w
kolektorze tranzystora samego kondensatora - jednak nie do końca jest to prawda obwód kolektora jest zamknięty poprzez rezystor i diodę LED znajdujące się na
dołączanych do programatora płytek adapterów oraz oczywiście przez sam element
programowany.
Układy sterujące pracą mikrokontrolera
Do prawidłowego wykonywania programu znajdującego się w układzie U4 potrzebny jest
zegar taktujący. Układ generatora sygnału zegarowego jest zawarty w układzie U4, jego
częstotliwość jest stabilizowana kwarcem X1 o częstotliwości 11,059 MHz. Taka
częstotliwość zegara taktującego została wybrana ze względu na łatwość doboru
standardowych prędkości transmisji na łączu RS-232. Kondensatory C8 i C9 uzupełniają
układ generatora. Kondensator C10 i rezystor R10 tworzą układ generujący sygnał
restartu procesora po włączeniu zasilania.
ADAPTERY
Programowane układy są podłączane do programatora za pomocą adapterów. Są to
proste układy zawierające zazwyczaj podstawki pod układy scalone i kilka elementów
dopasowujących. Takie rozwiązanie pozwoliło zmniejszyć do minimum liczbę elementów
przełączających przez co zwiększono niezawodność układu - chodzi tu szczególnie o
przełączanie względnie wysokiego napięcia programującego.
3
Adapter ATMEL, PIC, EEPROM
Wygląd adaptera ATMEL, PIC, EEPROM - kliknij aby powiększyć
Jest to prosty układ zawierający 4 podstawki pod układy scalone. Umożliwia
programowanie układów ATMEL w obudowach 20 nóżkowych (zarówno MCS-51 i AVR),
PIC16x8x, szeregowych pamięci EEPROM typu 93Cxx oraz 24Cxx.
Pliki do pobrania (obejrzenia)
Schemat adaptera ATMEL, PIC, EEPROM (GIF) - kliknij aby powiększyć
Rysunek płytki adaptera ATMEL, PIC, EEPROM (PDF)
Rozmieszczenie elementów na płytce adaptera ATMEL, PIC, EEPROM (PDF)
Adapter ATMEL AVR
Wygląd adaptera AVR - kliknij aby powiększyć
Jest to prosty układ zawierający 1 podstawkę 40 nóżkową. Umożliwia programowanie
układów ATMEL AVR w obudowach 40 nóżkowych (AT90S4414, AT90S8515).
Pliki do pobrania (obejrzenia)
4
Schemat adaptera układów ATMEL AVR (GIF) - kliknij aby powiększyć
Rysunek płytki adaptera ATMEL AVR (PDF)
Rozmieszczenie elementów na płytce adaptera ATMEL AVR (PDF)
Adapter MCS-51
Wygląd adaptera MCS51 - kliknij aby powiększyć
Jest to prosty układ zawierający 1 podstawkę 40 nóżkową. Umożliwia programowanie
układów ATMEL MCS-51 w obudowach 40 nóżkowych (AT89C51, AT89C52, AT89C55,
AT89S8252). Z powodu podawania adresu w sposób równoległy uzupełniono płytkę o
liczniki 4040 (U2, U3) pełniące rolę licznika adresów.
Pliki do pobrania (obejrzenia)
Schemat adaptera układów MCS-51 (GIF) - kliknij aby powiększyć
Rysunek płytki adaptera MCS-51 (strona lutowania) (PDF)
Rysunek płytki adaptera MCS-51 (strona elementów) (PDF)
Rozmieszczenie elementów na płytce adaptera MCS-51 (PDF)
Adapter EPROM
5
Wygląd adaptera EPROM - kliknij aby powiększyć
Jest to prosty układ zawierający 1 podstawkę 32 nóżkową. Umożliwia programowanie
układów pamięci EPROM, EEPROM i FLASH w obudowach 24, 28 i 32 nóżkowych. Z
powodu podawania adresu w sposób równoległy uzupełniono płytkę o rejestry przesuwne
74LS164 (U1, U2, U3).
Pliki do pobrania (obejrzenia)
Schemat adaptera układów EPROM (GIF) - kliknij aby powiększyć
Rysunek płytki adaptera EPROM (strona lutowania) (PDF)
Rysunek płytki adaptera EPROM (strona elementów) (PDF)
Rozmieszczenie elementów na płytce adaptera EPROM (PDF)
MONTAŻ I URUCHOMIENIE
Układ główny programatora należy zmontować na płytce drukowanej wyposażonej w
podstawki pod układy scalone - ułatwi to uruchamianie a później jego ewentualne
modyfikacje. Podobnie należy zrobić z układami adapterów. Przed rozpoczęciem montażu
należy dokładnie sprawdzić wszystkie płytki drukowane, czy przypadkiem nie ma zwarć
między ścieżkami lub co jest równie złośliwe sprawdzić pod kątem przerw w ścieżkach należy to wykonać omomierzem. Nawet szerokie ścieżki wyglądające "na oko" na
sprawne mogą się okazać uszkodzone. Po tej żmudnej ale koniecznej czynności można
przystąpić do dalszej pracy. Montaż należy rozpocząć od elementów najmniejszych
gabarytowo (rezystory, kondensatory, diody, tranzystory). Następnie należy wlutować
podstawki pod układy scalone, stabilizatory U1 i U2, gniazda J1, J2, J3. Połączenie
głównego modułu programatora z adapterami jest wykonane za pomocą przewodu ze
złączem 40 szpilkowym tzw. "taśma" (takie samo jak w twardych dyskach IDE). Należy
zwrócić uwagę na długość tego przewodu - obowiązuje generalna zasada: im krótszy
przewód tym lepiej. Należy jednak zapewnić wygodę wymiany adapterów, dlatego nie
należy przesadzać ze zbytnim jego skracaniem (egzemplarz modelowy posiadał przewód
długości ok. 10cm).
Po montażu przychodzi pora na najciekawszy moment: uruchomienie. Przy wyjętych z
podstawek układach U3 i U4 podłączamy zasilanie (najlepiej o wartości ok. 26V ale może
być niższe - w zasadzie powyżej 14V - nie uzyskamy jedynie wyższych napięć
programujących - obecna wersja jeszcze nie pozwala na programowanie układów EPROM
i GAL więc napięcie 14 V powinno w zupełności wystarczyć). Dioda D3 powinna świecić.
Mierzymy napięcia między wyprowadzeniami 14 i 7 układu U3 oraz 40 i 20 układu U4 -
6
powinno wynosić ok. 5V. Sprawdzamy napięcie na wyjściu stabilizatora U1 (końcówka 3)
- tu powinno być 12V. Jeśli coś jest nie tak, należy poszukać błędu. W przeciwnym
wypadku wyłączamy zasilanie, wkładamy do podstawek układy U3 i U4. Podłączamy
programator do dowolnego portu COM komputera PC. Na komputerze PC uruchamiamy
dowolny program terminalowy np. HyperTerminal znajdujący się w każdej dystrybucji
Windows 95, 98 czy NT. W terminalu należy skonfigurować port szeregowy do którego
jest podłączony programator (COM1 do 4) na 19200 (firmware 1.xx) lub 57600 (firmware
2.xx) bodów, 8 bitów danych, 1 bit stopu, bez parzystości, brak kontroli przepływu.
Włączamy zasilanie programatora. Jeśli wszystko zostało dobrze skonfigurowane i
podłączone to w okienku terminala powinien się zgłosić znak zachęty następującej
postaci: RKProg>. Naciskając klawisz <ENTER> powodujemy kolejne wyświetlanie znaku
zachęty. Teraz przyszła pora na sprawdzenie napięć programujących: podłączamy
woltomierz między masę a końcówkę nr 40 złącza J2, w oknie terminala wydajemy
komendę T1<ENTER>. W odpowiedzi powinniśmy otrzymać napis 5V, takie napięcie
powinien wskazywać woltomierz. Naciśnięcie klawisza <ENTER> powoduje wyłączenie
napięcia programującego. Wydając komendy od T2 do T5 sprawdzamy napięcia od 12 do
25V.
Jeśli powyższe czynności zostały wykonane prawidłowo i wszystko działa jak należy,
można przystąpić do próby generalnej. Zamykamy program terminalowy (żeby nie
blokował portu szeregowego komputera PC). Przy wyłączonym zasilaniu podłączamy
adapter układów ATMEL, PIC i EEPOM. Załączamy zasilanie programatora. Na
komputerze PC uruchamiamy program RKProg32.exe (Win95, 98, NT) lub RKProg16.exe
(Windows 3.1x). W przypadku gdy program powita nas komunikatem o braku odpowiedzi
z programatora należy wybrać z menu Port pozycję odpowiadającą portowi
szeregowemu, do którego jest podłączony programator. Jeżeli ponownie pojawi się ten
komunikat należy postępować zgodnie ze wskazówkami zawartymi w tym oknie. Po
poprawnym zainicjowaniu komunikacji pomiędzy programem sterującym a
programatorem należy umieścić w odpowiedniej podstawce programowany układ np.
pamięć 24C02 wybrać z menu Typ wybrany układ (tu Typ -> EEPROM -> 24Cxx ->
24C02). Podpowiedź, gdzie należy umieścić dany układ jest wyświetlana przez program
po wybraniu polecenia z menu Pomoc -> Położenie układu. Następnie można przejść do
odczytania zawartości układu (menu Układ -> Czytaj). Pozostałe polecenia obsługuje się
podobnie. Teraz pozostaje tylko poznanie obsługi programu, i można wykorzystywać
programator do realizacji dowolnych projektów zawierających mikrokontrolery czy
pamięci nieulotne.
UWAGA!!!
Po poprawnym zmontowaniu układ powinien działać poprawnie, jednak ze względu na
fakt, że układ montuje użytkownik, autor NIE PONOSI ODPOWIEDZIALNOŚCI za
powstałe szkody związane z tym układem i programem.
FUNKCJE POSZCZEGÓLNYCH UKŁADÓW
SCALONYCH
U1 - 7812 - stabilizator napięcia 12V
U2 - 7805 - stabilizator napięcia 5V
U3 - 74LS06 - sześciokrotny inwerter wysokonapięciowy (30V) z otwartym kolektorem przełączanie napięć programujących oraz konwersja poziomów RS-232/TTL.
U4 - AT89C52 - mikorokontroler kompatybilny z serią MCS-51 z wbudowaną pamięcią
FLASH 8kB - jednostka sterująca programatorem
ZESTAW KOMEND STERUJĄCYCH PROGRAMATORA
Dla osób chcących samodzielnie napisać program sterujący pracą programatora
zamieszczam spis wszystkich komand oraz ich format.
1 znak - rodzina układu lub funkcja:
'A' - układy f-my Atmel serii MSC-51 typu AT89C
'2' - szeregowe pamięci EEPROM z interfejsem I2C typu 24Cxx
'3' - szeregowe pamięci EEPROM z interfejsem Microwire typu 93Cxx
'7' - równoległe pamięci EPROM typu 27...
'9' - równoległe pamięci FLASH typu 29...
'I' - układy f-my Atmel z interfejsem SPI
7
'K' - układy f-my Microchip serii KeeLoq
'G' - układy GAL
'P' - układy f-my Microchip serii PIC16x8x
'V' - układy f-my Atmel serii AVR typu AT90Sxxxx
'S' - wysyła listę programowanych układów
'T' - testowanie układu programatora (sprawdzanie napięć programujących)
2 znak- komenda do wykonania
'R' - odczyt pamięci
'W' - programowanie pamięci
'E' - kasowanie układu
'S' - odczyt sygnatury
'B' - test "czystości" pamięci
'F' - zapis bitów konfiguracji (czasem zabezpieczenia) układu
'G' - odczyt bitów konfiguracji (czasem zabezpieczenia) układu
'O' - odczyt pamięci EEPROM niektórych procesorów
'P' - zapis jw.
'Q' - przerwanie aktualnie wykonywanej czynności
3 znak (opcjonalnie)- typ układu w ramach rodziny
'1' - 24C01
'2' - 24C01A
'3' - 24C02
'4' - 24C04
'5' - 24C08
'6' - 24C16
'7' - 24C164
'8' - 24C32
'9' - 24C64
'A' - 24C128
'B' - 24C256
'C' - 24C512
'1'
'2'
'3'
'4'
'5'
-
93C06
93C46
93C56
93C57
93C66
'1'
'2'
'3'
'4'
'5'
'6'
'7'
'8'
'A'
'B'
-
AT89C1051
AT89C2051
AT89C4051
AT89C51 z Upp=12V
AT89C52 z Upp=12V
AT89S8252
AT89C55
AT89S53
AT89C51 z Upp=5V
AT89C52 z Upp=5V
'1'
'2'
'3'
'4'
-
AT90S1200
AT90S2313
AT90S4414
AT90S8515
'1' - PIC16F83
'2' - PIC16F84
'1'
'2'
'3'
'4'
-
2716
2732
2732
2764
z
z
z
z
Upp=25V
Upp=21V
Upp=25V
Upp=12 V
8
'5' - 2764 z Upp=21V
'6' - 27128 z Upp=12V
'7' - 27128 z Upp=21V
'8' - 27256 z Upp=12V
'9' - 27256 z Upp=21V
'A' - 27512 z Upp=12V
'B' - 27010 z Upp=12V
'C' - 27020 z Upp= 12V
'D' - 27040 z Upp= 12V
'E' - 27080 z Upp= 12V
'1'
'2'
'3'
'4'
-
GAL16V8
GAL20V8
GAL18V10
GAL22V10
Komunikaty wysyłane przez programator i do programatora
'N' - prośba o następne dane
'R' - prośba o powtórzenie danych
'E' - błąd
Przykład:
Aby odczytać pamięć programu układu AT90S1200 należy wysłać komendę
'VR1'<ENTER>. W odpowiedzi otrzymamy paczkę 65 bajtów (64 bajty danych oraz bajt
sumy kontrolnej) po ich otrzymaniu należy sprawdzić sumę kontrolną - jest ona
wyliczana wg następującego algorytmu zapisanego w języku C:
#define BL_LEN 64; // długość bloku danych
unsigned char BUFFER[BL_LEN+1]; // bufor z danymi
suma_kontrolna=0;// inicjalizacja sumy kontrolnej
unsigned char i;
for(i=0; i<BL_LEN; i++) suma_kontrolna+=BUFFER[i];// licz sumę kontrolną
suma_kontrolna=~suma_kontrolna+1;// uzupełnienie do 2
Jeżeli wyliczona suma kontrolna się zgadza z odebraną to można odczytać następne dane
poprzez wysłanie do programatora komendy 'N' w odpowiedzi otrzymamy kolejną porcję
danych. W przeciwnym wypadku można wysłać do programatora komendę 'R' - prośbę o
powtórzenie danych. Proces ten można przerwać wysyłając komendę 'Q'.
PROGRAM OBSŁUGI PROGRAMATORA
Jak wcześniej wspomniano, do prawidłowej pracy potrzebny jest program obsługi zaszyty
w pamięci FLASH układu AT89C52 poniżej są dostępne za darmo! - można do ich
zaprogramowania użyć programatora procesorów ATMEL AT89C .
Program do wpisania w pamięć FLASH układu AT89C52 lub
AT89S8252
Program obsługujący (FIRMWARE) znajduje się w pliku RKPROG.ZIP (7kB) - wymaga
hasła, które można otrzymać na stronie rejestracja. Należy wybrać program
RKProg.HEX wpisać Użytkownika, nacisnąć Wyślij i otrzymamy hasło niezbędne do
rozpakowania archiwum.
Programy obsługi na PC
9

Podobne dokumenty