µProg – mały, szybki, przenośny programator AVR z SD

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), 84×48 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:

µprog9Pliki 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:

µprog10Na 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.

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

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.

ISP – 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.

ISP – 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:

µprog5Jeś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:

uprog-prototypeFusebity: 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ę 84×48, 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ą :)

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:

Zielony – układ przetestowany w praktyce.
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. Proszę zgłaszać układy które działają poprawnie – dodam je do listy!

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, 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

Zobacz także: Programator USBTiny-MkII SLIM

Galeria:




Pliki:

Zanim zaprogramujesz! Jeśli twój programator nie posiada bufora którym możesz zmienić napięcie programowania, czytaj dalej. Maksymalne napięcie jakie można podać na pin portu, to VCC+0.5V. Więc jeśli zasilanie tego urządzenia to 3,3V, a chcesz zaprogramować je zwykłym programatorem 5V – musisz zabezpieczyć linie ISP przed uszkodzeniem.
Zrób to tak – to jest proste rozwiązanie ale zabezpieczy port przed uszkodzeniem.
NIE rób tak – jeśli podłączysz przewody „ot tak” to możesz uszkodzić sobie układ!

POBIERZ – archiwum poprzednich wersji. Nie musisz tego pobierać, najnowsze pliki znajdują się poniżej.


POBIERZ – Aktualizacja #3, 20.07.2011.
Program ver.1.3
Baza danych chip.db ver.1.03


Firmware v1.3
-usunięto błąd podczas wgrywania plików HEX nie zaczynających sie od adresu 0 – np. bootloadery.
-rozmiar pliku hex jest liczony ciutkę szybciej
-zmodyfikowano plik „config.ini” – teraz będzie czytelniejszy
-dodano ustawienie OSCCAL do pliku „config.ini” – jeśli korzystasz ze zwiększonej prędkości programatora (bit0 w pliku „config.ini”)
to możesz wpisać własną kalibrację od 00 do FF – niektóre procki się wykładały przy maksymalnym przetaktowaniu.
-dodano ustawienie MAX SCK do pliku „config.ini” – jeśli z jakichś powodów programator błędnie wybiera prędkość SCK (zbyt szybka)
i występują błędy, możesz wybrać maksymalną prędkość od której programator będzie startował.
-dodano funkcję usuwania plików – zaznacz plik, i trzymając przycisk LE wciśnij przycisk RI. Puść przycisk LE aby wyjść.
-poprawiono odporność na drgania styków przycisków
-naprawiono obsługę układów z rozszerzoną pamięcią (atmega2560 oraz atmega2561)
-dodano funkcję „manual” pozwalającą na wprowadzanie własnych fusebitów. Przewijaj każdy znak przyciskami UP oraz DN, przyciskiem RI
zatwierdź wybór przechodząc do kolejnego znaku. Po zatwierdzeniu ostatniego, programator zapisze a następnie odczyta fuski i wyświetli
je w dolnej linii. Przyciskiem LE można anulować. Program pobiera FABRYCZNE fuski dla danego układu, i właśnie takie edytujemy.
Z opcji trzeba korzystać ostrożnie!
-dodano dodatkową najniższą prędkość SCK – 8kHz – możliwe jest programowanie układów taktowanych kwarcem zegarkowym.
-zmieniono sposób nazywania tworzonych plików. Od teraz będą miały formę „m8-xx”, „m162-xx”, „t2313-xx” gdzie x to numer kolejny.
Bardzo ułatwia identyfikację plików. Wystarczyło dopisać JEDNĄ linię kodu a jakie udogodnienie :)
-Uaktualnić należy plik chip.db – zmieniałem w nim nazwy procków tak aby nie zawierały ukośników. Jeśli program będzie tworzył nazwę
pliku z nazwy procka, to z nazwy „Atmega644/A” powstanie nazwa „m644/-1” – plik z ukośnikiem nie nadaje się do odczytania na
komputerze. Ukośniki zamieniłem na przecinki.
-dodano plik z licencją „LICENSE.TXT”, należy go skopiować do głównego katalogu karty. Należy się z nim zapoznać, ewentualnie z jego
polską wersją. Programator nie będzie działał jeśli tego pliku nie będzie, lub jeśli zostanie zmodyfikowany.

Baza procków chip.db v.1.03
-zmieniono nazwy procków tak aby ukośniki zastąpić myślnikami – ponieważ nazwa pliku utworzona na podstawie nazwy procka mogła zawierać ukośnik, a pliki z ukośnikami w nazwie są bezużyteczne pod systemem windows.


POBIERZ – Płytka przewlekana dla uProg by Russel, pliki eagle i pdf




Proszę nie pytać o źródło – jego udostępnienie nie jest możliwe


5.00 avg. rating (99% score) - 7 votes

396 komentarzy

  1. Ravi Upadhyaya

    The above code makes the entire display as Inverse Video. And making the following change to the code:

    LcdInverse();
    LcdGotoXYFont(1,2);
    LcdFStr(FONT_1X, (unsigned char *)PSTR(„Sensor Settings”));
    LcdNormal();

    Should have made only the ‚Sensor Settings’ inverse video, instead the entire display is in normal video!!!

    Thanks in advance,
    Ravi Upadhyaya

  2. hi i need camtastic layer or pcb for altium 10 — uprog
    can you help me Please

    • Ale nie działa przy tiny2313 i atmega64/128 :<
      Zara się okaże że jeszcze przy tym i przy tym i wyjdzie że 1 na 10 procków tylko zaprogramuje…

    • Te układy były testowane. „Nie działa” jest mało wyczerpującym opisem problemu.

  3. Hi Manekinen,

    can you do a change in the hex file of the µProg for me?

    I use a Nokia 3210 LCD (LPH7677). But i have a lot of other LCD´s too,
    my favorite is a 2×16 LCD with HD 44780 controller (like this
    http://www.pollin.de/shop/dt/Nzc1OTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_TC1602A_09.html or a graphics Display like this http://www.pollin.de/shop/dt/NTE0OTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Datavision_DG_12232.html

    Can you rewrite the programm for me for one of these LCD´s?

    I have the option to use a Arduino pro Mini Clone, these is running on 5 Volt. Can i customize the SD Slot of 3,3V and use this Arduino for the µProg? On the Arduino board is a Mega328 installed.

    Lot of questions…

    Thanks a lot for answer

    Greetings from Germany

    Sandor K.

    • Hi.

      No chance to mod the firmware to work with other type of display.

      If you connect all the traces accordingly to the schematic then why not.

  4. Hello,
    Basically I am hobbyist and love to make interesting projects. I am impressed with your work and I am going to construct this soon. Before that I have few doubt, hope you will clarify this.
    1. Can I use ATMEGA328p DIP version (is it works well with the given circuit)?
    2. Have you PCB for through hole components (because in India it is quite difficult to manage SMD components)?
    3. In the breadboard version, you use the 5V to 3.3 V translator for SD interfacing?
    4. Any alternate of LCD.
    5. Can I use toner transfer technique to construct the PCB?
    6. Can I directly program the micro-controller with recent firmware (i.e. version 3)
    7. Can you elaborate, how to use the lock bit using this programmer?
    8. Can I directly paste the .hex or .Bin file for the programming ( or is there modification required)?

    I am sorry for the long list of questions. Thank you. Great work.
    Regards.

    • Hi,

      Ad1 – yes.
      Ad2 – no, you have to make it yourself based on given schematic.
      Ad3 – no, everything is running from 3,3V.
      Ad4 – no, only lcd from description.
      Ad5 – yes.
      Ad6 – yes, burn flash directly with 1.3 firmware
      Ad7 – don’t understand the question???
      Ad8 – paste where?

  5. Hello,
    Thanks for your reply. May you respond to following questions

    Problem 7: How to use the Lock bit Configuration to program the micro-controller (Target)?

    Problem 8:- The .hex file is copied to respective folder inside the SD card.

    Problem 9: If the programmer is operates on 3V then how can I program 5V micro-controller?

    Problem 10: How it translate the voltage level 3v to 5V during the programming ( any hardware arrangement)?

    Thank you.

    Regards

    • You don’t need to touch lockbits when programming target. Only if you want to set them.

      You copy hex or bin file into the „flash” folder and it appears on the list after power up.

      It does not transtale it to 5V. Target chip supplied from 5V can be programmed at minimum 3V up to 5,5V signals from programer. You can add a voltage translator but is not really required.

  6. Hi,
    I wanted to buy this tiny programmer. Can i?

  7. Anyone, who can share the through hole version of uprog. Please upload it here for the other interested user.

  8. Can someone share me the schematic for DIP atmega328p microcontroller. I am unable to convert the give schematic to the DIP version. There is additional pin in smd version but in dip version of atmega328p there is only 28 pins are available. Can you instruct me which pins I removed from the schematic for the dip ( through hole version)

  9. Hi,

    I made a module (*), programmed the hex-file into the Atmega328 by AVR-Studio. By AVR-Studio it was not possible to set the FuseBits to 0x07 0xD0 0xA2. When checking the given parameters, under AVR-Studio I used the following settings 0xFD 0xD0 0xA2.
    So far, so good.
    (*) I use a Nokia 5110 LCD.

    -= SD ERROR! =-
    I bought a 512 MB Micro-SD card, which is formatted, under Windows, as FAT with allocation unit size : 8192. Also copied all required directories and files to the root of this SD-card.

    -= With(out) 512MB microSD Card
    However, when I power-up the module, while this SD-card is inserted, each time the display reports : SD ERROR!
    After a while, I get the menu displayed (a bit shifted).
    Now, when I remove the micro-SD card, and power the module up, I get exact the same problems.

    -= Defective 512MB Card ? =-
    Exactly this puzzles me. Initially I thought the SD-card was maybe defective. When checking th SD-card back in Windows again, I could read all data at the SD-card. This means, the card is not defective.

    -= Formatting =-
    So I thought it required a different format. So I reformatted it as FAT32, using all types of Allocation Unit Sizes. The problem didn’t go away.

    -= Connections =-
    As a last attempt, I verified all connections from Micro-SD connector to Atmega328. All are identical to your design (V1.1).

    -= Dead end =-
    As you can imagine, I’m at a dead end…. Verified all kind of things, but can’t find where the problem is located. I would like to get this module alive and kicking, because you created a cool device. However, I’m pretty sure, it’ll take a lot of messages, to find the source of this problem. Or we can get in contact with each other, so I can also share some additional pictures.

    P.S. I’ve modified the design a bit, by adding a 10K pull-up resistor at the reset-pin of the Atmega328, which is required for more reliable re-programming / updating the Atmega328.

  10. Here’s an additional message.
    I’ve shared some photos to give an impression about what is going on (at the display) when powering up this module :
    A) SD Error
    http://www.uploadarchief.net/files/download/lcd-sd-error.jpg

    B) Shifted menu
    http://www.uploadarchief.net/files/download/lcd-menu.jpg

    For being able to let this module operate, the SD-Error is real problem to me. The shifted menu-text is of (much) less concern. If the module operates, I don’t care how the text or animations are displayed.

    • Hello. How big (capacity) the SD card capacitor is (C4)? 10uF is the minimum, try to use something bigger. Also, check SD card voltage and check for shorts or breaks in the sd card circuit.

      If SD card will run succesfully, then you can set LCD organisation in config file so everything is displayed correctly.

  11. Hello
    I am interested to this Portable Programmer .
    I want to make 1 of this .
    I want to make some changes to this design like changing LCD , changing the way of reading HEX file (decode encoded HEX files) , and …

    Can you help me to do it ? ( I need your source code )

    Best Regards
    Thanks

  12. Performed the suggested modification and checked all connections, and it seems to operate ! At least, the animations are visible. Thank you for your help !

  13. Hi!
    Nice project.
    Is it possible to get a kit or detailed instruction do build it myself?

    Thank you

  14. Witam
    Bardzo ciekawy projekt i chętnie go zbuduje. Mam pytanie czy jest możliwość zakupienia PCB. Jeśli tak to bardzo proszę o informację jak tego dokonać.
    Dziękuję i pozdrawiam
    Bronisław

  15. where you can buy a harness or a complete assembly

  16. how use uProgrammer for burning AVR… please explain to me step by step…. thank a lot of

  17. Hello,
    Can you share schematic using arduino? I am still unable to get smd atmega328. Also can I use atmega32 for the same? In your photographs there is atmega32. it is good for all if you share these two.

    Thanks in advance.

    • I don’t know if it is compatible with arduino, compare two schematics and check, but i doubt it.

      Atmega32 wont work, only atmega328p. You need to make exactly the same circuit, i don’t compile the code for other configurations.

  18. Hello, Thanks for your reply. Can you share the schematic for DIP version. There is some extra PIN in SMD version.

    • I don’t have such schematic, DIP version does not exist. SMD chip has two additional pins, no19(ADC6) and no22(ADC7) – but they are not even used, so circuit should work with DIP chip.

    • I made a dip version, and have a drawing. If there is a way to get this to you, I could send drawing and photos.

    • Do you made the pcb and tested the circuit? If it works good and if you want to share with it, use the contact form here http://mdiy.pl/info/?lang=en to contact with me.

  19. wojtek jdw

    witam mam problem z wyswietlaczem w wersii 3 przesuniete linie w menu co zrobic, co jest zle prosze o podpowiedz pozdrawiam i gratuluje pomyslu jest ok i potrzebny … wojtek sp3jdw

    • Należy w pliku konfiguracyjnym na karcie przestawić typ wyświetlacza na chiński lub odwrotnie.

  20. reza javahery

    tanksssssssssssssssssss

  21. reza javahery

    hi

    can i program atmega64/128 in spi mode?

  22. reza javahery

    hi

    Can I use the LCD Nokia 5110?

    • Not sure, i think so. Check the datasheet for controller type.

  23. Hey Russell, and the author,

    Can you share the dip version of the circuit….
    Thanks

    • DIP Drawing

    • I also used the 5110 type display, and drawing pinout reflects that type of display. These are the type commonly found online, like sparkfun for example. Sorry I didn’t post earlier, I just didn’t have a good way to do so. I didn’t make mine on an etched board, but if you are interested, I could post a photo of the one I made.

      Russell

      PS>> manekinen, Thanks for making it easier to post images to site.

    • Thank you, I will make me high. Thanx. I love to see your design…

    • image 1

    • image 2

    • Not as Lovely as manekinen’s design, I built with parts I had at hand. Probably would have built the SMD version if I could have gotten my hands on one of the original PC boards; thinking of making an etched Uprog board for a DIP 328. Fully functional, will read and write; flash, EEprom, and fuses. I had to make a few changes to the chip.DB file to read and write fuses for Atmega 168 and 328, Attiny 2313 worked fine with default. I recommend using non-HD SD card, formatted to FAT filing system. Hope this is of help, many ways to build.

    • One other thing if using this type of display, display configuration settings in SD system folder, bit 7 needs to be set low (0) for proper display.

      ** (bit7 – LCD organization 0 = 48*84(normal))**

    • Russel, very nice and copact build :)

    • Thank you. Its a great effort by you as well as original one. very neat assembly and compact as well…

  24. But the source code to upgrade firmare????

    • No source code, you need only the hex file to program or update.

  25. HI manekinen,
    nice project!
    Is it possible to organize support in your device for some new Atmel chips like ATtiny 441/841 ?

    • Hi, it seems it is a standard ISP so it should work with uProg as it is. It only needs an entry in the chip.db file and it should work. I can’t do it right now, but if you want, you can experiment with it, just open this file with a notepad, copy an entry from other existing chip, and modify it to match signature, fuses, and timings of new chip from its datasheet, full description is in this file also.

  26. Hi Manekinen
    Tried printing a uProg etch template of version 1.3 mirrored board image from PDF. When I size image correctly, pads and traces run together, making etch image unusable. Any program you could recommend or technique to size properly.

    Thanks.

    • I don’t quite understand where the problem is. Do not change any size nowhere, print it exactly 1:1 and be sure to disable all printing „impovements”, and you should be good to go. If it still bad, try another PDF viewer. If you still can’t get it right, download Eagle free version, open the BRD file, hit the ratsnest button, and go to print button. If its still not good, then i don’t know, maybe your printer is making problems.

  27. Okay, finally made my etched board. Some small changes, one being the additional OSC (Vcc) pad for the 5110 display (PCD8544) ZEBRA terminal.

    • Just need something a little better to hold display in place.

  28. hi dear
    i make a uprog .but i can not program frimware in chip
    after program frimware in verify chip error and than i can not erase or program fuse an other ,
    please help mi
    tank you.

  29. Witam wszystkich! Pozdrowienia z Ukrainy! Niedawno zrobilem programator, jego predkosc jest bardzo szczesliwy.
    Chcialem zapytac, czy nowej wersji programu do niego.
    Oto moje zdjecia !!!

    Всем привет! Привет из Украины! Вот недавно сделал такой программатор, в его скорости очень доволен.
    Хотел поинтересоваться будут ли новые версии программы к ниму.
    Вот мои фото!!!

    Hello everyone! Greetings from Ukraine! I recently did a programmer, its speed is very happy.
    Wanted to ask whether the new version of the program to it.
    Here are my photos !!!

    Всім привіт! Привіт з України! Ось недавно зробив такий програматор, в його швидкості дуже задоволений.
    Хотів поцікавитися чи будуть нові версії програми до нього.
    Ось мої фото !!!

  30. Any one can share PCB file for the DIP Version?

  31. Dear all,

    With the design given by Russell, here I am uploading the schematic and PCB. I am beginner and I am unable to make a beautiful single sided PCB out of it. Anyone there can help me?

    Thank you.

    • and schematic

    • uttapha

      I don’t think you can mount these type of files here. I can’t promise anything, but if I have some time I’ll try and draw a board up. Some others seem to have an interest in a dip version, and this is one of my favorite programmers. It will be hard to beat the elegance and coolness of the SMD open screen version, but easier to build.

  32. Thank you Russell,

    I tried to make the SMD version, but the main problem is I break the LCD twice and unable to get the SMD micro-controller in local market. The LCD with connector is available in the ebay and the DIP version suits me for instant availability of the components. I tried to make the PCB for the same but failed (my bad luck!!)
    Anyways waiting for your ( and others as well) reply.

    • Uttapha

      I have drawn the files in eagle, and made an etched board. I’ve not built and tested yet, but if you prefer the files now, delighted to send them.

  33. Russell, I would love to fabricate and test the PCB you design. I would like to welcome you if you can share the PCB and other documents here. Thank you.

    • Can’t Mount Eagle files here, yours are not posted. If you feel comfortable posting your email here, I can send them directly, unless you have a better method.

  34. Dear Russell, Thank you. My e-mail address is: xxxx@gmail.com.

  35. DIP version of uPROG

  36. Dear friend Russell could you share with me and the files of the PCB DIP version of uPROG and other needed files will be very grateful here is my address xxxxx@mail.ru

    • I’ve made a few improvements to the board file, give me a bit to put things together.

  37. Guys do not post your emails to public, its a huge mistake. You can always put your files to some file hosting and attach link here.

    Russel, if you finish your board and test it last time, please contact me, i will gladly add your work to the article, of course if you dont mind. Your THT uProg looks really nice :)

    • Actually I didn’t expect the posted emails, you can delete if you like, I have the information. I’ll email you the files to look over, I would have done this initially but the requests came about first. Sergey, I’ll send you the files soon.

  38. hi it is possible to naming files in sdcard folder like this?
    lockb folder
    atmega8.txt instead of 01.txt
    atmega88.txt and so on
    fuseb folder
    atmega8.txt instead of 01.txt
    atmega88.txt and so on

  39. and also i will use li ion laptop cell battery it is ok 4.2v when full charged

  40. also can you add battery low warning when battery below 2.7v?

  41. is this correct? supply can do 5~12v

  42. here a large,cantt zoom in previous picture

  43. Hello Russell, is there any chance we can have your authorization to build a commercial (for educational use) programmer based on this project?

  44. Hello Russell and manekinen, is there any chance we can have your authorization to build a commercial (for educational use) programmer based on this project?

  45. It’s possible to port this project for another chip, mega32u4, based on this
    http://www.tiaowiki.com/w/TIAO_AVR_/_Micro_SD_Development_Board_%28ATMEGA32U4%29

  46. I have a question I podkluchil display but here is a display of why and how to fix it? Shifted menu
    http://www.uploadarchief.net/files/download/lcd-menu.jpg

    • Change LCD organisation between 48*102(chinese) and 48*84(normal). See config.ini file. Its in the description above.

  47. Why do I get the output VCC is only 1.5 V you need to connect a separate power supply for the MC. Yes?

  48. Hi
    Very good device!
    Thank’s
    What about add finction for select any file for update firmware ?
    instead automatically find and download 000.bin

    It would get the device to which you can upload files to the program such as firmware
    clock.bin
    voltmeter.bin
    thermometer.bin
    etc
    on the basis of the device

    ————-
    Уважуха увтору!
    А можно ли добавить функцию выбора любого файла для обновления прошивки ?
    Так может получится универсальное устройство в которое можно будет заливать свои программы написанные для этого же железа.
    типа часы вольтметр термометр и так далее…

    • No, because bootloader code space is limited to 4kB and its used up to the max (it uses SD card support so it uses so much space).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Proszę pozostawić te dwa pola tak jak są: