REKLAMA

2550smd4.zip

Płytka developerska PIC Pinguino2550 i sterowanie lampką za pomocą pilota

http://obrazki.elektroda.pl/3617676300_1469095319_thumb.jpg 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. http://obrazki.elektroda.pl/2241166300_1468445854_thumb.jpg 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. http://obrazki.elektroda.pl/7396255400_1468445937_thumb.jpg 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). http://obrazki.elektroda.pl/5155248500_1469700576_thumb.jpg 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: http://obrazki.elektroda.pl/3617676300_1469095319_thumb.jpg http://obrazki.elektroda.pl/3109401700_1469095272_thumb.jpg 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. http://obrazki.elektroda.pl/6800461000_1469099434_thumb.jpg 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: // Output on Linux : sudo cat /dev/ttyACM0 // Outout on Windows : float f=0; void setup() { pinMode(USERLED, OUTPUT); } void loop() { CDC.printf("float=%.1f \r\n", f); // 1 digit after decimal comma f = f + 0.1; toggle(USERLED); delay(500); } 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 http://obrazki.elektroda.pl/3617676300_1469095319_thumb.jpg - Gotowy moduł przekaźnik na 5V z Aliexpress http://obrazki.elektroda.pl/7563048600_1469095696_thumb.jpg - Odbiornik IR z wylutu http://obrazki.elektroda.pl/5084703900_1469095858_thumb.jpg http://obrazki.elektroda.pl/7847048200_1469095860_thumb.jpg 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: /* * IRremote: IRrecvDemo - demonstrates receiving IR codes with IRrecv * An IR detector/demodulator must be connected to the input RECV_PIN. * Version 0.1 July, 2009 * Copyright 2009 Ken Shirriff * http://arcfn.com */ int RECV_PIN = 7; // can be any digital pin, on PIC18F2550 it's PGD pin decode_results results; void setup() { IRremote.enableIRIn(RECV_PIN); // Start the receiver IRremote.blink(true); } void loop() { if (IRremote.decode(&results)) { CDC.printNumber(results.value, HEX); IRremote.resume(); // Receive the next value } } Podłączyłem Pinguino do komputera i z wirtualnego portu COM odczytałem kody przycisków: http://obrazki.elektroda.pl/3471789200_1469098547_thumb.jpg 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: int RECV_PIN = 7; // can be any digital pin, on PIC18F2550 it's PGD pin int RELAY_PIN = 6; // can be any digital pin, on PIC18F2550 it's PGC pin decode_results results; int state; void setup() { IRremote.enableIRIn(RECV_PIN); // Start the receiver IRremote.blink(true); pinMode(RELAY_PIN, OUTPUT); state = 0; digitalWrite(RELAY_PIN,state) ; } void loop() { if (IRremote.decode(&results)) { // handle both toggle signals from button Channel 1 if(results.value == 0x1CCC2371 || results.value == 0xE1730F1D) { state = !state; digitalWrite(RELAY_PIN,state) ; delay(500); } IRremote.resume(); // Receive the next value } } Oto całość w akcji: https://filmy.elektroda.pl/3_1469095529.mp4 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 :)


Pobierz plik - link do postu
  • 2550smd4.zip
    • 2550smd4.sch
    • 2550smd4.pdf
    • 2550smd4.brd