Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Programator HVPP/HVSP/ISP dla procesorów Atmel AVR

tplewa 25 May 2012 01:34 44416 48
IGE-XAO
  • Programator HVPP/HVSP/ISP dla procesorów Atmel AVR
    Witam

    Za zwyczaj niezbyt wiele projektów publikuję w internecie, a to jeden z takich do którego powstania zmusiło mnie życie (a może i głupota).

    W internecie można znaleźć wiele projektów różnych programatorów dla procesorów AVR, są to niestety zazwyczaj konstrukcje działające w trybie programowania niskonapięciowego (ISP). Jednak ze znalezieniem opracowania działającego w trybach HVPP/HVSP nie jest już tak różowo. Więc myślę że warto coś takiego umieścić.

    Zacznę jednak od historii jak to wszystko powstało.

    Pewnego wieczoru siedziałem sobie nad pewnym projektem opartym o ATMega32U4 – ot zabawa z USB itd. Spięty był on po SPI z mniejszym ATTiny 2313…

    Akurat programując sobie ATTiny 2313 zapomniałem że mam 32U4 z wymuszonym resetem i się zaczęło. Trochę błędów – nic się nie zaprogramowało, a 32U4 odmówił dalszej współpracy. Więc myślę sobie co tutaj robić, jutro sobota – trochę brakuje kasy ☹ więc z zakupem nowego będzie problem przynajmniej do przyszłego tygodnia. Jednak mam wolny czas (a to zdarza się niezbyt często) i posiedział bym przy kodzie. Myślę sobie ok – jakoś go może postawię na nogi.

    Chwila spędzona przy Google no i mam "fusebit doctor" http://diy.elektroda.eu/atmega-fusebit-doctor-hvpp/

    Patrzę sobie i myślę fajny projekt będzie OK – jednak po chwili wiem że jestem dalej jak to mówią w ciemnej "pupie" ;) Niestety nie mam w szufladzie jakiegokolwiek z wymaganych procesorów który mogę zaprogramować zamieszczoną binarką.

    Wiec szukamy coś innego – i co i nic :( nic nie znalazłem co by wyrwało mnie z tej nieprzyjemnej sytuacji.

    Wygrzebałem z szuflady jakąś małą płytkę testową z ATMega128, zmajstrowałem pająka opierając się o schemat FUSEBIT DOCTOR-a, chwila przy dokumentacji Atmel-a - chwila na napisanie kodu i jest !!!! ATMega32U4 ożył.

    Tak ten pająk wyglądał:

    Programator HVPP/HVSP/ISP dla procesorów Atmel AVR Programator HVPP/HVSP/ISP dla procesorów Atmel AVR


    Przy okazji powstał niestety okropny „porządek” na stole:

    Programator HVPP/HVSP/ISP dla procesorów Atmel AVR


    Więc myślę sobie zapewne coś takiego może mnie spotkać więc warto postarać się o jakieś narzędzie który uratuje człowiekowi tyłek – bez budowania tymczasowych „pająków”.

    No i następnego dnia priorytet się zmienił – ot miał powstać nowy programator.
    Założenie było proste budujemy z tego co jest w szufladzie – z tego powodu całość powstała w niecały tydzień. Jednak takie podejście ma też swoje wady.
    Więc uprzedzam już na początku wiem nie ma USB (szkoda mi było FTDI skoro mam kabel USB/RS232 i całą "stertę" MAX-ów 232). Wiem jest „pająk” – projekt miał powstać szybko ;)

    Wszystkie elementy to demobil – płytki uniwersalne tak samo ot z starych prototypów.

    Jako serce programatora pracuje ATMega 8515L – akurat pałętał mi się dłuższy czas i nie miałem pomysłu co z nim zrobić. Więc wylądował w tym układzie.

    Całość jak wspomniałem to płytki uniwersalne i kynar. Co zresztą widać na zamieszczonych fotografiach.

    Programator HVPP/HVSP/ISP dla procesorów Atmel AVR Programator HVPP/HVSP/ISP dla procesorów Atmel AVR Programator HVPP/HVSP/ISP dla procesorów Atmel AVR Programator HVPP/HVSP/ISP dla procesorów Atmel AVR


    O trybie SPI pomyślałem praktycznie już w momencie gdy układ działał w trybie HV – ot zostało miejsce na płytce to wpakowałem tam header ISP, jednak nie było już miejsca na bufor (74HC125) – który wylądował na wlutowanej mniejszej płytce.

    Schemat programatora nigdy prawdę mówiąc nie powstał, całość to praktycznie elektronika FUSEBIT DOCTOR-a z innym procesorem (taktowany rezonatorem 7.3728MHz) i „doklejonym” ISP (bufor z programatora USBasp-yuki: http://yuki-lab.jp/hw/usbasp/usbasp-circuit.png ).

    Zresztą złącze do dodatkowych modułów z podstawkami jest kompatybilne z w/w FD.

    Powstały tylko odręczne zapiski które spokojnie wystarczyły do zmontowania tego układu:

    Programator HVPP/HVSP/ISP dla procesorów Atmel AVR


    Firmware dla AT8515L powstało w C (kompilowane za pomocą GCC). Niestety na chwile obecna oprogramowanie na PC – nie nadaję się do publikacji. Powoli powstaje nowe z tekstowym plikiem konfiguracyjnym procesorów – oraz przyjaznym sposobem obsługi. Niestety z powodu braku czasu nie wiem kiedy uda mi się je ukończyć.

    Jeśli będzie jakieś większe zainteresowanie projektem oprogramowanie zapewne postanie szybciej. Tak samo będzie można opracować do układu ładne PCB (np. z użyciem innego procesora niż zastosowany 8515L, dodanym USB itp.) – oraz przygotować schemat. Tak że wszelkie pomysły i uwagi mile widziane.

    Na koniec zamieszczam aktualny firmware dla ATMega 8515L. Natomiast oprogramowanie na PC pojawi się w tym temacie tak szybko jak to będzie możliwe (wszystko zależy od tego ile będę miał wolnego czasu).

    Pozdrawiam
    ToM

    UWAGA !!!
    Aktualne Firmware + Oprogramowanie PC + Schemat w dalszej części tematu.

    Cool? Ranking DIY
    Can you write similar article? Send message to me and you will get SD card 64GB.
    About Author
    tplewa
    Level 39  
    Offline 
    Has specialization in: mgr inż. nauk zbytecznych ;)
    tplewa wrote 5735 posts with rating 712, helped 211 times. Live in city Warszawa. Been with us since 2003 year.
  • IGE-XAO
  • #2
    shadow0013
    Level 34  
    Jak na realizację projektu na płytkach uniwersalnych wykonanie jest super. Płytka pod podstawki robi wrażenie (jak dawne urządzenia robione kynarem przez owijanie) Jak zrobiłeś napisy na tej obudowie plastikowej (kalkomania).
  • #3
    djoy
    Level 15  
    Quote:
    Jeśli będzie jakieś większe zainteresowanie projektem oprogramowanie zapewne postanie szybciej. Tak samo będzie można opracować do układu ładne PCB (np. z użyciem innego procesora niż zastosowany 8515L, dodanym USB itp.) – oraz przygotować schemat. Tak że wszelkie pomysły i uwagi mile widziane.

    Zainteresowanie jest, ja już od dawna przymierzam się do zrobienia takiego programatorka, bo mam kilka zablokowanych mikrokontrolerów. Co do uP ATmega8515 to chyba innego tutaj nie potrzeba, natomiast fajnie by było gdyby powstała jakaś płytka PCB, albo chociaż sam schemat w Eagle-u :)
  • IGE-XAO
  • #4
    michal.fita
    Level 15  
    No muszę przyznać, że jako proof of concept wyszło Ci to niezgorzej. Dość ładnie zmontowane i upakowane w estetyczną obudowę. Mógłbyś uczynić z tego jakiś projekt otwarty udostępnić schematy w KiCadzie (bo to też otwarte narzędzie) i kod w jakimś repozytorium. I zaprosić ludzi do udziału w projekcie.
  • #5
    tplewa
    Level 39  
    @djoy

    Dlatego całość powstała w takiej formie, a nie innej. Wiedziałem że jak odłożę to na inny termin – zacznę bawić się w projekt PCB to powstanie może za kilka lat ;) Dlatego szybka decyzja i szybkie wykonanie. Na zmiany i ulepszenia przyjdzie może jeszcze pora.


    @michal.fita

    Jak mówiłem – jeśli będzie zainteresowanie to nie stoi nic na przeszkodzie. Mi to nawet jest na rękę. Niestety z wolnym czasem (przez pracę zawodową) jest u mnie krucho, a jak mam czas wolę go spędzić z żoną i córką. Natomiast na hobby praktycznie tego czasu już nie mam.

    Mam kilka pomysłów jak by można było taki programator zrobić, głównie chodzi o zasilanie z USB (mała przetwornica DC/DC z 5V na 12V). Może właśnie jakiś ATMega z USB – aby nie bawić się w dodatkowe FTDI. Ewentualnie jakieś FPGA i w tym momencie zrobić wersje z PIN Driverami i jedną podstawką.

    Zresztą jak to mówią pożyjemy zobaczymy co z tego wyjdzie. Na chwile obecną chcę dokończyć sprawę z softem na PC. Część spraw jest już napisana, ale brakło czasu i stoi wszystko w miejscu.

    @lucastg

    Odnośnie tych napisów jest to zrobione na samoprzylepnej przeźroczystej folii do wydruków na drukarce laserowej. Konkretnie jest to folia firmy Folex (Folex Adhesive F Klar). Niestety nie jest ona tania (około 3zł za folię formatu A4) i opakowanie sporo kosztuje (zwłaszcza że oryginalne opakowania są duże) – jednak można kupić w sklepach internetowych na sztuki. Choć i tak jak wspominałem zbyt tanio to nie wychodzi.

    -----------

    W sumie poruszę jeszcze na chwilę sprawę komunikacji z PC. Niestety nie mam na chwile obecną pod ręką dokładnego opisu ramki. Jest gdzieś w odręcznych notatkach i zaimplementowana w kodzie. Jak zwykle jak znajdę chwilę to to przygotuję w formie elektronicznej.

    Jeśli chodzi o to jakie rozkazy obsługuje programator to fragment pliku z definicjami rozkazów itp.:

    Code:

          //Komendy dla programatora
          #define CMD_ReadSignature            0x10
          #define CMD_ReadCalibrationByte         0x11
          
          #define CMD_ReadFuseAndLock            0x20
          #define CMD_WriteFuseAndLock         0x21

          #define CMD_ReadMemory               0x30
          #define CMD_WriteMemory               0x31

          #define CMD_ChipErase               0xB0

          #define   CMD_GetFirmwareVersion         0xC0
          #define CMD_GetISPSpeed               0xC1
          #define CMD_SetISPSpeed               0xC2
          #define CMD_ClearError               0xCF


          //Komendy dla PC
          #define ACK_OK                     0xD0
          #define ACK_Signature               0xD1
          #define ACK_CalibrationByte            0xD2
          #define ACK_FuseAndLock               0xD3
          #define ACK_MemoryData               0xD4
          #define ACK_WriteStart               0xD5
          #define ACK_WriteNext               0xD6
          #define ACK_WriteEnd               0xD7
          #define ACK_NoData                  0xD8
          #define ACK_ISPSpeed               0xD9
          #define ACK_FirmwareVersion            0xDA
          #define ACK_Error                  0xEF


          //Komendy Trybu HV
          #define HV_NoOperation               0x00
          #define HV_ReadFlash               0x02
          #define HV_ReadEEPROM               0x03
          #define HV_ReadFuseAndLock            0x04
          #define HV_ReadSignature            0x08
          #define HV_WriteFlash               0x10
          #define HV_WriteEEPROM               0x11
          #define HV_WriteLock               0x20
          #define HV_WriteFuse               0x40
          #define HV_ChipErase               0x80


          //FUSE & LOCK
          #define FUSE_LOW                  0x01
          #define FUSE_HI                     0x02
          #define FUSE_EXT                  0x03
          #define FUSE_LOCK                  0x04


          //Mode
          #define   MODE_HVPP1                  0x01   //HVPP Wszystkie linie
          #define MODE_HVPP2                  0x02   //HVPP Brak wszystkich lini np. ATTiny 2313
          #define MODE_HVSP                  0x03   //HVSP
          #define MODE_SPI                  0x04   //SPI

          //Rodzaj pamieci
          #define MEMORY_FLASH               0x01
          #define MEMORY_EEPROM               0x02


          //Bledy
          #define ERROR_UnknownCommand         0x01
          #define ERROR_EnterProgramMode         0x02
          #define ERROR_WriteLock               0x03
          #define ERROR_WriteFuse               0x04
          #define ERROR_WriteMemory            0x05
          #define ERROR_ChipErase               0x06
          #define ERROR_ISPSpeedNotSet         0x07      


    Natomiast plik z definicją procesorów dla programu na PC w załączniku. Nad nim też będzie trzeba trochę popracować – aby dodać kolejne układy.
  • #6
    cray_x
    Level 13  
    Niezły projekt, a zwłaszcza użyteczny.
    Bardzo podoba mi się obudowa.Jeżeli można to poproszę o model.
    Pozdrawiam...
  • #7
    tplewa
    Level 39  
    cray_x wrote:

    Bardzo podoba mi się obudowa.Jeżeli można to poproszę o model.
    Pozdrawiam...


    Nie mam pojecia :( Jakis czas temu kupiona na Wolumenie... z tego co pamietam jest to chyba cos z oferty Hammond-a
  • #8
    Mad Bekon
    Level 23  
    Ja się również podpiszę pod plusem dla konstrukcji.
    Bardzo ładne wykonanie.

    Jedyne co bym zasugerował, to podłączenie przez USB.
    I zastanawiam się czy nie wyszło by trochę estetyczniej gdybyś najpierw przykleił folię i w niej zrobił otwory. Nie byłoby widać tego wycięcia, a miejsca wierceń można by zaznaczyć na folii
  • #9
    Mariojas
    Level 17  
    tplewa wrote:
    cray_x wrote:

    Bardzo podoba mi się obudowa.Jeżeli można to poproszę o model.
    Pozdrawiam...


    Nie mam pojecia :( Jakis czas temu kupiona na Wolumenie... z tego co pamietam jest to chyba cos z oferty Hammond-a

    Mi ta obudowa przypomina Z112
  • #10
    sundayman
    Level 25  
    No i proszę - można zrobić w miarę estetycznie urządzenie "na szybko" ? Można. Kolegę trzeba będzie zakopać pod Sevres jako wzór. Bo jak nie raz się widzi te pożal się Boże konstrukcje z termoglutem, to się słabo robi...
  • #11
    tplewa
    Level 39  
    Mad Bekon wrote:

    Jedyne co bym zasugerował, to podłączenie przez USB.
    I zastanawiam się czy nie wyszło by trochę estetyczniej gdybyś najpierw przykleił folię i w niej zrobił otwory. Nie byłoby widać tego wycięcia, a miejsca wierceń można by zaznaczyć na folii


    Odnośnie USB już wspomniałem - tak mi było wygodniej bo leży mi w szufladzie z 50szt. MAX 232 :) Więc coś z tym trzeba zrobić. Mam też na stanie mini moduł z Kamami (ZL1USB) - ale jego cena to około 50zł (chyba nie warto). Natomiast kabelków USB/RS232 mam kilka - wiec czy jest sens. Lutowanie FTDI do dość mocno zdezelowanych płytek uniwersalnych (zastosowane są płytki które nie były już w najlepszej kondycji) też nie było zbyt optymalnym rozwiązaniem. Zresztą układ lutowałem pod rozmiar płytek jaki akurat miałem i też nie wiem czy pająk z SMD by się zmieścił :)

    Choć prawdę mówiąc jak by miało być USB to taniej można rozwalić jakiś tani kabel na Profilic-u i wepchać go do środka zamiast FTDI - pytanie czy to ma sens ?

    Jak już USB to dać procka z obsługą USB, a takiego nie miałem akurat pod ręką.

    Tak jak wspominałem całość budowałem z tego co miałem pod ręką... i dlatego RS232...

    Natomiast co do wyglądu i foli. Zapewne tak by było lepiej. Można było też ładniej wyciąć. Ot mogłem dać do frezowania CNC. Niestety jestem w ciągłej przeprowadzce i nie mam w domu nawet pilnika. Do tego chciałem ukończyć prace w kilka dni - bo tyle miałem wolnego. Elektronika + obudowa to jakieś 3 dni pracy + 2 dni na firmware i prowizoryczne software PC (łącznie z testami).

    Wstyd się przyznać ale otwory były wiercone wiertłami do drewna, jakie znalazłem w pracy ;> Niektóre powiększane nożykiem... a cięcie "chińskim dremelem" który non stop się blokował z powodu braku odpowiedniej mocy - co skutkowało powstawaniem nierówności.

    @sundayman


    Zamiast termogluta jest za to poxipol ;> Czyli plytki przyklajstrowane na amen. Natomiast płytkę z podstawkami miałem w planie zalać Epidian-em 53 (może to jeszcze zrobię) aby zabezpieczyć tą nie małą ilość kynaru.

    @Mariojas

    Chyba trafiłeś w dziesiątkę z tą obudową. Ja niestety nie pamiętam modelu, ani producenta. Ot kupowałem wtedy trochę obudów na zapas różnych firm

    ---

    Nie ma co ukrywać że lepszym rozwiązaniem było by dobre PCB, zwłaszcza patrząc na to jak wyglądają przebiegi przy wyższych prędkościach SPI. Tragedii co prawda wielkiej nie ma, ale mogło by być sporo lepiej.

    Generalnie takich mogło by być lepiej jest jeszcze więcej i dobrze o tym wiem. Jednak nie udało by mi się wtedy zrealizować całości w założonym terminie (no chyba że bym wpakował nie mało kasy w expresowe usługi zewnętrznych firm) - tzn. PCB, cięcie CNC itd.

    Do tego ewentualnie zakup elementów typowo pod projekt i moje przemyślenia jak to powinno wyglądać finalnie.

    ----

    Jednak teraz jest projekt na Elce i może uda się wspólnymi siłami zrobić z tego coś jeszcze lepszego. Jak to mówią co dwie głowy to nie jedna :)
  • #12
    eurotips
    Level 38  
    Projekt miałby ręce i nogi jakby któryś z kolegów zaprojektował profesjonalne pcb.
    Nie wiem czy na prawdę potrzeba aż tyle podstawek, warto byłoby również ten szczegół zoptymalizować.
    Wielki plus za autorski projekt, bardzo przydatny w praktyce.
  • #13
    tplewa
    Level 39  
    eurotips wrote:
    Projekt miałby ręce i nogi jakby któryś z kolegów zaprojektował profesjonalne pcb.
    Nie wiem czy na prawdę potrzeba aż tyle podstawek, warto byłoby również ten szczegół zoptymalizować.
    Wielki plus za autorski projekt, bardzo przydatny w praktyce.


    Niestety prostota ukladu (brak pin driverow) prowadzi do takiej ilosci podstawek jesli chcemy obsluzyc szersza game AVR-ow w obudowach DIL. Mozna dac mniejsza ilosc jak w projekcie FuseDoctora (a reszta jako adaptery), ale tutaj upchalem tyle ile zmiescilo sie na plytce uniwersalnej. Po prostu na chwile obecna wszystkich nie potrzebuje, ale za rok moze jakiejs bede potrzebowal ;) Zreszta uklad bedzie dzialal z dowolna liczba podstawek ;) wiec kto chce moze zaprojektowac taka plytke jaka tylko chce.

    Jak wspominalem mozna to zrobic na jednej ZIF ale niestety uklad bedzie o wiele bardziej rozbudowany, ot taki kompromis. Zreszta jak juz projektowac cos takiego to posiedziec nad jakims fajnym rozwiazaniem i mamy uniwersalny programator do wielu ukladow. Jednak tutaj stawial bym na FPGA ze wzgledu na wieksza elastycznosc przy takim zastosowaniu.

    Plytke mozna oczywiscie zaprojektowac - ale w tym wypadku warto juz rozbudowac uklad o USB, oraz zasilanie calosci z USB. Ale to nie jest ogromny problem. Elektronika jest prosta jak drut, dodanie FTDI i przetwornicy DC/DC step-up tez nie jest wielkim problemem.

    Natomiast osobiscie raczej nie znajde na to czasu - moge przygotowac zarys schematu w Altium Designer... Z mojej strony postaram sie jeszcze przygotowac jakies software na PC, mialo byc ono zintegrowane z AVR Studio - ale nie moge doczekac sie na SDK (od paru miesiecy) i powstanie jako osobny program.

    Do tego biorac pod uwage PCB warto pomyslec o jakiejs obudowie (najlepiej z zamowieniem frezowania otworow).

    Jednak jak sie nie ma zbyt wiele wolnego czasu to dosc czesto rezygnuje sie z czegos, a stawia na to by uklad powstal i dzialal :) Dlatego chyba brak tych rak i nog... inaczej zapewne by nigdy nie powstal - lub lezal jako prototyp pare lat. Choc i tak lezal - bo mialem go umiescic tutaj o wiele wczesniej, ale ciagle brakowalo mi czasu aby to zrobic i zajac sie software na PC.
  • #14
    kuba1im
    Level 19  
    Bardzo fajny projekt, koledzy chyba wspomnieli już o wszystkich jego zaletach. Swoja drogą ciekawe ile autor dochodził do ładu z powstałym "porządkiem" przy pracach nad urządzeniem :)
  • #15
    Led156
    Level 16  
    Witam,wyjścia od PA0 do PA7 i PC7 do PC0 idą do programowanego avr?
    Jak się uda to jutro wrzucę narysowaną pcb.
    Pozdro:)
  • #16
    tplewa
    Level 39  
    Led156 wrote:
    Witam,wyjścia od PA0 do PA7 i PC7 do PC0 idą do programowanego avr?
    Jak się uda to jutro wrzucę narysowaną pcb.
    Pozdro:)


    Tak dokladnie jak w wymienionym FuseDoctor przez rezystory na podstawki.
    Z tym ze jak wspomnialem jak juz robic plytke to warto by wczesniej narysowac schemat i pomyslec nad USB i przetwornica. Tak samo jak wspomnialem mozna zmienic porcek na jakis w wersji SMD i przyklaowo dwoma UART-ami. Bedzie sie mozna pokusic o inne sposoby programowania szeregowego przykladowo.

    Tak samo jesli chodzi o linie na porcie PC to spokojnie jesli sie projektuje plytke mozna tam zamienic sygnaly tak aby bylo prosciej. Ich zmiana to tylko zmiana definici i przekompilowanie - wiec chwila moment.


    Ja na razie jak wspominalem tym sie nie zajme, teraz mialem troche czasu i zaleglem przy sofcie na PC. Ot i nie wiem kiedy z tego wybrne. Czesc spraw byla juz napisana w C++ i wybralem sobie robienie calosci w WinAPI ;) Wiec zrobienie GUI to lekka masakra (zabawa z podstawowymi kontrolkami), w C# .NET zapewne dawno by juz dzialalo - ale jakos za .NET nie przepadam :)

    Ot tak to mniejwiecej bedzie chyba wygladac (o ile koncepcja sie nie zmieni):
    Programator HVPP/HVSP/ISP dla procesorów Atmel AVR Programator HVPP/HVSP/ISP dla procesorów Atmel AVR
  • #18
    tplewa
    Level 39  
    Mad Bekon wrote:
    A jak pięknie by było gdyby kolega napisał to w QT. Od razu na 3 platformy ;]


    Nie jest to wykluczone ;> w sumie mysle nad wersja pod OS X-a... Ale QT zalatwia tylko kwestie GUI, a do multilplatformowosci trzeba jeszcze pare spraw rozwiazac strikte zwiaznych z specyfika systemu. Jednak czesc klas jest pisana tak by mozna bylo je przeniesc na inna platforme...
  • #19
    mkpl
    Level 37  
    ATMega 8515L to w prosty sposób można przerobić na bardziej popularna ATmege16. Mając już te dodatkowe 8kb pamięci można tam upakować obsługę usb (gotowa biblioteka pod C) i programator ISP.

    Co do softu fajnie by było gdyby fusebit były ustawianie tak samo jak w Burn-O-Mat. Tam to jest genialnie rozwiązane, że nie ma sposobności się pomylić ;)

    Tak czy siak ukłony w stronę autora za wiedzę i pomysł. Jestem pod wielkim wrażeniem pozdrawiam i życzę kolejnych udanych konstrukcji
  • #20
    tplewa
    Level 39  
    @mkpl

    Jesli chodzi o inny procek to kod jest napisany w miare uniwersalnie i przeniesienie go na inny to nie jest duzy problem. Natomiast co do USB w wersji software to mam do tego takie srednie podejscie, mialem z tym problemy na niektorych plytach. Jak juz to dac cos z wbudowana obsluga USB. Nawet napisalem sobie "lekka" obsluge wirtualnego COM-a - tak aby nie uzywac dosc ciezkiej biblioteki Atmela lub LUFA - zreszta jak bedzie chwila moze przygotuje wersje prototypowa na 32U4 (akurat mam tego gnata na stanie).

    Natomiast odnosnie Burn-O-Mat to co miales na mysli ? Chodzi ci o blokowanie niektorych ustawien i kolorowanie ich na czerwono (bez przelaczenia na tryb advanced)... czy o opis FUSE Bitow ?

    W sumie akurat czesciowo mam juz to zrobione i wyglada mniejwiecej tak:

    Programator HVPP/HVSP/ISP dla procesorów Atmel AVR

    choc kontrolka nie jes jeszcze do konca oprogramowana i wszelkie sugestie mile widziane.
  • #21
    mkpl
    Level 37  
    Konkretnie chodziło mi o coś takiego:
    Programator HVPP/HVSP/ISP dla procesorów Atmel AVR

    Nie muszę się zastanawiać nad tym jakie bity zaznaczyć czy jest inwersja czy cos. Zaznaczam po prostu interesującą mnie opcję i program sam przelicza.

    Co do USB w sumie masz rację. Jak ma coś kiepski działać to lepiej nie dawać. Z jaką prędkością pracuje COM? Ja aktualnie stosuje bardzo prostą na attiny45 wyciąga 4800 co w większości projektów jest do przyjęcia. Jak braknie przepustowości to można dać attiny2313 i popędzić oba układy z wspólnego kwarcu 12mhz.

    Na 32U4 raczej bym nie przechodził jeśli chcesz aby Twoja konstrukcja była popularna. Warto stosować elementy najtańsze i łatwe do dostania :)

    Ps. a może by tak aplikacja udająca wirtualny programator widziany np jako stk500 i tłumacząca to na Twój programator? Rozwiązało by to problem kompatybilności z różnymi programami
  • #22
    tplewa
    Level 39  
    Hi

    No co do kosztow to cos o tym wiem, w sumie jak by nie patrzec to ten programator poskladany jest niemal ze "smieci". Praktycznie 80% elementow jest z rozlutu (inne prototypy itp.). Odnosnie predkosci to UART pracuje na 115200 - dlatego kwarc 7.3728MHz (czyli praca na prawie maksymalnej czestotliwosci - jest to wersja L ATMegi czyli max 8MHz i jest to najbardziej optymalny kwarc dla UART-u).

    Tak samo zrezygnowalem tutaj z FTDI - nie wiem za ile mozna teraz dostac, ale szybko patrzac w TME jest to cena w okolicach 16zl netto + cena kilku zewnetrznych elementow. Generalnie nie wiem czy za cene ATMegi i FTDI nie kupi sie juz wersji z USB :) W sumie dlatego RS232 bo kabelki USB/RS232 na Profilic-u mozna juz kupic za grosze - zreszta zapewne wiekszosc elektronikow ma jakis kabel RS232/USB w tych czasach. Niestety sporo ukladow jeszcze wymaga takiego kabelka, a porty COM coraz trudniej spotkac w komputerach.

    Odnosnie softu tlumaczacego to nie wiem ile by to bylo roboty - zapewne jest to realne. Ale nie patrzylem na protokoly np. AVR Dragona itp. Niestety przy STK500 bym nie obstawal - bo w nowej wersji AVR studio - nie wiem dlaczego jest on mocno okaleczony jesli chodzi o ilosc obslugiwanych ukladow (w stosunku do wersji z 4 AVR Studio). Zreszta jak wspominalem chcialem to polaczyc z AVR Studio. Ot wyslalem FAX i nie dostalem SDK do AVR Studio 4 - widocznie nie wysylaja juz ze wzgledu na piatke, poczekamy jak sie pojawi bedzie mozna zrobic integracje.

    Programator ma specyficzny sposob komunikacji i czesciowo przejmuje "inicjatywe" - czyli to on prosi PC o kolejne dane. Ot wysyla sie informacje o pamieci, a nastepnie procek prosi o kolejne paczki danych ktore laduja w buforze (zajmujacym wiekszosc ram-u), jak dane z bufora zostana zaprogramowane prosi o przeslanie kolejnych itd. W sumie wstyd sie przyznac - ale programator powstal troche czasu temu i dokladnie juz nie pamieta formatu komunikacji. Zapewne teraz troche sie przypomni jak pisze soft na PC.

    Co do zakladek to bedzie mozna pomyslec w przyszlych wersjach, ale z zlalozenia programator rownolegly poza ratowaniem tylka w przypadku zablokowania procesora jest raczej dla bardziej wtajemniczonych osob. Ot wylaczanie lini reset w celu odzyskania portu itp. Na razie chce ukonczyc soft tak by byl wmiare latwy w obsludze - bo obecny jaki napisalem nie ma wszystkiego do ustawiania i trzeba czasami przekompilowac ustawiajac #define w kodzie - dlatego pisalem ze nie nadaje sie do publikacji :)


    Sama funkcjonalnosc SPI powstala raczej z powodu checi zapchania wolnego miejsca na plytce z podstawkami i dodana w pozniejszym terminie do elektroniki i firmware procesora. Prawde mowiac nie wiem jakie ma osiagi w stosunku do innych programatorow - jednak troche kynaru jak wspominalem nie wplywa najlepiej na transmisje szeregowa i raczej nie osiagnie sie maksymalnych predkosci po SPI. Tutaj jak juz wiele osob wspomina przydala by sie plytka... Choc ja raczej szedl bym w strone dodania kolejnych dwoch interfejsow programowania szeregowego. Jednak tutaj potrzebny byl by najlepiej wolny UART i na nim to zrealizowac. Mozna realizowac UART w software - ale jak zawsze wole uzywac rozwiazan hardware jesli jest to realne. Prawde mowiac nie wiem czy zmiescil bym sie z pamiecia w 8515 by to zrealizowac. Choc moze jeszcze jak pomysle to zoptymalizuje firmware pod katem obietosci.

    Jednak docelowo zapewne bede robil wersje na PCB + inny procek... ale to jeszcze zobaczymy kiedy to uda sie zrealizowac (i czy sie uda).
  • #23
    wirefree2
    Level 13  
    cray_x wrote:
    Niezły projekt, a zwłaszcza użyteczny.
    Bardzo podoba mi się obudowa.Jeżeli można to poproszę o model.
    Pozdrawiam...

    Bardzo podobna do obudowy z kradex'u Z112JF
  • #24
    jamrjan
    Level 12  
    Witam

    Przyznam że kilka razy podejmowałem próby stworzenia takiego programatora, ale niestety brak czasu. Podziwiam i myślę że jeśli tylko uda się dokończyć, to zainteresowanie będzie duże. Projekty ISP są dostępne, ale HVPP/HVSP szczególnie do programowania fuse bitów i reanimacji zablokowanych procesorów będzie poszukiwany. Ja kilka razy robiłem pająka na "jeden raz" i pod konkretny procesor, taki uniwersalny programator to bardzo pomocne narzędzie.
  • #25
    piotr_go
    DIY electronics designer
    Witam
    Mnie się udało sklecić coś takiego na ARMie (Link).
    Programator HVPP/HVSP/ISP dla procesorów Atmel AVR
    Co prawda mój ze względu na to że nie używam AVRów większych jak 8 nóżek nie obsługuje programowania równoległego, ale ma dodatkowo kilka innych funkcji jak:
    TPI - do tych najmniejszych AVRów
    I2C - programowanie lub testowanie układów na tej magistrali
    JTAG - co prawda na razie przetestowany tylko z Spartan3 Xilinxa

    @tplewa
    Masz w planach dodanie obsługi TPI?
  • #26
    tplewa
    Level 39  
    Prawde mowiac to nie myslalem wcale o ISP/PDI/TPI i jak wspominalem ISP doszlo raczej przez przypadek. Natomiast co do TPI to najlepiej bylo by miec wolny UART (jak juz wspominalem), Natomiast w obecnej formie hardware niezbyt na to pozwala - choc mozna jakos to wykombinowac. Z tym ze nie wiem czy wyrobie sie z objetoscia kodu. W sumie zobacze moze jak znajde czas na ile idzie zoptymalizowac pod katem wielkosci obecny software.

    Jednak jak to zawsze bywa najwiekszym problemem jest wolny czas. Teraz chwilowo mam jakies wolne chwile to postanowilem opublikowac projekt tutaj i wmiedzyczasie zrobic software - tak aby byl komplet. Potem zobaczymy co bedzie dalej :)

    A co do progreamatora to fajna sprawa i jakas odmiana cos na ARM-e :)
    Tez na poczatku myslalem o ARM-e, ale w sumie szkoda mi bylo tych co mam na stania - a ta ATmega jak wspominalem paletala sie juz dlugi czas po szufladzie ;)
  • #27
    tplewa
    Level 39  
    Tak tylko informacyjnie - prace nad software trwaja...

    Tutaj mozna zobaczyc maly Preview jak to wyglada:


    Wszelkie uwagi itp. jak zwykle milo widziane, ot latwiej zmienic cos teraz niz pozniej...
  • #29
    tplewa
    Level 39  
    W sumie z mojej strony mam taką prośbę do osób zainteresowanych programatorem które maja wolna chwilę.

    Do poprawnej pracy programatora wymagany jest opis układów zawarty w pliku PartList.cfg

    Nie ma co ukrywać że trzeba ten plik stworzyć. Na chwile obecną mam do niego dodane 4 układy... Dodawanie nie jest to praca trudna, ale trochę mozolna polegająca w dużym stopniu na metodzie kopiuj/wklej.

    Przykładowa definicja układu:
    Code:

    <AVRPART name="ATmega128" signature="0x1E9702">

       <MEMORY FlashPageSizeW="128" FlashNoOfPages="512" EEpromPageSize="8" EEpromNoOfPages = "512">

       <HVMODE val="0x01">

       <OscCal val="0x00" text="1 Mhz" >
       <OscCal val="0x01" text="2 Mhz" >
       <OscCal val="0x02" text="4 Mhz" >
       <OscCal val="0x03" text="8 Mhz" >

       <FUSE>

               <DefaultLow val="0xC1" >
          <DefaultHigh val="0x99">
          <DefaultExtended val="0xFD" >

          <LOW>
             <ENUMERATOR name="BODLEVEL" mask="0x80" text="Brown out detector trigger level" >
                <enum val="0x00" text="Brown-out detection level at VCC=4.0 V" >
                <enum val="0x01" text="Brown-out detection level at VCC=2.7 V" >
             </ENUMERATOR>
             <BIT name="BODEN" mask="0x40" text="Brown-out detection enabled" >
             <ENUMERATOR name="SUT_CKSEL" mask="0x3F" text="Select Clock Source" >
                <enum val="0x00" text="Ext. Clock; Start-up time: 6 CK + 0 ms" >
                <enum val="0x10" text="Ext. Clock; Start-up time: 6 CK + 4 ms" >
                <enum val="0x20" text="Ext. Clock; Start-up time: 6 CK + 64 ms" >
                <enum val="0x01" text="Int. RC Osc. 1 MHz; Start-up time: 6 CK + 0 ms" >
                <enum val="0x11" text="Int. RC Osc. 1 MHz; Start-up time: 6 CK + 4 ms" >
                <enum val="0x21" text="Int. RC Osc. 1 MHz; Start-up time: 6 CK + 64 ms" >
                <enum val="0x02" text="Int. RC Osc. 2 MHz; Start-up time: 6 CK + 0 ms" >
                <enum val="0x12" text="Int. RC Osc. 2 MHz; Start-up time: 6 CK + 4 ms" >
                <enum val="0x22" text="Int. RC Osc. 2 MHz; Start-up time: 6 CK + 64 ms" >
                <enum val="0x03" text="Int. RC Osc. 4 MHz; Start-up time: 6 CK + 0 ms" >
                <enum val="0x13" text="Int. RC Osc. 4 MHz; Start-up time: 6 CK + 4 ms" >
                <enum val="0x23" text="Int. RC Osc. 4 MHz; Start-up time: 6 CK + 64 ms" >
                <enum val="0x04" text="Int. RC Osc. 8 MHz; Start-up time: 6 CK + 0 ms" >
                <enum val="0x14" text="Int. RC Osc. 8 MHz; Start-up time: 6 CK + 4 ms" >
                <enum val="0x24" text="Int. RC Osc. 8 MHz; Start-up time: 6 CK + 64 ms" >
                <enum val="0x05" text="Ext. RC Osc.         -  0.9 MHz; Start-up time: 18 CK + 0 ms" >
                <enum val="0x15" text="Ext. RC Osc.         -  0.9 MHz; Start-up time: 18 CK + 4 ms" >
                <enum val="0x25" text="Ext. RC Osc.         -  0.9 MHz; Start-up time: 18 CK + 64 ms" >
                <enum val="0x35" text="Ext. RC Osc.         -  0.9 MHz; Start-up time: 6 CK + 4 ms" >
                <enum val="0x06" text="Ext. RC Osc. 0.9 MHz -  3.0 MHz; Start-up time: 18 CK + 0 ms" >
                <enum val="0x16" text="Ext. RC Osc. 0.9 MHz -  3.0 MHz; Start-up time: 18 CK + 4 ms" >
                <enum val="0x26" text="Ext. RC Osc. 0.9 MHz -  3.0 MHz; Start-up time: 18 CK + 64 ms" >
                <enum val="0x36" text="Ext. RC Osc. 0.9 MHz -  3.0 MHz; Start-up time: 6 CK + 4 ms" >
                <enum val="0x07" text="Ext. RC Osc. 3.0 MHz -  8.0 MHz; Start-up time: 18 CK + 0 ms" >
                <enum val="0x17" text="Ext. RC Osc. 3.0 MHz -  8.0 MHz; Start-up time: 18 CK + 4 ms" >
                <enum val="0x27" text="Ext. RC Osc. 3.0 MHz -  8.0 MHz; Start-up time: 18 CK + 64 ms" >
                <enum val="0x37" text="Ext. RC Osc. 3.0 MHz -  8.0 MHz; Start-up time: 6 CK + 4 ms" >
                <enum val="0x08" text="Ext. RC Osc. 8.0 MHz - 12.0 MHz; Start-up time: 18 CK + 0 ms" >
                <enum val="0x18" text="Ext. RC Osc. 8.0 MHz - 12.0 MHz; Start-up time: 18 CK + 4 ms" >
                <enum val="0x28" text="Ext. RC Osc. 8.0 MHz - 12.0 MHz; Start-up time: 18 CK + 64 ms" >
                <enum val="0x38" text="Ext. RC Osc. 8.0 MHz - 12.0 MHz; Start-up time: 6 CK + 4 ms" >
                <enum val="0x09" text="Ext. Low-Freq. Crystal; Start-up time: 1K CK + 4 ms" >
                <enum val="0x19" text="Ext. Low-Freq. Crystal; Start-up time: 1K CK + 64 ms" >
                <enum val="0x29" text="Ext. Low-Freq. Crystal; Start-up time: 32K CK + 64 ms" >
                <enum val="0x0A" text="Ext. Crystal/Resonator Low Freq.; Start-up time: 258 CK + 4 ms" >
                <enum val="0x1A" text="Ext. Crystal/Resonator Low Freq.; Start-up time: 258 CK + 64 ms" >
                <enum val="0x2A" text="Ext. Crystal/Resonator Low Freq.; Start-up time: 1K CK + 0 ms" >
                <enum val="0x3A" text="Ext. Crystal/Resonator Low Freq.; Start-up time: 1K CK + 4 ms" >
                <enum val="0x0B" text="Ext. Crystal/Resonator Low Freq.; Start-up time: 1K CK + 64 ms" >
                <enum val="0x1B" text="Ext. Crystal/Resonator Low Freq.; Start-up time: 16K CK + 0 ms" >
                <enum val="0x2B" text="Ext. Crystal/Resonator Low Freq.; Start-up time: 16K CK + 4 ms" >
                <enum val="0x3B" text="Ext. Crystal/Resonator Low Freq.; Start-up time: 16K CK + 64 ms" >
                <enum val="0x0C" text="Ext. Crystal/Resonator Medium Freq.; Start-up time: 258 CK + 4 ms" >
                <enum val="0x1C" text="Ext. Crystal/Resonator Medium Freq.; Start-up time: 258 CK + 64 ms" >
                <enum val="0x2C" text="Ext. Crystal/Resonator Medium Freq.; Start-up time: 1K CK + 0 ms" >
                <enum val="0x3C" text="Ext. Crystal/Resonator Medium Freq.; Start-up time: 1K CK + 4 ms" >
                <enum val="0x0D" text="Ext. Crystal/Resonator Medium Freq.; Start-up time: 1K CK + 64 ms" >
                <enum val="0x1D" text="Ext. Crystal/Resonator Medium Freq.; Start-up time: 16K CK + 0 ms" >
                <enum val="0x2D" text="Ext. Crystal/Resonator Medium Freq.; Start-up time: 16K CK + 4 ms" >
                <enum val="0x3D" text="Ext. Crystal/Resonator Medium Freq.; Start-up time: 16K CK + 64 ms" >
                <enum val="0x0E" text="Ext. Crystal/Resonator High Freq.; Start-up time: 258 CK + 4 ms" >
                <enum val="0x1E" text="Ext. Crystal/Resonator High Freq.; Start-up time: 258 CK + 64 ms" >
                <enum val="0x2E" text="Ext. Crystal/Resonator High Freq.; Start-up time: 1K CK + 0 ms" >
                <enum val="0x3E" text="Ext. Crystal/Resonator High Freq.; Start-up time: 1K CK + 4 ms" >
                <enum val="0x0F" text="Ext. Crystal/Resonator High Freq.; Start-up time: 1K CK + 64 ms" >
                <enum val="0x1F" text="Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 0 ms" >
                <enum val="0x2F" text="Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 4 ms" >
                <enum val="0x3F" text="Ext. Crystal/Resonator High Freq.; Start-up time: 16K CK + 64 ms" >
             </ENUMERATOR>
          </LOW>
          <HIGH>
             <BIT name="OCDEN" mask="0x80" text="On-Chip Debug Enabled" >
             <BIT name="JTAGEN" mask="0x40" text="JTAG Interface Enabled" >
             <BIT name="SPIEN" mask="0x20" text="Serial program downloading (SPI) enabled" >
             <BIT name="EESAVE" mask="0x08" text="Preserve EEPROM through the Chip Erase cycle" >
             <ENUMERATOR name="BOOTSZ" mask="0x06" text="Select Boot Size" >
                <enum val="0x03" text="Boot Flash size=512 words start address=$FE00" >
                <enum val="0x02" text="Boot Flash size=1024 words start address=$FC00" >
                <enum val="0x01" text="Boot Flashsize=2048 words start address=$F800" >
                <enum val="0x00" text="Boot Flash size=4096 words start address=$F000" >
             </ENUMERATOR>
             <BIT name="BOOTRST" mask="0x01" text="Boot Reset vector Enabled" >
             <BIT name="CKOPT" mask="0x10" text="CKOPT fuse (operation dependent of CKSEL fuses)" >
          </HIGH>
          <EXTENDED>
             <BIT name="M103C" mask="0x02" text="ATmega103 Compatibility Mode">
             <BIT name="WDTON" mask="0x01" text="Watchdog Timer always on" >
          </EXTENDED>
       </FUSE>
       <LOCKBIT>
          <ENUMERATOR name="LB" mask="0x03" text="Memory Lock" >
             <enum val="0x00" text="Further programming and verification disabled" >
             <enum val="0x02" text="Further programming disabled" >
             <enum val="0x03" text="No memory lock features enabled" >
          </ENUMERATOR>
          <ENUMERATOR name="BLB0" mask="0x0C" text="Boot Loader Protection Mode" >
             <enum val="0x00" text="LPM and SPM prohibited in Application Section" >
             <enum val="0x01" text="LPM prohibited in Application Section" >
             <enum val="0x02" text="SPM prohibited in Application Section" >
             <enum val="0x03" text="No lock on SPM and LPM in Application Section" >
          </ENUMERATOR>
          <ENUMERATOR name="BLB1" mask="0x30" text="Boot Loader Protection Mode" >
             <enum val="0x00" text="LPM and SPM prohibited in Boot Section" >
             <enum val="0x01" text="LPM prohibited in Boot Section" >
             <enum val="0x02" text="SPM prohibited in Boot Section" >
             <enum val="0x03" text="No lock on SPM and LPM in Boot Section" >
          </ENUMERATOR>
       </LOCKBIT>
    </AVRPART>



    Znaczną część danych można brać z plików XML dodanych do AVR Studio, znajdujących się w folderze "c:\Program Files\Atmel\AVR Tools\Partdescriptionfiles\"

    tzn. informacja o danych kalibracyjnych zawarta jest w Tag-ach <OCEntry>, natomiast informacja o FUSE i LOCK BITS w sekcji rozpoczynajacej sie od Tag-u <V2>.

    Pozostaje podać informacje o sygnaturze układu, parametrach pamięci (dostępne w dokumentacji układu)...

    Jedynie wyjaśnienia wymaga Tag <HVMODE val="0x01">

    Wiec w tym miejscu wstawiamy:
    0x01 - Standardowy tryb HVPP
    0x02 - Tryb HVPP dla mniejszych układów (brak niektórych linii w trybie HVPP np. BS2), Przykładowo ATTiny2313
    0x03 - Tryb HVSP

    W sumie jak są chętni to zrobi się to dużo szybciej... Ja niestety siedzę dalej nad Software. W obecnej formie jest już w pełni funkcjonalny. Pozostało jeszcze dorobić Log z informacjami, informacje o błędach itp. - czyli kosmetyka która sprawia że program jest milszy w obsłudze... Do tego jeszcze przygotowanie schematu...

    Odnośnie pliku PartList.cfg to aktualną jego wersję dodaję do załącznika.
  • #30
    tplewa
    Level 39  
    Witam

    Zamieszczam w załączniku komplet do programatora:

    1. Firmware v 1.02
    2. Software na PC v1.00 (zawiera w pliku PartList.cfg definicje 41 układów)
    3. Schemat (pdf + Altium Designer)