Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE

p.kaczmarek2 21 Jul 2021 12:13 3597 2
Renex
  • Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Witajcie moi drodzy.
    Przedstawię tutaj płytkę Fubarino-Eth oferującą łączność USB i Ethernet opartą na 32-bitowym PIC32MX795F512H (512KB Flash, 128KB RAM) i nieśmiertelnym ENC28J60. Płytka ta stanowi moją wersję słynnego Fubarino-SD 1.5 od fubarino.org / schmalzhaus. Płytkę tę nieco przerobiłem oraz przygotowałem dla niej przykłady w MPLAB X z XC32 oraz Mikro C Pro for PIC32. Projekt powstał z myślą o utworzeniu platformy oferującej z miejsca łączność USB i Ethernet przy zachowaniu możliwości łatwego podłączenia jej do płytki stykowej. Płytka ta zachowuje kompatybilność z oryginałem i jest też wspierana przez środowisko Arduino IDE (z modułem chipkit/mpide) z bootloaderem USB.

    Projekt płytki
    Projekt ten jest moją przerobioną wersją tzw. Fubarino SD o którym można poczytać tutaj:
    https://wiki.seeedstudio.com/Fubarino_SD/
    https://github.com/fubarino/fubarino.github.com
    Poniżej zamieszczam dokumentację pierwowzoru:
    Fubarino_S..v14.zip Download (606.68 kB)
    fubarino-1...4eagle.zip Download (1.5 MB)
    Fubarinov1...5eagle.zip Download (2.72 MB)
    Moja wersja, Fubarino-Eth, stawia większy nacisk na łączność i rezygnuje ze slotu na kartę microSD a na jej miejsce oferuje łączność Ethernet poprzez ENC28J60:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Jest też siłą rzeczy znacznie dłuższa, ale nie przekracza magicznej granicy 100mm by wciąż dało się jej gołe PCB zamówić tanio od chińczyków (większość płytkarni ma najmniejszą stawkę do rozmiaru 10cm na 10cm, a potem cena rośnie).
    Płytka (oryginał, jak i moja wersja) oparta jest o PIC32MX795F512H:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Przyjrzyjmy się tutaj temu co dodałem, czyli sekcji łączności Ethernet:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    ENC28J60 znajduje się w małej obudowie SSOP28, w żadnej innej by się nie zmieścił:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Jest on jeszcze dostępny w QFN, ale nie chciałem aż tak utrudniać lutowania, bo projekt jest zrobiony w założeniu, że da się to w domu zlutować (tak, da się, bez gorącego powietrza też, zlutowałem trzy sztuki).
    W roli złącza Ethernet/magjack jest JXD0-0006NL:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Jego schemat wewnętrzny. W tym złączu transformatorek separacyjny jest zintegrowany. Redukuje to ilość elementów na PCB:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Cały schemat dodanej przeze mnie sekcji Ethernet, część 1, ENC28J600:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Część 2, JXD0-0006NL i reszta:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Schemat połączeń PIC32MX795F512H (lub odpowiednika) pozostał bez zmian względem pierwowzoru (Fubarino SD), więc go tu nie zamieszczam.
    Pełny schemat mojej wersji w formacie .sch (Eagle) oraz płytka w .brd:
    Fubarino-1...oSd-15.zip Download (89.1 kB)Points: 2 for user
    Poniżej Gerbery panelu 3 płytki na panel (te które zleciłem płytkarni):
    Fubarino_E...3_fxed.zip Download (503.63 kB)Points: 1 for user

    Lutowanie płytki - początek
    Tym razem wybrana płytkarnia nie doliczała nic za panel (dopóki w panelu powtarza się jedno PCB), więc zasadniczo kupiłem od niej 5 panelów po 3 sztuki PCB. (A chyba nawet 6 paneli dają, z reguły dają jeden więcej).
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Do lutowania używam najtańszej lutownicy z regulacją mocy:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Zacząłem od najtrudniejszych elementów. Złącze mini USB i PIC:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Złącze mini USB. Specjalnie używam tego z dwoma wypustkami plastikowymi bo się solidnie trzyma i dobrze lutuje:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Jest to złącze z dodatkowym pinem USB ID (standard OTG, On-The-Go), potrzebny by móc wybrać czy urządzenie jest hostem czy slave.
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Zlutowałem niezbędne minimum w trzech wersjach:
    - PIC32MX575F512H
    - PIC32MX675F512H
    - PIC32MX795F512H
    Ich wyprowadzenia są zgodne, więc nie było problemu.
    Sprawdziłem już wtedy czy programator widzi mikrontroler. PICKIT3 (poprzez MPLAB IPE) wykrywa PIC32MX575F512H:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    PICKIT3 (poprzez MPLAB IPE) też wykrywa PIC32MX795F512H:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE

    Drobna poprawka
    Niestety przy projektowaniu płytki przeoczyłem jedną rzecz. Nie dałem połączenia pinu RESET od ENC28J60 do któregoś z pinów PICa. Naprawiłem to potem poprzez dodanie zworki (nie jest to problematyczne), ale warto zaznaczyć, że taki problem wystąpił.
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE

    Program testowy - blink, przycisk, UART, USB
    Program testowy przygotowałem w celu ułatwienia sobie weryfikacji lutów na płytce. Zrobiłem go w MPLAB X (kompilator XC32) na bazie przykładu "HID Keyboard" od Microchipa. Program ten po kolei sprawdza podstawowe funkcjonalności płytki (bez Ethernetu) tak bym mógł szybko określić, czy wszystko jest ok.
    Program ten wymaga przylutowania:
    - bloku zasilania (złącze USB, regulator LDO 3.3V)
    - mikrokontrolera wraz z niezbędnymi elementami (rezystor RESET, kondensatory 100nF, kondensator VCAP)
    - rezonatora kwarcowego 8MHz
    - diody LED PRG
    - przycisku PRG
    Dodatkowo trzeba podłączyć konwerter USB<->UART do pinów RX/TX od UART2.
    Program ten kolejno:
    - miga kilkukrotnie diodą LED (RE5)
    - wysyła komunikaty na UART
    - tworzy urządzenie HID klawiatury
    - czeka na przyciśnięcie przycisku PRG na RE7 i z każdym przyciśnięciem wysyła kolejną literkę udając klawiaturę
    Skrócony kod przykładu:
    Code: c
    Log in, to see the code

    Sam kod klawiatury (wysyłanie po HID klawisza):
    Code: c
    Log in, to see the code

    Płytka przed testowaniem:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Powyżej widać podłączony PICKIT3, konwerter USB-UART i zasilanie oraz USB. Wszystko na jednym hubie (na którym też mam monitor VGA, ale to poza tematem).
    Układ zasilany jest z USB przez regulator LDO.
    Opcja "power target circuit from tool" nie chciała mi tutaj działać. Ogólnie nie chce mi ona działać z moim PICKIT3, pokazuje się komunikat, że jest za małe napięcie, ale chyba odczyt jest troszkę przekłamany. Może mój PK3 nie jest oryginałem, tylko klonem z Chin...
    Początek testu - miganie diody LED:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Drugi etap testu - UART:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Trzeci etap testu - pojawia się urządzenie USB (klawiatura HID):
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Widok z USB Dev View:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Czwarty etap testu - po wciśnięciu przycisku na płytce można pisać litery:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Projekt przykładu z repozytorium Microchipa, okrojony do minimum i przeniesiony pod moją płytkę:
    MicrochipM...inoETH.zip Download (916.82 kB)Points: 0.5 for user

    Program testowy nr 2 - blink, UART, Ethernet
    Następnie przylutowałem resztę układu (ENC28J60 i magjack). Na zdjęciu ENC28J60 w obudowie SSOP28 (inaczej ENC28J60/SS):
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    (początkującym jednak odradzam robienie takich zdjęć, łatwo jest uszkodzić układ poprzez ESD na skutek beztroskiego dotykania jego pinów)
    Już ze złączem Ethernet:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Do testowania Ethernetu przygotowałem sobie drugi, osobny program. Użyłem do tego innego IDE niż wcześniej - Mikro C PRO for PIC32. Było to spowodowane przede wszystkim tym, że miałem go już w sumie gotowego w Mikro C jeszcze z czasów pisania pod PIC32MX250F128B. Wystarczyło tylko przenieść go pod użyty tutaj PIC, a one są w tej samej rodzinie, więc żaden problem.
    Program ten wymaga poprawnie zlutowanego bloku ENC28J60 (wraz z rezonatorem 25MHz, wszystkim) i oczywiście podłączenia Ethernetu:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Skrócony kod przykładu:
    Code: c
    Log in, to see the code

    Osobna funkcja od odbsługi TCP:
    Code: c
    Log in, to see the code

    Po uruchomieniu programu najpierw miga dioda i wypisywane są komunikaty na UART:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Potem na złączu MagJack zapalają się diody (odbieranie i wysyłanie):
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Komenda ping (a dokładniej: png 192.168.0.77 /t, z przełącznikiem /t czyli pingowanie non stop) wykrywa płytkę:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Na koniec można podłączyć się do PICa poprzez TCP (np. narzędziem Putty) i odebrać testowy komunikat:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Pełen projekt MikroC przykładu skonfigurowany pod PICa w wersji 575 (nie 975!):
    PIC32MX575...TCP_SV.zip Download (382.19 kB)Points: 0.5 for user

    Przykład 3 - Komunikacja HID
    Teraz może dla odmiany przykład USB w Mikro C dla PIC32. Mikro C oferuje gotowe biblioteki dla USB, w tym dla komunikacji HID. Cały kod prostego Hello World HID sprowadza się do załączenia deskryptora USB i następującego kodu:
    Code: c
    Log in, to see the code

    Oczywiście konfiguracja zegara, PLL, itp. też powinna być poprawna. Trzeba respektować wymagania częstotliwości, np. UFin musi być równe 4MHz, a zegar USB 48MHz (dobieramy wartości div/PLL by było zgodnie z tym):
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Swoje urządzenie nazwałem PIC32 mxetc:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Po wgraniu programu PICKITem i podłączeniu na USB Fubarino komputer od razu je widzi (HID nie wymaga sterowników):
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Do sprawdzenia komunikacji HID może służyć samo narzędzie HID Terminal z Mikro C:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    PIC odpowiada na komunikat:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Ten przykład HID można łatwo zmodyfikować i zrobić z niego już klawiaturę HID czy tam myszkę lub gamepada.
    Pełen projekt MikroC przykładu skonfigurowany pod PICa w wersji 575 (nie 975!):
    PIC32MX575...SB-hid.zip Download (221.55 kB)Points: 0.5 for user

    Programowanie w Arduino IDE
    Oryginalne Fubarino SD kompatybilne jest z Arduino IDE, więc mój klon siłą rzeczy też jest. Można go programować w tym środowisku po dodaniu odpowiedniej paczki przez Boards Manager. Wtedy kod pisany na PICa łudząco przypomina oryginalne skecze Arduino oraz możemy go wgrywać przez USB. Wymaga to tylko jednokrotnego wcześniejszego wgrania bootloadera przez programator.
    Szczegółowe informacje o tej płytce dla Chipkit/MPIDE znajdują się tutaj:
    http://chipkit.org/wiki/index.php?title=ChipKIT_Fubarino_SD
    Po wgraniu bootloadera płytka widziana jest jako "chipKIT USB Serial (Stk500v2 compatible)":
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Plik bootloadera:
    FUBARINO_S...loader.zip Download (6.3 kB)
    Po stronie komputera, w Arduino IDE, trzeba najpierw dodać lokalizację opisu płytki do "Additional Board Manager URLs". Link:
    Quote:

    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    A potem ten opis płytek dodać przez Boards Manager. Wyszukujemy "chipkit" (tam jest kompilator, itp. dla PIC32MX i biblioteki Fubarino):
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Wymagane ustawienia Arduino IDE - trzeba wybrać programowaną płytkę oraz programowanie przez "serial (lecz w rzeczywistości to USB):
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE
    Aby wprowadzić płytkę w stan programowania trzymamy wciśnięty PRG i naciskamy RESET (puszczamy pierwszy RESET). Dioda na pinie 21 powinna zacząć szybko migać. Wtedy w Arduino IDE wykonujemy upload.
    Sukces programowania przez bootloader USB:
    Fubarino Eth czyli PIC32MX795F512H i ENC28J60 dla Arduino IDE

    Podsumowanie
    Z projektu jestem zadowolony. Gdybym miał go teraz ulepszać, to być może użyłbym czegoś lepszego niż ENC28J60 (może z interfejsem RMII), ale jak składałem ten projekt to zależało mi by uruchomić go bez problemów, gdyż potrzebowałem już tych płytek w konkretnym celu, który być może wkrótce też zaprezentuję.
    Oryginalnego Fubarino SD nigdy nie kupowałem, lecz myślę, że moja wersja wcale nie jest gorsza, choć gdybym miał oryginał , to być może ograniczyłbym się do zrobienia dla niego prostego shielda z Ethernetem. Ale po prostu nie opłacało mi się kupować Fubarino SD jak mogłem zrobić swoje.
    Z mojej płytki wygodnie mi się korzysta, co prawda przycisk RESET jest teraz na jej środku, ale nie odczułem, by był to problem. Jeśli bym robił kolejną wersję, to być może rozważyłbym jakieś dodatkowe wyprowadzenie hosta USB w postaci złącza żeńskiego (opcjonalnego do przylutowania, jednocześnie z tym co jest), ale nie jest to niezbędne.
    Dodatkowo można by zmienić footprint regulatora LDO 3.3V na jakiś większy, bo jednak troszkę ENC28J60 pobiera prądu w trakcie pracy, a jak robimy własny projekt to dochodzą też inne peryferia, więc trzeba myśleć przyszłościowo.
    Wszystkie źródła (projekt płytki, testowe programy) i dokumentację daję jako załączniki w treści tekstu.

    Cool? Ranking DIY
    Do you have a problem with Arduino? Ask question. Visit our forum Arduino.
    About Author
    p.kaczmarek2
    Moderator Smart Home
    Offline 
  • Renex
  • #2
    maniek1818
    Level 22  
    W tym roku też polubiłem PICe, powiedz mi tylko czemu tyle topnika wylewasz na płytkę?
  • #3
    Chivo
    Level 25  
    Też lubię Pice. Projekt fajny bo brakuje płytek rozwojowych dla tych procesorów