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