
Witajcie moi drodzy!
Dziś chciałbym pokazać wam moją kolejną płytkę opartą o mikrokontroler PIC i USB bootloader Pinguino - PINGUINO2550. Ponadto pokażę również wykorzystanie tej płytki w praktyce, czyli jak w prosty sposób zrobić sterowanie z pomocą pilota na Pinguino.
Płytka powstała ponieważ chciałem wykorzystać resztki elementów z szafy, w tym malutki skrawek laminatu, oraz poeksperymentować z lutowaniem SMD (tutaj obudowa SOIC).
Pinguino 2550
Pinguino2550 to po prostu płytka z PIC18F2550 i bootloaderem USB kompatybilnym ze środowiskiem Pinguino. PIC18F2550 jest ośmiobitowym mikroprocesorem od Microchipa, cechuje go m. in. 32KB Flash, 2048B RAM i sprzętowe USB. Płytkę można by porównać do Arduino Nano, które w wersji z ATmega328 też ma 32KB Flash.

Ja w swoim projekcie zastosowałem tego PICa w obudowie SOIC, ale oczywiście jest też on dostępny w bardziej przyjaznej obudowie DIP.
Wybór SOIC był podyktowany tylko tym, że chciałem pierwszy raz spróbować lutować czegoś z SMD.

Całość oparłem o ten schemat, dodatkowo wyprowadziłem piny potrzebne do programowania ICSP (MCLR, VCC, GND, PGD, PGC), pominąłem natomiast diodę POWER i użyłem rezonatora 12MHz zamiast 20MHz, bo taki miałem w zapasach (pod niego też jest dostępny bootloader).

Płytkę zaprojektowałem tak, by zmieściła się na starym ścinku laminatu, który miałem pod ręką. Początkowo założyłem, że tylko PIC będzie w SMD, ale ostatecznie kondensatory odsprzęgające, rezystor 10k od pinu RESET oraz kondensator 220nF dla pinu VUSB też zamontowałem powierzchniowo. Wszystkie elementy (no, oprócz PICa) są z szuflady, elementy SMD wziąłem z wylutu, bo nigdy wcześniej nic w SMD nie robiłem.
Na płytce znajduje się również wyjście ICSP dla programatora takiego jak PICKIT2 - użyłem go tylko raz przy pierwszym wgraniu bootloadera Pinguino.
Lutowanie poszło dopuszczalnie jak na pierwszy raz - korzystałem z pasty do lutowania, najtańszej lutownicy kolbowej i cyny 0.5mm. Całość wyszła tak:


Po wykonaniu płytki i zlutowaniu całości użyłem mojego prostego klona PICKIT2 aby wgrać na PICa bootloader Pinguino poprzez ICSP. W tym przypadku wybrałem wersję na rezonator 12MHz, ale w repo Pinguino są też bootloadery dla innych wartości (20MHz, 16Mhz, itd).
Środowisko Pinguino
Płytka jest kompatybilna z środowiskiem i bootloaderem Pinguino. Programowanie odbywa się poprzez USB.
W tym projekcie użyłem wersji Pinguino V11, ponieważ ona wprowadza bibliotekę IRRemote. IRRemote nie była dostępna w poprzednich wersjach.

Pinguino CDC
Chciałbym tutaj jeszcze wspomnieć o mechanizmie CDC, którego użyłem w dalej opisanym przykładowym projekcie. CDC jest po prostu wirtualny COM port, który jest emulowany bezpośrednio na PICu. Nie wymaga żadnych układów FTDI232 jak Arduino. Pozwala na szybkie i łatwe debugowanie naszych programów.
Przykładowy program wysyłający informacje po CDC:
Code: c
Wysyłane w ten sposób dane można odebrać tak jak z wirtualnego portu szeregowego, czyli np. z pomocą RealTerm lub Putty.
Pinguino2550 przedstawione powyżej wspiera CDC bez potrzeby dodawania żadnych dodatkowych częsci (takich jak FTDI).
Użycie Pinguino w praktyce i sterowanie lampką z pomocą pilota od TV
W sumie w tym miejscu bym mógł już zakończyć opis konstrukcji, ale uznałem, że warto by było jeszcze pokazać do czego można użyć Pinguino w praktyce. Oczywiście, możliwości są wręcz nieskończone. Tak samo jak z Arduino. Ale ja uznałem, że proste i zarazem ciekawe będzie sterowanie przekaźnikiem z użyciem pilota od TV.
Do tego użyłem:
- Pinguino2550

- Gotowy moduł przekaźnik na 5V z Aliexpress

- Odbiornik IR z wylutu


Odbiornik IR pochodzi z jakiegoś starego telewizora. Przed wylutowaniem obejrzałem płytkę i określiłem, który pin to GND, VCC i sygnał. Następnie umieściłem go na małej płytce uniwersalnej i podłączyłem do Pinguino. Potem wgrałem kod programu, który odczytuje kody IR i wysyła je poprzez USB (CDC) do wirtualnego portu COM na komputerze:
Code: c
Podłączyłem Pinguino do komputera i z wirtualnego portu COM odczytałem kody przycisków:

Warto zwrócić uwagę, że ten sam przycisk wysyła dwa różne kody naprzemiennie.
Następnie napisałem program, który oczekuje wciśnięcia danego przycisku i wtedy przełącza przekaźnik:
Code: c
Oto całość w akcji:
Układ reaguje na każde naciśnięcie klawisza, nie gubi przełączeń, krótko mówiąc działa tak, jak powinien.
Podsumowanie
Z mojego Pinguino jestem bardzo zadowolony, zwłaszcza że wcześniej próbowałem zwyczajnych implementacji sterowania z pomocą pilota i kodów RC5 i ciągle napotykałem różne problemy. Biblioteka IRRemote z Pinguino wszystko rozwiązała i zadziałała od razu. Z pewnością oszczędziło mi to wiele czasu. No i przy okazji poćwiczyłem lutowanie SMD.
PS: Oczywiście dobrze wiem, ze ten sam projekt można by zrobić na gotowym Arduino Nano z chin za parę groszy, no ale nie każdy lubi składać swoje projekty z gotowych klocków

Cool? Ranking DIY