Jedyny taki przenośny programator układów AVR. Pomoże wszędzie tam gdzie trzeba zaktualizować oprogramowanie, a układ docelowy znajduje się w trudno dostępnym miejscu i nie mamy możliwości (lub chęci) ciągać ze sobą laptopa i kupy przewodów. Banalnie łatwa obsługa, niski koszt wykonania, super mały, super szybki, obsługuje karty SD...
Cechy:
-super mały - wymiary tylko 44 x 39 x 5,5 mm
-super szybki - zapis do 12,5kB/s, odczyt do 14,5kB/s
-używa taniego nośnika danych - wszechobecnych kart SD/MMC
-obsługuje system plików FAT16 oraz FAT32
-odczyta, zapisze, zweryfikuje pamięć flash i eeprom
-odczyta, zapisze, zweryfikuje fusebity i lockbity
-zapis i odczyt do plików BIN, HEX, oraz TXT
-potrafi ustawić fabryczne wartości fusebitów, kasować pamięci
-tani łatwo dostępny wyświetlacz graficzny - LPH7779
-wyświetla zabawne animacje po każdej operacji
-standardowe złącze programowania Atmel 6-PIN ISP
-posiada funkcję auto-aktualizacji własnego oprogramowania
-bardzo prosta obsługa, nawigacja 4 przyciskami
-menu ustawień dla użytkownika
-automatyczne dobieranie prędkości programowania (do 4MHz)
-praca przy 3V, programowanie układów od 3V do 5V
Obsługa:
Programator włączamy przytrzymując przycisk LE(lewo). Pierwsze co widzimy to ekran powitalny, oraz informacje o wersji - informacje te znikają po chwili i już możemy nawigować w menu. Przyciskami UP(góra) oraz DN(dół) wybieramy żądaną opcję, przyciskiem RI(prawo) zatwierdzamy operację/wchodzimy w opcję menu, a przyciskiem LE(lewo) anulujemy operację, cofamy się w menu, które wygląda tak:
Flash: >Write >Read >Verify
Eeprom: >Write >Read >Verify
Fusebits: >Write >Read >Verify >Default
Lockbits: >Write >Read >Verify >Chip erase
Settings: >Auto Verify >Auto Erase >Show Anims >Progr bar >Files type
Opis funkcji:
Write - zapisuje do wybranej pamięci zawartość pliku z karty. Należy wskazać plik z listy. W przypadku fusebitów lub lockbitów, zapisuje bajty ustawień (z pliku txt). Długość pliku jest długością jaką programator zapisze do pamięci, reszta pamięci nie będzie zapisana.
Read - odczytuje zawartość wybranej pamięci i zapisuje do pliku na karcie. Plik tworzony automatycznie w odpowiednim folderze. Format nazwy to "x.yyy" gdzie x to numer kolejny pliku, a yyy to rozszerzenie BIN lub HEX. Np. "4.bin" lub "22.hex" - nazwa jest wyświetlana i dobrze będzie ją sobie gdzieś zanotować. Odczytana zostanie cała dostępna pamięć, niezależnie ile danych się w niej znajduje. W przypadku fusebitów lub lockbitów, zapisuje do pliku bajty ustawień do pliku txt.
Verify - porównuje zawartość wybranej pamięci z zawartością wskazanego pliku, wynikiem operacji jest "PASS" lub "FAIL at x" gdzie x to numer pierwszej komórki w jakiej wystąpiła niespójność. W przypadku fusebitów lub lockbitów, porównuje bajty ustawień.
Default - resetuje wszystkie fusebity do wartości fabrycznych.
Chip erase - wewnętrzna komenda "chip erase" czyści całą pamięć układu i resetuje zabezpieczenia lockbit.
Opis ustawień:
Auto verify - umożliwia automatyczną weryfikację pamięci (tak jak opcja "verify") z tym że robi to automatycznie po każdym zapisie. Ustawienia: ON lub OFF. Dotyczy tylko operacji na pamięciach flash oraz eeprom, bajty fusebitów i lockbitów są odczytywane od razu po zapisie.
Auto erase - automatycznie wykonuje komendę "chip erase" przed każdym zapisem do pamięci flash. Ustawienia: ON lub OFF. Dotyczy tylko pamięci flash, którą obowiązkowo należy czyścić przed zapisem. Wyjątkiem jest sytuacja kiedy wiemy że pamięć jest wyczyszczona, a na jej końcu mamy np wgrany bootloader. Wyłączenie tej opcji spowoduje nadpisanie danych bez czyszczenia zawartości, co z kolei spowoduje zachowanie naszego bootloadera czy innych danych.
Show anims - wyświetla krótkie animacje po każdej operacji, zależnie od tego czy się powiodła czy nie. Ustawienia: ON lub OFF. Animacje w każdej chwili można przerwać naciskając przycisk LE. Są to śmieszne animacje i dodają specyficznego charakteru dla programatora, wytrawny internauta z pewnością je rozpozna Animacje to odtwarzane kolejno pliki BMP z danego folderu - więc można je podmienić na własne! Format pliku: Bitmapa (*.BMP), 84x48 pikseli, monochromatyczny (2bit). Kolejność odtwarzania nie jest alfabetyczna, pliki są odtwarzane w takiej kolejności w jakiej zostały skopiowane na kartę.
Progr bar - pasek postępu dla operacji zapisu, weryfikacji, oraz odczytu pamięci flash oraz eeprom. Ustawienia: ON lub OFF. Pasek postępu nieznacznie spowalnia proces, patrz "testy szybkości".
Files type - wybór typu plików z jakimi chcemy pracować. Ustawienia: BIN lub HEX. Dotyczy operacji na pamięciach flash oraz eeprom, zależnie od wyboru, na liście będą wyświetlanie tylko pliki danego rodzaju. Podczas odczytu do pliku, tworzony także będzie odpowiedni plik (w przypadku plików HEX, liczona będzie również suma kontrolna).
Karta pamięci, pliki:
Pliki umieszczać należy na karcie, w odpowiednich folderach. T.j. pliki dla pamięci flash w folderze "flash", eeprom w "eeprom", fusebits w "fuseb", oraz lockbits w "lockb". Folder "system" zawiera pozostałe pliki potrzebne do działania programatora, m.in. bazę danych µProcesorów, plik przechowujący ustawienia, czy obrazy BMP. Na kartę pamięci skopiować należy ZAWARTOŚĆ folderu "SD-FILES" z załącznika.
O ile w przypadku plików BIN flash i eeprom nie ma żadnej wątpliwości bo są to pliki generowane przez kompilatory, to budowę plików fusebitów i lockbitów należy opisać. Są to zwykłe pliki tekstowe do których wpisujemy wartości w postaci hexadecymalnej:
Plik fusebitów powinien zawierać kolejno dane dla: fuse low, fuse high, fuse extended - w formacie HEX. Przykładowo, zawartość pliku z fusebitami dla Attiny45 powinna wyglądać tak: 62DFFF. Plik może być dłuższy, mogą być w nim dodatkowe komentarze, ale pod uwagę będą brane tylko trzy pierwsze bajty (6 znaków). Jeśli procesor posiada dwa, lub tylko jeden bajt fusebitów, to oczywiście wykorzystywana będzie tylko taka liczba bajtów.
Budowa pliku lockbitów jest analogiczna do budowy pliku fusebitów. Z tą tylko różnicą że tutaj wykorzystywany będzie tylko jeden bajt, należy jednak pamiętać że nieużywane bity zawsze muszą wynosić 1. Czyli jeśli chcemy włączyć bity LB0 i LB1, należy użyć wartości "FC" (11111100). W przypadku fusebitów obowiązuje taka sama zasada, w prawdzie nawet jeśli postąpimy inaczej i spróbujemy włączyć nieistniejące bity (zapisać w nie 0) to przy weryfikacji otrzymamy błąd bo te bity będą wynosić 1.
Przy odczycie fusebitów i lockbitów do pliku, programator utworzy pliki tekstowe wg opisanego wyżej schematu.
Wybierając odpowiednią pamięć w menu, a następnie opcję zapisu lub weryfikacji, wyświetlona zostanie lista dostępnych plików BIN/HEX lub TXT z odpowiedniego katalogu. Pliki nie są sortowane alfabetycznie lub w inny sposób, pojawiają się w takiej kolejności w jakiej je skopiowano i/lub utworzono. Można umieszczać dowolną liczbę plików, wszystkie pojawią się na liście. Wybór pliku przyciskami UP oraz DN, zatwierdzenie przyciskiem RI, anulowanie przyciskiem LE. Za jednym razem na ekranie mieści się 6 nazw, kolejna karta plików odsłania się po przyciśnięciu DN gdy wskazywany będzie ostatni plik na karcie. Karty plików można przełączać tylko w przód (w dół), po dojściu do końca wyświetlona zostanie pierwsza karta.
Programator obsługuje karty MMC oraz SD, przetestowane przeze mnie karty to: 128MB, 512MB, 1GB, 2x2GB. Nazwy plików dowolne, lecz na wyświetlaczu pojawią się one w formacie DOS 8.3 (8 znaków + rozszerzenie). Dłuższe pliki będą oddzielone tyldą (`), a jeśli ich nazwy w pierwszych 8 znakach będą się różniły, pliki będą oznaczone numerem kolejnym. Nie będą również wyświetlane znaki diakrytyczne i inne wynalazki - więc pliki radzę nazywać czytelnie aby nie było później problemu z ich zidentyfikowaniem.
W planach: obsługa kart SDHC.
Zasilanie, napięcia:
Układ przeznaczony jest do pracy z zasilaniem bateryjnym, ale nic nie stoi na przeszkodzie aby użyć odpowiedniego zasilacza.
Nominalne napięcie pracy: 3,3V
Maksymalne napięcie pracy: 3,6V
Minimalne napięcie pracy: 2,7V*
Pobór prądu podczas uruchamiania: do 100mA*
Pobór prądu podczas procesu programowania: ok. 10mA*
Pobór prądu w menu: 5mA
Pobór prądu w stand-by: 0.10µA
*zależne od włożonej karty SD
Na spodniej części płytki znajduje się miejsce do przylutowania dwóch gniazd na baterie CR2032 - napięcie pracy będzie wynosić 3V, a wydajność prądowa takich baterii z reguły nie pozwoli na dołączenie zasilania do układu programowanego - spadek napięcia prawdopodobnie narobi bałaganu na programowanym układzie lub na karcie pamięci. Zamiast lutować podstawki, użyć można innej baterii o większej wydajności (może być to np. bateria z telefonu komórkowego), nie można jednak dopuścić do przekroczenia maksymalnego napięcia pracy.
Cały programator pracuje przy napięciu takim, jakie otrzyma z baterii ponieważ nie posiada żadnego stabilizatora. Także proces programowania odbywa się na takim poziomie (stan wysoki). Układ docelowy (programowany) może być programowany przy napięciach od 3V do 5V kiedy programator pracuje przy 3V. Z jednej strony na linii wejściowej MI-SO znajduje się zabezpieczenie w postaci rezystora i diody zenera 3V3 które ochroni wejście programatora przed zbyt wysokim napięciem, a z drugiej strony układ zasilany z 5V prawidłowo rozpozna stan wysoki na poziomie 3V na liniach MO-SI oraz SCK (patrz nota: electrical characteristics > dc characteristics > VIH = 0.6 VCC, co oznacza nic innego jak 0.6*5V=3V - jest to gwarantowana wartość).
Programator nie posiada mechanicznego wyłącznika, włączanie i wyłączanie realizowane jest poprzez przytrzymanie przycisku LE. Po wyłączeniu, programator odcina zasilanie wyświetlacza oraz karty pamięci, a sam przechodzi w tryb głębokiego uśpienia pobierając z baterii (typowo) 0,1µA.
ISP:
Złącza:
Wyprowadzenie programujące to 6pin męski w standardzie ISP ATMEL. Położenie pinów obrazuje rysunek, wcięcie wtyczki od spodniej strony płytki. Bez problemu można wykonać tasiemkę zakończoną gniazdem 10pin żeński w standardzie ISP KANDA, lub uniwersalną tasiemkę posiadającą kombinację gniazd 10PIN i 6PIN. Po zakończeniu programowania, linie SCK, MOSI, MISO oraz RESET stają się przeźroczyste dla układu docelowego.
Automatyczne dobieranie prędkości programowania:
Programator przy każdej inicjacji programowania z układem docelowym automatycznie dobiera prędkość programowania (prędkość linii zegarowej SCK). Dostępnych jest 7 kroków regulacji: 4MHz, 2MHz, 1MHz, 500KHz, 250KHz, 125KHz, 62,500KHz. Teoretycznie będzie to 1/4 częstotliwości pracy układu docelowego, lecz nie zawsze. Programator za każdym razem zaczyna od najwyższej prędkości i wykonuje 10 krotny test odczytu sygnatury - jeśli pojawi się jakiś błąd, prędkość zostanie zmniejszona a test powtórzony, aż do zejścia do najniższej prędkości. Jeśli najniższa prędkość zawiedzie, programator zwróci komunikat że układ nie odpowiada. W przypadku bardzo długiej taśmy łączącej, programator może użyć niższej prędkości jeśli pojawią się błędy - krótki test może nie ujawnić błędów komunikacji które mogą wyjść dopiero przy zapisie do pamięci. Zalecam używanie taśmy nie dłuższej jak 20cm. Podane wartości SCK dotyczą taktowania układu programatora z prędkością 8MHz.
Pomocniczy sygnał zegarowy
Ponieważ programator jest zasilany bateryjnie, zrezygnowałem ze zwykłej funkcji pinu VCC (5 pin gniazda 6 ISP) i nie ma możliwości podania zasilania na układ docelowy na tym pinie. Zamiast tego, na pinie tym dostępny jest pomocniczy sygnał zegarowy 8MHz który można wykorzystać jeśli układ docelowy ma ustawiony jakieś dziwne/zewnętrzne źródło zegarowe. Sygnał ten jest dołączony przez rezystor 1K, więc nie trzeba modyfikować taśmy łączącej jeśli na tej linii będzie występowało napięcie z układu docelowego.
Aktualizacja oprogramowania:
Jeśli pojawi się nowa wersja oprogramowania, można ją zaktualizować na dwa sposoby:
ISP: Podłączyć swój programator pod złącze ISP-6, oraz zewrzeć piny oznaczone jako "SLF-PRG" - dzięki temu złącze te stanie się złączem do aktualizacji oprogramowania (tak jak w USBasp).
BootLoader: Urządzenie posiada wbudowany bootloader dzięki któremu firmware można zaktualizować w bardzo prosty sposób! Do głównego katalogu karty (root) kopiujemy plik BIN aktualizacji firmware, i nadajemy mu nazwę "000.bin". Jeśli po włączeniu układu na wyświetlaczu nic się nie pojawiło - to dobrze! Plik z nowym firmware został prawidłowo rozpoznany, wystarczy teraz nacisnąć przycisk RI aby potwierdzić chęć aktualizacji. Urządzenie samo zaktualizuje sobie firmware, potrwa to kilka sekund, a następnie się uruchomi - na ekranie powitalnym będzie widniała nowa wersja programu - to wszystko! Teraz z karty wystarczy usunąć wcześniej wgrany plik aby urządzenie nie uruchamiało się w trybie aktualizacji. W trybie aktualizacji niektóre karty mogą być nieobsługiwane - więc jeśli po wgraniu pliku "000.bin" urządzenie uruchomiło się normalnie - to jest właśnie jedna z tych kart.
Uwagi:
Fusebity: Ext:07, high:D0, low:A2
(wewnętrzny oscylator 8MHz bez dzielenia /8, włączone wyjście CLKO, brown-out detection 2,7V, wektor resetu na adres bootloadera, pamięć bootloadera 4kB, włączony EESAVE)
Wewnętrzny oscylator Atmegi328P może być kalibrowany w bardzo szerokim zakresie. Skalibrowany fabrycznie zegar do 8MHz można "kalibrować" od 50% do nawet 200%, czyli od 4MHz do nawet 16MHz. Zmiana bit4 w pliku "config.ini" na "1" spowoduje wybranie maksymalnej częstotliwości - znacząco przyśpieszy to programowanie, jednak producent nie gwarantuje stabilnej pracy w takich warunkach (napięcie zasilania vs częstotliwość). Początkowo te ustawienie jest wyłączone.
Wyświetlacz jaki użyłem jest oryginalny - posiada sterownik PCD8544, organizację 84x48, standardowy dla niego zestaw instrukcji, oraz może przyjmować dane z max zegarem 4MHz - i z taką właśnie prędkością pracuje. Jeśli Twój wyświetlacz pokazuje głupoty lub nic nie pokazuje, są dwie możliwości:
a) posiada sterownik inny niż PCD8544 - w pliku "config.ini" przestaw bit6 na "1" - wyświetlacz będzie inaczej traktowany, choć nie gwarantuje to poprawnego działania.
b) nie może pracować przy 4MHz - w pliku "config.ini" przestaw bit5 na "1" - wyświetlacz będzie pracował przy 2MHz, taka prędkość nie powinna sprawiać mu problemów.
Wyświetlacz potrzebuje kondensatora dla wbudowanej przetwornicy napięcia (C2, C3), wartość nominalna to 1µF. U mnie z powodzeniem pracuje z pojemnością 200nF. Jeśli masz kłopoty z kontrastem, zwiększ tę pojemność - w miejsce C2 oraz C3 można wlutować bokiem kilka kondensatorów SMD. Jeśli wyświetlacz posiada pola lutownicze, to z można połączyć go za pomocą przewodów - jeśli posiada pola kontaktowe, użyj gumki kontaktowej która była w telefonie a sam wyświetlacz dobrze umocuj. Mimo tego że mój wyświetlacz posiada pola lutownicze, to użyłem właśnie gumki kontaktowej. Uchwyty wykonałem z fragmentu obudowy "złącza E+J". Może być to dowolny fragment czegokolwiek, o wymiarze wewnętrznym 5,2mm - akurat takie złącze walało mi się pod ręką
Wyświetlacz pomimo tego że może być oryginalny, nie musi obsługiwać wszystkich komend - np mój olewa komendę ustawiania kontrastu. Przy napięciu 3V3 obraz jest piękny, przy 3V kontrast jest bardzo słaby a przy 2V7 praktycznie nic nie widać. W takim przypadku niestety nic nie poradzimy, trzeba szukać innego wyświetlacza lub układ zasilać z 3V3.
Karta pamięci, zależnie na jaką trafimy, przy rozruchu pobiera "bardzo duży" prąd - rzędu 100mA. Bardzo duży, czyli jak na możliwości baterii pastylkowej. Kondensator C4 pomaga podtrzymać napięcie podczas inicjacji karty, dobrze żeby był możliwie jak największej pojemności, ale też bez przesady - kondensator ładują trzy piny procesora, nie można ich przeciążyć. U mnie 10uF wystarcza na rozruch wszystkich kart które testowałem, ale w miarę rozładowania baterii mogą pojawiać się problemy.
Programator operuje tylko we własnych folderach i nie będzie się poruszał po reszcie folderów/plików znajdujących się na karcie. UWAGA - należy jednak mieć na uwadze, że w skutek jakiegoś błędu struktura plików może zostać uszkodzona i dane na karcie mogą zostać bezpowrotnie stracone lub będzie trudno je odzyskać! Może mieć to miejsce podczas wyjmowania/wkładania karty podczas pracy urządzenia lub odcięcia zasilania podczas odczytu/zapisu. Może się również zdarzyć (bardzo rzadko) że programator będzie się zawieszał przy próbie otwarcia listy plików w jakimś folderze. Rozwiązanie problemu to usunięcie ostatnio utworzonego przez programator pliku w tym folderze.
Płytka PCB o wymiarach 39mm x 44mm x 5,5mm, dwustronna. Pady przelotek są umiejscowione w łatwo dostępnych miejscach (nie pod obudowami), więc płytkę z powodzeniem można wykonać w warunkach domowych. Użyte przeze mnie gniazdo kart micro SD to dosyć popularne MSDE208, footprint pochodzi stąd czyli od gniazda 500873-0806 - jak widać nie jest problemem znaleźć kilka kompatybilnych ze sobą gniazd, wystarczy poszukać takiego które swoje pady ma "pod sobą" i porównać z datasheetem - powinno pasować.
Testy szybkości:
Test szybkości programowania wykonany przy pomocy Atmega644A (jako układ docelowy) pracującego przy 25MHz, prędkość SCK 4MHz, pamięć flash, wielkość danych 64kB, taktowanie układu programatora 16MHz:
plik BIN, pasek postępu wyłączony:
Zapis z pliku: 5,1s.
Odczyt do pliku: 4,4s.
plik BIN, pasek postępu włączony:
Zapis z pliku: 5,1s.
Odczyt do pliku: 5,0s.
plik HEX, pasek postępu wyłączony
Zapis z pliku: 12,5s.
Odczyt do pliku: 11,6s.
plik HEX, pasek postępu włączony
Zapis z pliku: 12,5s.
Odczyt do pliku: 12,2s.
Jak widać najlepsze rezultaty można uzyskać przy plikach BIN, ponieważ jego rozmiar to długość danych i nie ma żadnych udziwnień. Odczyt z pliku HEX wymaga uprzednio "przelecenia" całego pliku i policzenia wszystkich bajtów w nim zawartych, a w przypadku zapisu do takiego pliku liczone są sumy kontrolne każdego ciągu - więc trochę to trwa.
Pasek postępu praktycznie nie spowalnia procesu gdy układ docelowy jest programowany stronami (jak w powyższym teście). W przypadku programowania bajtami lub odczytu (który zawsze jest realizowany bajt po bajcie) włączony pasek postępu spowoduje znaczne spowolnienie operacji.
Lista obsługiwanych układów:
Układy przetestowane w praktyce: tiny13, tiny45, tiny2313, mega8, mega88, mega16, mega32, mega328, mega644
Nie wszystkie układy są jeszcze w pełni obsługiwane, patrz plik "chip.db". Niekompletne wpisy oznaczają że działać będą jedynie operacje na fusebitach i lockbitach.
Lista przetestowanych układów będzie uaktualniana na stronie domowej projektu.
1kB:
AT90s1200, Attiny12, Attiny13/A, Attiny15
2kB:
Attiny2313/A, Attiny24/A, Attiny26, Attiny261/A, Attiny28, AT90s2333, Attiny22, Attiny25, AT90s2313, AT90s2323, AT90s2343
4kB:
Atmega48/A, Atmega48P/PA, Attiny461/A, Attiny43U, Attiny4313, Attiny44/A, Attiny48, AT90s4433, AT90s4414, AT90s4434, Attiny45
8kB:
Atmega8515, Atmega8535, Atmega8/A, Atmega88/A, Atmega88P/PA, AT90pwm1, AT90pwm2, AT90pwm2B, AT90pwm3, AT90pwm3B, AT90pwm81, AT90usb82, Attiny84, Attiny85, Attiny861/A, Attiny87, Attiny88, AT90s8515, AT90s8535
16kB:
Atmega16/A, Atmega16U2, Atmega16U4, Atmega16M1, Atmega161, Atmega162, Atmega163, Atmega164A, Atmega164P/PA, Atmega165A/P/PA, Atmega168/A, Atmega168P/PA, Atmega169A/PA, Attiny167, AT90pwm216, AT90pwm316, AT90usb162
32kB:
Atmega32/A, Atmega32C1, Atmega323/A, Atmega32U2, Atmega32U4, Atmega32U6, Atmega32M1, Atmega324A, Atmega324P, Atmega324PA, Atmega325, Atmega3250, Atmega325A/PA, Atmega3250A/PA, Atmega328, Atmega328P, Atmega329, Atmega3290, Atmega329A/PA, Atmega3290A/PA, AT90can32
64kB:
Atmega64/A, Atmega64C1, Atmega64M1, Atmega649, Atmega6490, Atmega649A/P, Atmega6490A/P, Atmega640, Atmega644/A, Atmega644P/PA, Atmega645, Atmega645A/P, Atmega6450, Atmega6450A/P, AT90usb646, AT90usb647, AT90can64
128kB:
Atmega103, Atmega128/A, Atmega1280, Atmega1281, Atmega1284, Atmega1284P, AT90usb1286, AT90usb1287, AT90can128
256kB:
Atmega2560, Atmega2561
Jeśli jesteś zainteresowany płytką - nie pytaj na forum czy na PW, ale weź udział w ankiecie na stronie domowej - dzięki temu będę wiedział ile osób jest chętnych i będę mógł zamówić płytki. Potem zamieszczę stosowną informację.
Strona domowa projektu: µProg - mały, szybki, przenośny programator AVR z SD
Link
W załączniku:
Pliki eagle 5.10: PCB, SCH; alternatywne PDF; Wsad HEX oraz BIN; pliki pomocnicze.
PCB ver.1.0
Program ver.1.0 – wersja BETA.
-stabilna wersja beta
-zapis/odczyt/weryfikacja ponad 128kB (extended memory chips) nie była testowana, ale jest zaimplementowana
-zapis/odczyt/weryfikacja plików HEX gwarantowana tylko do 64kB – także nie testowano
-programator w pełni przetestowany z: tiny13, tiny45, tiny2313, mega8, mega88, mega16, mega32, mega328, mega644
Przepisanie opisu (formatowanie tekstu, wrzucanie obrazków) zajęło mi ponad godzinkę, cóż, jest dosyć długi, a ja zmęczony, więc może gdzieś jakieś błędy są więc proszę nie krzyczeć