Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Kategoria: Kamery IP / Alarmy / Automatyka Bram
Montersi
Kategoria: Akumulatorki / Baterie / Ładowarki
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Pinguino47J53 z 128KB Flash, prawie 4KB RAM i bootloaderem USB

p.kaczmarek2 17 Kwi 2017 11:17
  • Pinguino47J53 z 128KB Flash, prawie 4KB RAM i bootloaderem USB
    Witajcie moi drodzy!
    Dzisiaj przedstawie wam kolejne już moje w pełni samodzielnie wykonane Pinguino - czyli odpowiednik Arduino na mikrokontrolerze PIC. Jestem przeciwny gotowcom i uważam, że o wiele lepiej jest czasem samodzielnie coś wykonać niż zamawiać moduły z Chin. Te Pinguino oparte jest o PIC18F47J53, który ma 128KB Flash, 4KB RAM, oraz bogate peryferia. Niestety nie jest on dostępny w DIP, dlatego do konstrukcji użyłem wersji w obudowie TQFP.


    Projekt płytki
    Płytka jest jednostronna, częsciowo wykorzystuje montaż przewlekany, a częściowo powierzchniowy. Całość udało się zaprojektować bez ani jednej zworki. Wszystkie potrzebne piny są wyprowadzone, włącznie z MCLR potrzebnym do programowania całości PICKITem. Na pokładzie znajduje sie wejście USB do programowania poprzez bootloader, gniazdo dla zasilacza DC, zworka do wyboru źródła zasilania całości, LDO 3.3V, dioda POWER, dioda LED na pinie RC2 i przycisk RESET.
    Pinguino47J53 z 128KB Flash, prawie 4KB RAM i bootloaderem USB
    Płytkę wykonałem metodą termotransferu (żelazko), wraz z warstwą opisową. Layout jest przystosowany do zrobienia w domu, ścieżki są w miarę grube tak by nie było zbyt dużego ryzyka przetrawień.

    Czym jest Pinguino?
    Pinguino jest dla PIC tym czym jest Arduino dla AVR - gotowe środowisko, zestaw bibliotek i bootloader do prostego programowania przez USB. Pinguino wspiera PICe z rodzin 16F, 18F, i 32MX. Cały projekt jest w pełni darmowy a jego źródła dostępne są w sieci.
    Samo środowisko Pinguino IDE w wersji v11 prezentuje się następująco:
    Pinguino47J53 z 128KB Flash, prawie 4KB RAM i bootloaderem USB
    Natomiast kod na migającą diodę w Pinguino wygląda tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Jak widać, składnia języka jest czytelna i bardzo podobna do Arduino. Mamy gotowe funkcje do manipulacji pinami i nie trzeba bezpośrednio pisać do rejestrów, ale oczywiście to też jest możliwe.

    Wgranie bootloadera Pinguino
    Po złożeniu płytki trzeba ją jednokrotnie zaprogramować z pomocą zewnętrznego programatora - wgrać bootloader Pinguino. Pinguino oferuje różne wersje bootloadera przeznaczone dla różnych oscylatorów, 8MHz, 12MHz, 16MHz, itp. Ja wybrałem wersję 8MHz, bo taki rezonator miałem pod ręką. Na płytce wyprowadzone są wszystkie piny ICSP potrzebne do programowania. MCLR (RESET) jest podpisany, natomiast PGC oznaczony jest jako RB6, a PGD jako RB7.
    Oficjalnie PIC18F47J53 nie jest wspierany przez starszy programator PICKIT2 i aby go zaprogramować potrzebny jest PICKIT3, ale ja nie uległem tej opinii i znalazłem w sieci zmodyfikowany plik PK2DeviceFile.dat PICKIT2 który dodaje wsparcie tego chipa. Można go znaleźć w załączniku.
    Mimo to PIC wcale początkowo nie był wykrywany. Sprawdziłem kilkukrotnie połączenia, ale wszystko zdawało się być w porządku. Dopiero gdzieś za 20-tym (!) razem PICKIT2 jednokrotnie wykrył odpowiedniego PICa. Zamieniłem nawet kabelki na inne i dopiero wtedy zrozumiałem, co jest nie tak - winne były nie połączenia, lecz szumy na liniach PGD/PGC. Z podobnym problemem spotkałem się w przypadku programowania dsPIC30F2010. Rozwiązaniem okazało się dodanie kondensatorów pomiędzy PGD i masę oraz PGC i masę o wartości 22pF. To dziwne, że nie ma o tym wcale mowy w datasheecie, ale nic innego nie pomagało.

    Zainteresowałem się trochę tematem i znalazłem w sieci następującą tabelkę:
    Capacitor between PGC and VSSMaximum achievable speed
    22pF6MHz
    47pF4MHz
    100pF3MHz
    220pF1.5MHz
    470pF1MHz
    1nF500kHz
    2.2nF250kHz
    4.7nF100kHz
    10nF50kHz

    Źródło: http://www.northernsoftware.com/nsdsp/cable.htm
    Ciekawy jestem, czy ten problem by wystąpił gdybym użył PICKIT3, ale nie mam jak tego sprawdzić bo PICKIT3 nie posiadam i raczej nie zamierzam kupować. Nie ma takiej potrzeby - "dwójeczka" jak do tej pory daje radę wszędzie.


    Porównanie Pinguino47J53 i Arduino UNO
    Zdjęcie pokazuje Arduino UNO obok mojego Pinguino. Obie płytki mają podobny rozmiar i złącza, poniżej postaram się dokładniej porównać ich możliwości.
    Pinguino47J53 z 128KB Flash, prawie 4KB RAM i bootloaderem USB
    Oto tabelka zawierająca najbardziej istotne informacje na temat obu płytek. Zaznaczam, że wartości z tabelki należy intepretować ze świadomością schematu całości i datasheetu PICa, ponieważ np. czerwona dioda LED sygnalizująca działanie bootloadera zajmuje jeden z pinów digital. To tylko informacje poglądowe.
    Pinguino47J53Arduino Uno
    Flash128KB32KB
    RAM4KB2KB
    D. IO2914
    VCC3.3V5V
    ADCs13 6
    RTCC1* 0
    UART21
    I2C2 0

    * - RTCC w PIC18F47J53 wymaga dodania drugiego rezonatora kwarcowego na odpowiednich pinach.
    Warto również wspomnieć, że PIC18F47J53 oferuje system PPS (Peripheral Pin Select), który pozwala odpowiednio przypisać wybrane funkcje do wybranych pinów, ale to jest przydatne zwłaszcza przy robieniu już płytki pod jakieś konkretne zastosowanie.

    Podsumowanie
    Jestem zadowolony z mojego nowego Pinguino18F47J53. Jeszcze rok temu samodzielne wykonanie płytki z elementami SMD, a zwłaszcza mikrokontrolerem w TQFP wydawało mi się niemożliwe. Teraz udało się zrobić całość metodą termotransferu wraz z warstwą opisową bez większych problemów. Oczywiście, jakość wykonania można by jeszcze polepszyć, ale najważniejsze że wszystko spełnia swoją funkcję i działa tak jak powinno. W tym projekcie najtrudniejsze jednak było zaprogramowanie PICa, znalazienie rozwiązania z kondensatorami na PGD/PGC zajęła mi parę dobrych godzin, zwłaszcza że ciągle podejrzewałem swój montaż o zimne luty i zwarcia, a problem leżał zupełnie gdzie indziej...

    Do postu dodaję załączniki:
    Pinguino18F47J53smd_PDFs.zip - pdf schematu (kolorowy), mozaika ścieżek (czarno biała) do wydruku, warstwa opisowa
    Pinguino47j53A-1_2.zip - oryginalny schemat Pinguino47J53 z ich Wiki (nieco się różni od mojego)
    Bootloader_v4.14_18f47j53_X8MHz.hex - użyty przeze mnie bootloader (8MHz rezonator)
    pic18f47j53wiki-pinguino-cc.zip - mirror wiki Pinguino47J53
    PK2DeviceFile_PIC18F47J53.zip - plik PK2DeviceFile.dat dla PICKIT2 ze wsparciem PIC18F47J53
    pinguino47j53smd_new_eagle.zip - schemat i layout Eagle mojej konstrukcji
    PIC18F47J53_datasheet.zip - datasheet rodziny PIC18F47J53
    pinguino-bootloaders-master20170417.zip - paczka bootloaderów Pinguino

  • #2 17 Kwi 2017 13:07
    sstasinek
    Poziom 12  

    Jedyny szkopuł projektu to słowo "podobny" zamiast identyczny rozstaw złączy. Nie trzeba było się wcale wysilać aby przypominał Arduino skoro nie ma identycznego rozstawu nóżek ani identycznej ich funkcji.. Aby tego użyć musisz każdy jeden gadżet "na kanapkę" zrobić po swojemu...

  • #3 17 Kwi 2017 13:19
    oskar777

    Poziom 24  

    Porównanie nie trafione, bo ten PIC kosztuje koło 14-17zł a za 12-15zł kupisz dobrze zrobionego chińczyka Arduino UNO, Jak byś z tego zrobił odpowiednik arduino mega to jeszcze miało by sens porównanie.

  • #4 17 Kwi 2017 14:44
    p.kaczmarek2
    Poziom 23  

    sstasinek napisał:
    Jedyny szkopuł projektu to słowo "podobny" zamiast identyczny rozstaw złączy. Nie trzeba było się wcale wysilać aby przypominał Arduino skoro nie ma identycznego rozstawu nóżek ani identycznej ich funkcji.. Aby tego użyć musisz każdy jeden gadżet "na kanapkę" zrobić po swojemu...


    Niby tak, ale tutaj cały mikrokontroler i IO jest na 3.3V i tylko część pinów jest 5V-tolerant, w przeciwieństwie do Arduino, które całe działa na 5V. Ale jak dla mnie to plus, bo łatwiej skomunikować się kartą SD lub z ENC28J60.
    No i jakoś nie widzę routingu tego...

    oskar777 napisał:
    Porównanie nie trafione, bo ten PIC kosztuje koło 14-17zł a za 12-15zł kupisz dobrze zrobionego chińczyka Arduino UNO, Jak byś z tego zrobił odpowiednik arduino mega to jeszcze miało by sens porównanie.


    Ten PIC ma 128KB pamięci a nie 32KB tak jak Uno, więc to też warto wziąc pod uwagę. A co do cen - w sumie prawda, chociaż sam jestem zaskoczony, bo patrzyłem tez ceny na polskim Botland a tam z kolei Arduino UNO kosztuje... no cóż, sami sprawdźcie...

  • #5 17 Kwi 2017 14:47
    Massive O. Penetrato
    Poziom 9  

    Czy pinguino dziala bez problemu z bibliotekami dla Arduino?

  • #6 17 Kwi 2017 23:56
    komatssu
    Poziom 27  

    Najkorzystniejszy stosunek możliwości do ceny mają płytki (mini-moduły) z uC STM32F103C8T6 - po ~2$ na aliex...
    Też można je programować w Arduino IDE.

  • #7 18 Kwi 2017 13:32
    nobanmeplease
    Poziom 13  

    Pomysł na płytkę jest fajny, ale ma jedną wadę, przez którą jest mało konkurencyjna z klonami Arduino UNO.
    Wadą jest to, że zastosowałeś 8bitowego scalaka, przez co nie ma jakiś specjalnych możliwości rozbudowy, gdybym w tej cenie dostał 32bitowego STMa i wyjście USB to miałby on znacznie większe szanse.

  • #8 18 Kwi 2017 14:07
    Massive O. Penetrato
    Poziom 9  

    Do Arduino mozna dokupic setki roznych shieldow z roznymi ekranami LCD, czujnikami, przekaznikami itp. wiec zrobienie plytki z wlasnym standardem to strzal w kolano.
    Ja uzywam plytki AnalogShield (DAC i ADC 16bitow na jednej plytce, po 4 kanaly 100ksps, z przetwonica dajaca ujemne napiecie) przeznaczonej do Arduino UNO z ukladem FPGA Cyclone V bo wlasnie takie zlacze shieldow jest na mojej plytce prototypowej (Terasic C5G) mimo ze nie ma to nic wspolneg o ze srodowiskiem Arduino wspolnego. Tak samo uzywalem tego shielda z Nucleo F303 od STM - ten sam standard zlacz shieldow.

  • #9 18 Kwi 2017 20:38
    mariomario
    Poziom 18  

    Projekt jest fajny w aspekcie zdobywanie nowego doświadczenia i umiejętności i za to leci "plusik"

  • #10 18 Kwi 2017 23:46
    R-MIK
    Poziom 35  

    p.kaczmarek2 napisał:

    bo łatwiej skomunikować się (...) z ENC28J60.

    Że co? Jaki problem z komunikacją z ENC prockiem zasilanym z 5V? Możesz to wyjaśnić?

  • #11 19 Kwi 2017 04:50
    jackfinch
    Poziom 13  

    Witam

    Na początek zapytam, dlaczego autor nie pokazał zdjęcia płytki gdzie wlutowany jest procesor, tylko pokazał górną warstwę. :?:

    Pozdrawiam

  • #13 20 Kwi 2017 11:02
    p.kaczmarek2
    Poziom 23  

    R-MIK napisał:
    p.kaczmarek2 napisał:

    bo łatwiej skomunikować się (...) z ENC28J60.

    Że co? Jaki problem z komunikacją z ENC prockiem zasilanym z 5V? Możesz to wyjaśnić?


    Zadałeś bardzo dobre pytanie. Z tego co wiem, to io ENC28J60 jest 5V-tolerant, ale sam ENC wymaga zasilania 3.3V. I w sieci można spotkać się z sugestią bezpośredniego podłączenia ENC do mikroprocesora działającego na 5V, ale ja sam się nie wypowiem, a w zamian zacytuję datasheet:

    Pinguino47J53 z 128KB Flash, prawie 4KB RAM i bootloaderem USB

    Pinguino47J53 z 128KB Flash, prawie 4KB RAM i bootloaderem USB

    Blok "Level Shift Logic" jest opisany jako "Required only if the microcontroller is operating at 5V". Parafrazując - jeśli MCU jest zasilane z 3.3V, to można level shift logic blok pominąć. Co o tym sądzisz?



    Co do shieldów Arduino - osobiście nie miałem nawet w planach takich używać, więc to nie problem.

    Jeśli chodzi o biblioteki przeznaczone dla Arduino to trzeba by je trochę przerobić by używać ich w Pinguino, ale w większości wypadków nie powinno to być trudne.

  • #14 25 Kwi 2017 06:37
    R-MIK
    Poziom 35  

    Jak zasilasz CPU z 3V3 to po co zmiana poziomu?
    Jak z 5V a ENC akceptuje 5V to też nie bardzo ma sens pomijając pewne nieliczne przypadki.
    Zmian poziomów w strone CPU też jest najczęściej niepotrzebna (chodzi o poziom napięcia jaki CPU akceptuje jako wysoki)
    Największym błędem jest dzielnik rezystorowy, zwłaszcza jak połączenia są stosunkowo długie, prędkość transmisji duża, a dzielnik z nieodpowiedniej strony magistrali.