Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30

p.kaczmarek2 22 Gru 2015 21:34 6357 12
  • Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Witajcie moi drodzy!
    Poprzednio pokazałem Wam moją konstrukcję programatora Brenner9L. Dziś opiszę konstrukcję bliźniaczego programatora - Brenner8. Jest on nieco bardziej skomplikowany, ponieważ zawiera na pokładzie elementy odpowiedzialne za wytworzenia napięcia VPP (z reguły 12V) potrzebnego dla większości PICów. Ale o tym więcej będzie nieco dalej w tym temacie.Chciałbym tutaj opisać budowę i podzielić się doświadczeniami, zwłaszcza że strona Spruta (autora Brennera) jest po niemiecku, co skutecznie odstrasza hobbystów, którzy nie znają tego języka. Opis uwzględnia dokonane przeze mnie modyfikacje układu, ze względu na brak dostępu do niektórych elementów.

    Co ten programator oferuje?
    - szybkie programowanie przez USB bez wymogu zewnętrznego zasilania
    - wsparcie dla PIC10*, PIC16*, PIC18*, PIC18F*K*, dsPIC30
    - programowanie ICSP (w układzie)
    - no i ostatecznie - satysfakcje z samodzielnie złożonego układu!

    Programator ten ma wyjście ICSP takie jak PICKIT2:

    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30

    Schemat programatora
    Osobiście użyłem wersji (Brenner8mini) (rev 4) . Zawiera ona tylko trzy tranzystory i nie sprawia problemu z uruchomieniem (w innej wersji podobno należy wylutować jeden z tranzystorów bo jest błąd w schemacie lub firmware).

    Oto oryginalny schemat (wg Spruta):
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Uwaga: ten programator nie jest w stanie zapewnić dużego prądu przez ICSP ponieważ jego wyjście VDD jest podłączone bezpośrednio do pinu "serca programatora", czyli PIC18F2550. Wedle datasheetu maksymalne Source Current pinu to 25mA:




    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Należy o tym pamiętać, ponieważ pobrane większego natężenia prądu z VDD wyjścia ICSP tutaj może zakończyć się uszkodzeniem programatora. Rozwiązaniem problemu jest zasilenie programowanego układu z innego źródła - chociażby z USB komputera.


    Moje zmiany:
    - zamiast BC338 wsadziłem tam BC337 (tranzystor NPN)
    - zamiast BC328 wsadziłem tam BC327 (tranzystor PNP)
    Przy wsadzaniu tranzystorów proszę uważać na kolejność wyprowadzeń!


    Budowa krok po kroku:
    Najpierw musimy wypalić bootloader spruta na PIC18F2550 - można to wykonać z pomocą prostego JDMa, PICKITa lub innego programatora:
    UWAGA: plik bootloadera udostępniony przez spruta to boot_0_20mhz.hex i jego należy wypalić na PICu. Nie można bezpośrednio wgrać firmware (b8_fw17.hex) bo wtedy programator działa wadliwie, pojawiają się błędy USB itp!
    Ja użyłem klonu PICKIT2. Dziwny komunikat o brakującej konfiguracji zignorowałem - nie przysporzył on żadnych kłopotów.
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30


    Tworzenie płytki:
    Płytkę tworzymy wybranym przez nas sposobem. Ja wybrałem metodę zelazkowa, czyli temotransferu. Lutujemy wszystkie elementy i pamiętamy, ze kondensatory odsprzęgające (100nF), kondensatory przy kwarcu itp. są niezbędne do poprawnego działania układu.
    Moja płytka po wytrawieniu wyglądała tak - nie wyszła idealnie, dopiero się uczę tworzyć własne PCB, ale nie było zwarć i spisała się świetnie.
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Po wytrawieniu i zlutowaniu:
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30

    Sterowniki:
    Podłączamy programator do komputera przez USB. Urządzenie powinno zostać poprawnie rozpoznane jako sprut-device.
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Sterowniki musimy zainstalować ręcznie. Można to wykonać poprzez menadżer urządzeń. Pliki sterowników z folderu driver, tam odpowiednio mamy driver_2k_xp_vista oraz driver_98_me_2k. Pliki są w załączniku postu. Więcej nie będę się tu rozpisywać, ponieważ wgrywanie sterowników dla urządzenia USB na Windowsie to szeroko opisywany w sieci temat.


    Wgranie firmware z pomocą bootloadera:
    Odpalamy usBurn. Powinien on rozpoznać urządzenie i poprosić nas o wybranie firmware.
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Wybieramy plik i wgrywamy - powinno się zakończyć powodzeniem.
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    I gotowe. Tą operację wykonujemy tylko raz, przy następnym uruchomieniu nasze urządzenie będzie od razu rozpoznane jako programator Brenner8.

    Kalibracja:
    Programator Brenner8 ma na pokładzie przetwornicę tworzącą napięcie 12V (poziom VPP dla PICów, potrzebny na pinie MCLR) z napięcia USB (5V). Niestety przy pierwszym uruchomieniu należy ją skalibrować. Dane kalibracji są zapisane w pamięci urządzenia, więc jest to jednokrotny proces.
    Odpalamy całość jeszcze raz, teraz usBurn powinien już rozpoznawać nasze urządzenie jako programator, ale powinien nas również powiadomić o braku danych kalibracji ("no calibration data in programmer") - potrzebne są one do przetworniczki generującej 12V (napięcie VPP).
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Wchodzimy w Options -> Calibration, upewniamy się, ze nie mamy żadnego programowanego układu podłączonego do Brennera oraz dokonujemy kalibracji:
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    1. Mierzymy i podajemy Z-voltage, czyli napięcie na katodzie diody Zenera D3 - jest to napięcie AREF programatora.
    2. Mierzymy rezystancje R4 i R5 (najlepiej to zrobić przed ich wlutowaniem) i ustawiamy U-divider. Jego wartość liczymy ze wzoru: (R4+R5)/R5. Dla "idealnych" wartości to będzie:
    (4.7+2.2)/2.2 = 6.9/2.2 = około 3.14
    Oczywiście, rezystory maja swoja tolerancje i ich rezystancja rożni się od znamionowej, wiec w przypadku waszego programatora ta wartość będzie troszkę inna - dlatego należy ja obliczyć i uwzględnić.
    3. Klikamy auto-adjust offset and gain
    4. Klikamy graph, aby utworzyć wykres napięcia i sprawdzić, czy całość działa poprawnie.
    Wykres powinien wyglądać mniej więcej tak:
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Jeśli wykres jest przesunięty w którąś stronę lub zdeformowany to znaczy że albo nie podaliśmy poprawnych wartości parametrów (Z-voltage i U-divider) albo użyty dławik ma skrajnie nieodpowiednią wartość (osobiście testowałem 680uH oraz 100uH i oba sprawdziły się dobrze).
    Jeśli linie na wykresie cały czas pokazują 0 to najprawdopodobniej popełniliśmy błąd montażowy lub któryś z zastosowanych elementów nie jest sprawny, więc przetworniczka wcale nie działa.


    Test hardware
    Nie jest to krok obowiązkowy, ale warto go zrobić, by mieć pewność, że wszystko dobrze działa. Usburn oferuje możliwość wykonania testu wyjść ICSP:
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Kolejno sprawdzamy:
    1. przycisk VDD: powinien włączać stan 5V na wyjściu VDD
    2. przycisk VPP: powinien włączać stan 12V na wyjściu VPP oraz zapalać czerwoną diodę.
    3. przycisk SCLK - zmienia stan z 0 na 5V na linii PGC
    4. przycisk SDATA - zmienia stan z 0 na 5V na linii PGD
    Jeśli wszystko jest ok, to możemy przejść do testów z innym mikrokontrolerem - czy Brenner8 go widzi itp., jeśli nie to musimy sprawdzić połączenia i stan elementów na płytce.

    Końcowy test - wykrywanie i wypalanie
    Teraz będzie potrzebny nam jakiś mikrokontroler, którego chcemy zaprogramować.
    Ja wybrałem PIC18F4550.
    Całość można złożyć na płytce stykowej lub zastosować zwykłą płytkę z wyjściem ICSP.
    Ja zastosowałem wytrawianą na szybko minimalną płytkę pod PIC18F4550:
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Płytka ta zawiera na pokładzie złącze USB oraz PIC18F4550 wraz z niezbędnymi elementami do uruchomienia, czyli kondensatorami, rezonatorem kwarcowym i rezystorami na MCLR (RESET). Projekt Eagle (oraz pdf do wydruku) tej płytki również umieszczam w załącznikach.
    Całość została podłączona przez ICSP do Brennera8. Następnie wybrałem odpowiednią rodzinę mikrokontrolerów w usburn:
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Oraz kliknąłem "Identify PIC in programmer".
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Mój PIC18F4550 został poprawnie rozpoznany. Następnie wybrałem hex, jaki chcę wgrać i kliknąłem write:
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    Wypalenie przebiegło pomyślnie.
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30
    W ten sposób możemy programować inne PICe z pomocą wykonanego przez nas Brennera8.

    Kosztorys
    PIC18F2550 - 15 zł
    Gniazdo USB typ B - 1 zł
    Tych drobniejszych elementów można za 1zł dostać kilka sztuk, ale nie będę liczyć co do grosza, i tak raczej nikt nie kupuje pojedynczo.
    Kwarc 16 MHz - 1 zł
    Tranzystory (te co użyłem ja lub podobne) - 2 zł
    Gniazdo 28 DIP - 1 zł
    Diody LED - 1 zł
    Drobnica, rezystory - 3 zł
    Laminat - 5 zł

    Jak widać - koszt budowy tego programatora wynosi około 30 zł i to przy założeniu, że wszystko kupujemy - jeśli mamy na stanie już tranzystory, diody, laminat itp., to koszt spada praktycznie do wartości samego mikroprocesora.
    Przypomina, ze ponadto trzeba mieć jakiś inny programator, by wgrać bootloader spruta na użytego PICa - ewentualnie można skorzystać z uprzejmości znajomego, który taki programator posiada (mogę z tym pomóc, proszę pisać na PW).

    Podsumowanie
    W ten sposób udało mi się złożyć i uruchomić moja wersję programatora Brenner8. Mam nadzieje, ze opisane tu moje doświadczenia przydadzą się komuś i ułatwią mu budowę Brennera - Brenner to dobry projekt, który bardzo "cierpi" na brak materiałów i dokumentacji dostępnej w sieci. W razie pytań proszę pisać.

    Załączniki:
    - pliki Eagla z projektem płytki, schematem i pdfem do termotransferu (dla Brenner8 oraz dla płytki minimalnej pod PIC18F4550)
    - software i firmware programatora
    - handbuch pdf Brennera (autorstwa spruta), na którym bazowałem - niestety całość po niemiecku


    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
  • #2 23 Gru 2015 02:54
    sk700
    Poziom 31  

    Witaj
    Czy w tych pieniądzach nie korzystniej byłoby wykonać open programmera? Przy niewiele większym nakładzie mamy programator obsługujący PICe, AVRy i większość EEPROMów z jakimi można się spotkać w budowanych/naprawianych urządzeniach :D Co do projektu: ostatnio brakuje na elektrodzie różnego typu programatorów na USB w związku z czym za sam pomysł należy się ogromy plus. Minus niestety za docięcie laminatu i brak opisu elementów. W przypadku programatora ma to znaczenie gdy dołączamy programowany układ za pomocą pojedynczych przewodów (nie musimy za każdym razem szukać rozpiski złącza). Warstwę opisową można wykonać po wywierceniu otworów i wyrównaniu ich krawędzi papierem ściernym identyczną metodą jaką wykonałeś mozajkę ścieżek. Pozdrawiam i życzę dalszych sukcesów

  • #4 23 Gru 2015 08:55
    eurotips
    Poziom 35  

    Freddy napisał:
    Dziwny ten schemat masz, skąd go wziąłeś?
    Przeglądałem dokumentacje Brennera, bo kiedyś go robiłem i nie znalazłem takiego schematu.
    Wszystkie jakie pamiętam były na 4 tranzystorach.


    A mój b8 ma więcej niż 4 tranzystory bo aż 7 a robiłem go wg oryginalnego wzoru pcb więc musiała być taka wersja.
    Ta cewka to musi być porządna i najlepiej 680µH,
    a problemy to w tym programatorze stwarzał tranzystor który zaznaczyłem w kółku, widać że wylutowałem na płytce rezystor z obwodu kolektora. Kiedyś chciałem się dowiedzieć po co on tam jest i do czego służy ale nic konkretnego z tego nie wynikło.
    W tej mojej wersji VDD jest poprzez tranzystor BC337, nie odważyłbym się na wersję gdzie VDD podaje PIC szczególnie jak używasz ICSP i łaczysz kabelkami, o pomyłkę nie trudno.
    Ja mam tą wersję, z podstawką ZIF bo samo ICSP to zły pomysł:
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30

  • #5 23 Gru 2015 13:13
    p.kaczmarek2
    Poziom 23  

    Dziękuję za wypowiedzi.

    sk700 napisał:
    Witaj
    Czy w tych pieniądzach nie korzystniej byłoby wykonać open programmera?

    Mam go w planach, ale trochę zniechęcił mnie budową, która na pierwszy rzut oka wydaje się udziwniona.
    sk700 napisał:
    brak opisu elementów. W przypadku programatora ma to znaczenie gdy dołączamy programowany układ za pomocą pojedynczych przewodów (nie musimy za każdym razem szukać rozpiski złącza).

    Ja to rozwiązałem stawiając kropkę pisakiem-markerem tam gdzie jest pierwszy pin ICSP - zakładam, że programowany układ też ma standardowe ICSP więc mi to starcza. Ale ogólnie pomysł dobry, wezmę to pod uwagę.
    Freddy napisał:
    Dziwny ten schemat masz, skąd go wziąłeś?
    Przeglądałem dokumentacje Brennera, bo kiedyś go robiłem i nie znalazłem takiego schematu.
    Wszystkie jakie pamiętam były na 4 tranzystorach.

    Właśnie zauważyłem, że ludzie jakoś pomijają ten schemat, a moim zdaniem jest najprostszy a do tego mniej problematyczny (brak tego "kłopotliwego tranzystora").
    Ten schemat u Spruta nazywa się:
    Cytat:

    Normal-Version (Brenner8mini) (rev 4)

    Cóż, na tej stronie trochę tego jest, a do tego jej język i styl nie ułatwia czytania, więc się nie dziwię.
    eurotips napisał:
    Kiedyś chciałem się dowiedzieć po co on tam jest i do czego służy ale nic konkretnego z tego nie wynikło.

    Mógłbyś przytoczyć też schemat Twojej konkretnej wersji, dla jasności?
    Podstawka ZIF moim zdaniem tylko zwiększa koszty (dość trudno ją dostać) a dużo nie ułatwia - jeśli chodzi o programowanie układów poza ICSP to ja mam zrobioną osobną płytkę z różnymi podstawkami i mogę ją wedle chęci podłączyć do PICKIT2, Brenner8, JDMa itp. Jak znajdę Eagla to ją też wrzucę na forum.

  • #8 23 Gru 2015 15:27
    eurotips
    Poziom 35  

    Freddy napisał:
    Ja swego czasu zrobiłem jedną dla kolegi, a teraz będę robił dla siebie ta wersję.
    Programator Brenner8 po ludzku - PIC10, PIC16, PIC18, dsPIC30


    Tutaj ten tranzystor ma oznaczenie Q6.
    Ciekawe czy też będzie sprawiał problemy.
    Proponuję uruchamiać bez tego tranzystora i dopiero po próbach go wlutować.

  • #11 23 Gru 2015 15:37
    p.kaczmarek2
    Poziom 23  

    eurotips napisał:

    Tutaj ten tranzystor ma oznaczenie Q6.
    Ciekawe czy też będzie sprawiał problemy.
    Proponuję uruchamiać bez tego tranzystora i dopiero po próbach go wlutować.

    On zwiera do masy pin MCLR (VPP) przez rezystor 100 ohm, więc chyba jest odpowiedzialny za resetowanie programowanego układu z poziomu softu Brennera.... Jaki DOKŁADNIE kłopot on sprawiał?


    EDIT: Odpisałeś jak pisałem posta - ale to by się zgadzało.
    On jest po to, by startować układ z pomocą Target: Run.
    Bez tego jest ciągle w stanie RESET.
    Sprawdzałeś to?