
Witajcie moi drodzy!
Po wielu wysiłkach dotyczących zarówno hardware, jak i software, udało mi się zbudować moją wersję programatora mikroprocesorów PIC na USB wedle projektu Brenner9L. 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 PIC18FxxJxx, PIC24 i dsPIC33, w przyszłości może PIC32
- prostotę budowy - powyższe PICe maja VPP na poziomie VDD, wiec na płytce nie jest już potrzebne źródło 12V
- mały rozmiar plytki
- no i ostatecznie - satysfakcje z samodzielnie złożonego układu!
Programator ten ma wyjście ICSP takie jak PICKIT2:

Schemat programatora
Oto oryginalny schemat (wg Spruta):

Jak widzimy, układ bazuje na PIC18LF2550:

Jest to wersja PIC18F2550 na szerszy zakres napięć, dzięki czemu można całość zasilić z 3.3V - w ten sposób unikamy konieczności tłumaczenia sygnałów z poziomu 5V na 3.3V.
Układ posiada dwie zworki:
Zworka JP1 to RESET - można by tam wsadzić przycisk.
Zworka JP2 to zasilanie programowanego układu z Brennera - u mnie jest zwarta.
Układ posiada dwie diody LED:
Dioda LED1 (zielona) oznacza włączenie VDD - czyli zasilania mikrokontrolera z programatora. Proszę pamiętać, że aby użyć VDD z programatora, należy jeszcze założyć zworkę JP2.
Dioda LED2 (czerwona) oznacza włączenie VPP - czyli programowanie.
Rezonator kwarcowy na schemacie ma wartość 20MHz, ale preferowane jest użycie 16 lub 12 - na niższym napięciu zasilania (tu 3.3V) PIC może nie poradzić sobie z takim taktowaniem. Ponadto firmware dostępne jest tylko w wersjach 12MHz i 16MHz.
Moje zmiany:
- zamiast REG1117/LD1117V33 użyłem TC1264v33 - niestety TC1264v33 ma inną kolejność wyprowadzeń - ale obyło się bez modyfikacji płytki, po prostu trzeba umiejętnie odgiąć nóżki
- zamiast BF959 wsadziłem tam BC238 (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 PIC18LF2550 - można to wykonać z pomocą prostego JDMa, PICKITa lub innego programatora:
Ja użyłem PICKIT2. Po otwarciu hexa pojawił się dziwny komunikat, ale nie skutkował on żadnym błędem:



Dociekliwy czytelnik zwróci uwagę na to, że PICKIT2 pokazuje PIC18F2550 (bez literki 'L') - to normalne, PICKIT2 pomija literkę L, a oba procesory są identyczne.
Ten bootloader, autorstwa Spruta, pozwoli nam potem wgrać do naszego PICa firmware Brennera - ale na razie zajmijmy się hardwarem.
Tworzymy płytkę preferowaną przez nas metodą - ja skorzystałem z metody termotransferu. Nie wyszła idealnie, ale była wystarczająco dobra, by złożyć na niej ten programator:
Przed trawieniem:

Po wytrawieniu:

Po oczyszczeniu acetonem:

Po wierceniu otworów:


Zostało wlutować elementy i sprawdzić połączenia. Pamiętajmy, że jeśli chcemy użyć innego LDO 3.3V i/lub innych tranzystorów niż u Spruta, to musimy zwrócić uwagę na ich wyprowadzenia i ew. dogiąć je tak, by pasowały do ścieżek.
Tak wygląda gotowy układ:

Instalacja:
Po podłączeniu do komputera system powinien zobaczyć nowe urządzenie USB, ale niestety automatyczna instalacja sterowników się nie powiedzie:


Mimo to urządzenie powinno być widoczne w menadżerze zadań - możemy tam samodzielnie zainstalować sterowniki. Sterowniki umieściłem w załączniku do postu.
Tutaj też może być potrzeba zainstalowania USBlib - też jest w załączniku - ja tego nie robiłem, ponieważ na obu komputerach (Win XP i 7), na których testowałem było już zainstalowane (jak będę mieć okazję, to uzupełnię screeny).


Od tego momentu nasze urządzenie powinno być inaczej widoczne w Menadżerze urządzeń - już jako działające poprawnie.

Pierwsze uruchomienie (upload firmware):
Uruchamiamy USBurn - od razu powinien wykryć, że mamy podłączonego Brennera:

Zostaniemy zapytani o wskazanie firmware - wybieramy odpowiednią wersję dla użytego rezonatora kwarcowego (np. b9l_fw16.hex).

Po zakończeniu uploadu firmware powinniśmy już moc zacząć korzystać z programatora:

Test hardware:
Teraz warto wykonać test hardware w celu sprawdzenia poprawności budowy układu. Potrzebny do tego będzie multimetr.

Kolejno sprawdzamy:
1. przycisk VDD: powinien włączać stan 3.3V na wyjściu VDD (przy założonej zworce JP2) oraz zapalać zieloną diodę.
2. przycisk VPP: zapala lub gasi czerwona diodę
3. przycisk SCLK - zmienia stan z 0 na 3.3V na linii PGC
4. przycisk SDATA - zmienia stan z 0 na 3.3V na linii PGD
Jeśli wszystko jest ok, to możemy przejść do testów z innym mikrokontrolerem - czy Brenner9L 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 PIC24FJ64GA002.
W tym momencie niezbędna jest umiejętność czytania datesheetow.
Na płytce stykowej musimy wykonać minimalne podłączenie pinów dla programowanego procka ("Basic Connection Requirements"):


Zwracamy uwagę na wymagane podłączenie regulatora napięcia (EN/DIS VREG) i postępujemy zgodnie z datasheetem:

Wszystko powinno być jasne - DISVREG do masy, a na VCAP dajemy kondensator około 10uF.
W moim przypadku tak wyglądał zmontowany układ:

Teraz możemy sprawdzić, czy Brenner9L rozpoznaje podłączony mikroprocesor. Wybieramy odpowiednia rodzinę (PIC24 w moim przypadku) i klikamy "Identify PIC in Programmer":

Jeśli wszystko dobrze złożyliśmy, to PIC powinien zostać rozpoznany - tak jak na powyższym screenie. Od tego momentu możemy wgrać na niego dowolny hex oraz wykonywać inne operacje, takie jak Blank check (sprawdzenie, czy pusty), Verify (weryfikacja hexa), itp.
Jeśli PIC nie jest rozpoznawany, to możliwe, że nie wybraliśmy odpowiedniej rodziny - poniższy zrzut ekranu pokazuje, co się dzieje, jeśli wybiorę PIC18F** mając podłączony PIC24:

Jeśli mamy już jakiś wsad (plik .hex), którym chcemy zaprogramować innego PICa z pomocą naszego Brenner9L, to po poprawnym wgraniu tekst powinien podświetlić się na zielono oraz powinien mrugać napis "o.k.":

Kosztorys
PIC18LF2550 - 15 zł
Gniazdo USB typ B - 1 zł
Tych drobniejszych elementów można za 1zl 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ł
Regulator LDO 3.3V - 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 Brenner9L. 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ć.
PS: Jak znajdę wolną chwilę, to uzupełnię screeny o instalację libusb oraz testy na Windows 10 - chyba, że ktoś z forumowiczów już to sprawdzał, w takim razie zapraszam do podzielenia się wiedza.
Załączniki:
- pliki Eagla z projektem płytki i schematem
- pdf do druku do termotransferu
- software i firmware programatora
Cool? Ranking DIY