µ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) - 6 votes

381 komentarzy

  1. Admin, will there be a firmware update to version 1,4???

    • I don’t think so. It’s pretty old project and i don’t have time to manage it. And it works pretty good. But why you want to see an update? Do you need some new functions / fix bugs / add support for more uC?

    • I would like to see the update as a choice of language or just in Russian, (maybe if there was source code I could fix it) also I would like that when reading the fuse bits it just reads and displays then offered the choice to save or not. Support memory card more than 2GB (HC) can develop, as it is a very good project

  2. what about
    add support low cost LCD nokia1202 ?

  3. if you do not continue to work at it, do you want to make the source code public ?

  4. Lot HC memory card.

  5. pavasilich

    Да, хорошая и к тому же красивая вещь. Вот только дисплей все тормозит. Дело в том, что от Nokia3310 его сейчас не найдешь. Вот если бы прицепить от Nokia 1202, тогда другое дело.

  6. it’s almost 5 years old post,but still have new comment,and i can’t find similar post about similar programmer better than it,great job,I have atmega 8l-8au ,can i use it for make u prog?thanks.

  7. Youn tai sin

    Is this compatible with the lph7779 or lph7366?
    lcd have made a lph7366.
    However, it is difficult to recognize the txt.
    In addition, incorrect alignment of the txt.

    Example

    txt_txt.hex
    txt_txt.he
    x
    txt_txt.h
    ex
    txt_txt.
    hex

    menu
    setup
    flash
    eepr
    om
    Fuse
    bit
    L
    ock bit

    It asks how that can resolve.
    Please answer fast.
    Thank you.

    my E-mail address
    mong001@nate.com

  8. Tell me please, the programmer can program the microcontroller 5v from its power source, you need an external power supply?

    • You can make 5V supply and wire it to the VCC pin in the ISP6 connector.

  9. I started building this project and I have to solder the microcontroller on the PCB.
    Could I use a atmega8 instead of a atmega328?

    • And how do you want to fit 32kB of data into 8kB flash chip? :)

  10. My bad. I hadn’t checked its size and was thinking if you had any experimental code for atmega8. Anyway I used a 328P-AU and I think everything is working fine.
    I used a chinese display and instead of batteries I prefered a miniUSB port. Of course there is a 3.3V voltage regulator so everything is working with 3.3V. Could I use 5V for the mcu and 3.3V for the microSD and the display?
    My PCB is single sided with a few jumpers on the other side. Accidentally I designed inverted the microsd socket and I had to cut some traces and add a few jumpers connect it correctly with the microcontroller.

    Could I upload your firmware, SD files with custom animations and my schematic and pcb files (made in kicad) on my website? If I do I will add a link for your website and your original pcb files.
    Thank you

  11. My bad. I hadn’t checked its size and was thinking if you had any experimental code for atmega8. Anyway I used a 328P-AU and I think everything is working fine.
    I used a chinese display and instead of batteries I prefered a miniUSB port. Of course there is a 3.3V voltage regulator so everything is working with 3.3V. Could I use 5V for the mcu and 3.3V for the microSD and the display?
    My PCB is single sided with a few jumpers on the other side. Accidentally I designed inverted the microsd socket and I had to cut some traces and add a few jumpers connect it correctly with the microcontroller.
    http://i65.tinypic.com/2psez3r.jpg
    http://i66.tinypic.com/10qhz75.jpg
    Could I upload your firmware, SD files with custom animations and my schematic and pcb files (made in kicad) on my website? If I do I will add a link for your website and your original pcb files.
    Thank you

  12. Thank for your reply. I hadn’t checked the size and thought there would be a way to flash the firmware on a atmega8. I used a 328P-AU and I think everything is working fine.
    Instead of battery powered I designed a PCB with a miniUSB port as power input and a 3.3v voltage regulator so everything is working with 3.3V.
    http://i65.tinypic.com/2psez3r.jpg
    http://i66.tinypic.com/10qhz75.jpg
    Since I already have 5V power on my board, could I use this line as VCC for the target chip? You say: “… there is no possibility to give supply for target chip trough this line…” What will happen if I connect the 5V power line on the ISP VCC pin so I could power my target through uProg? Should I remove the connection from ISP to pin 12 of atmega328? What’s the purpose of this connection? Does the firmware check if there is power on this pin from the target chip?
    Have you any plans for SDHC support?
    Thanks

    • If you want to power AVR from 5V and SD from 3.3V, then you have to add some kind of bufor to translate data lines 5V to 3.3V. Or just add some 330ohm resistor in series to draw current when sending 5V data into 3.3V data port. 3.3V from SD should be read by AVR with no problem, you can experiment.

      You can connect 5V to ISP VCC line, there is a series resistor after pin 12, so it can stay, or you can remove it. ISP VCC in this project is used as an extra signal clock for target chip, but it showed pretty useless, so go ahead. There’s no checking on that line at all, it just outputs clock signal.

      No SDHC support, it is a 5 years old project, not developed any more.

      Yes you can add download files to your web, but please add a link to this page and add a link in your zip/rar so people will know that it is a modded project, not original. And i would like to see it :)

  13. Thank you,
    You could delete 2 of my 3 upper comments and keep only the latest. For some reason my comments were recognised as spam and I was trying to ask the same things.
    I will use a jumper that will allow me to select if I want to power the target chip or connect it with pin 12 like it is now. Also with a second jumper I will be able to select between 5v/3.3V for the target chip.
    I have a couple more questions. How does the avr measure the voltage and shows it on the upper right of the screen. Does it show the voltage of the Aref pin? Could I connect Aref on ISP VCC so I could see on the screen what power I deliver on the target?
    I’m assuming it won’t be happy if my atmega was operating at 3.3V and I had 5V on the target and the Aref pin. Would that be OK to power the atmega with 5V and having variable voltage(3.3V/5V) on the ISP VCC and The Aref pin?
    Promise these are my last questions :)
    Thank again.

  14. I have tried to build this on breadboard but it seems it doesn’t powering up if I power the mcu with 5V. Is this a firmware limitation? Could this be changed? I want 5V on the mcu and 3.3V on everything else using voltage regulators and current limiting resistors.

  15. I found out that it is possible to work with 5V but it has to boot up with less than 3.6V.
    Could you share a firmware that doesn’t check the voltage on startup?
    Thank you

    • I am sorry but im afraid i can’t help. This is 5 years old project and i don’t remember the details you are asking. I would need a bunch of time to remind how this stuff worked. Also i haven’t touched any programming/avr in a long long time.

      And yes, it measures voltage on start and protects all low voltage stuff on board from damage, so SD card wont get any power if its too high. I don’t remeber which version had the external aref measurement and which internal vref, but maybe you could disconnect this trace on the pcb?

  16. Kiedyś trochę dłubałem w elektronice. Później zmieniłem profesję. Teraz lubię coś czytać o nowinkach technicznych i popodziwiać pomysły, rozwiązania innych. Może to dziwne, głupawe pytanie co napiszę więc sorry, ale chciałem zapytać co można zaprogramować tym programatorem i co może robić taka zaprogramowana rzecz.

    • Można tym zaprogramować mikrokontroler z rodziny AVR. Mikrokontroler jakich wiele. To taki maluteńki komputer który też ma pamięć stałą, pamięć RAM, i procesor. Tylko że nie nadaje się do poważnych obliczeń, ale świetnie się sprawdza w roli np sterownika do kotła CO, może mierzyć temperatury, sterować dmuchawą, podajnikiem, wyświetlać komunikaty, czy nawet wysłać SMSa jak coś się dzieje. Pralki, lodówki, elektryczne szczoteczki do zębów, sygnalizacja drogowa, latarki, dosłownie każdy sprzęt w dzisiejszych czasach ma w sobie taki lub inny mikrokontroler do realizacji swoich prostych funkcji. Również ten programator mikrokontrolerów jest oparty o mikrokontroler – to jest świetny przykład. Co mikrokontroler robi, zależy tylko od programisty, który go programował. Ograniczeniem jest wyobraźnia, wiedza, no i niewielkie zasoby pamięci i mocy obliczeniowej, choć przy tym ostatnim zawsze można sięgnąć po co raz to mocniejszy sprzęt bo wybór jest ogromny :)

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ą: