PIC16F – obsługa LCD z Nokia 3310

Zabawiałem się w ostatnich dniach wyświetlaczem LCD z poczciwej Nokii 3310. LCD nie jest rewelacyjny, ale ma te swoje 84×48 pikseli monochromatycznego obrazu. W trybie tekstowym, z małą czcionką, wystarcza to na 6 rzędów po 14 znaków.

Szukając w sieci biblioteki do jego obsługi, przejrzałem zyliony projektów typu „LCD-on-LPT” i nieco mniej, bo już tylko miliony 😉 projektów na wszelkie AVRki. PICe jakoś słabo były reprezentowane, a już mikroC najsłabiej. Dlatego skompilowałem z wszystkich dostępnych mi materiałów działającą bibliotekę. Z powodzeniem uruchomiłem ją na 2kB procesorze 16F628A (uwaga: LCD pracuje pod napięciem 3.3V!!) Na chwilę obecną, biblioteka pozwala na wyświetlanie napisów w dwóch różnych rozmiarach – przy użyciu tylko jednego zdefiniowanego kroju pisma – skalowanie następuje w locie, podczas wyświetlania. W planach dodanie grafiki. Biblioteka dostępna jest jako LGPL, podczas jej opracowywania, jak już wspominałem, wykorzystywałem różne źródła (no i własną pracę). Największymi dawcami idei i pomysłów byli Louis Frigon oraz Lieven Hollevoet. Załączam również przykładowy projekt, wykorzystujący ów LCD i bibliotekę – taki mały zegarko-termometr Dzięki niemu można dowiedzieć się, jak podłączyć wyświetlacz i jak skorzystać z biblioteki. Zwracam tylko uwagę na konieczność ustawienia swoich pinów LCD w pliku N3310LCD.h.

 

Bibliotekę oraz przykładowy projekt znaleźć można na forum elektrody. A następny LCD w kolejce do rozpracowania jest przyjemny LCD kolorowy, o wymiarach 128×128 pikseli – dostępny na allegro za ok. 20zł 🙂

Facebooktwittergoogle_plusredditpinterestlinkedinmail
twitterlinkedin

Najprostszy programator PIC16F i pokrewnych

Podczas poszukiwania kilku elementów w mojej przepastnej szafie, odnalazłem dwa zagubione egzemplarze mikrokontrolera PIC 16F628A firmy Microchip… Dodając do tego, że od dawna myślałem o powrocie do mikrokontrolerów, a także że od kilku lat dzień w dzień widuję się z kolegą, który wciąż mnie namawia do tego (a sam jest specem) – no cóż, te dwie odnalezione kostki dopełniły dzieła i… wróciłem do zajmowania się nimi 🙂 W dzisiejszych czasach królują dwie rodziny małych mikrokontrolerów – AVRy od Atmela i PICe od Microchipa. Zwłaszcza wśród nowo zaczynających (m.in. dzięki „Oślej Łączce” z czasopism AVT) popularne są AVR. Ja jednak PICe już znam – to po pierwsze, a po drugie, mimo wszystko, PICe uważam za lepszy wybór (ale wojen żadnych nie mam zamiaru toczyć z nikim w tym temacie).
Zabawa rozpoczęła się oczywiście od budowy programatora. Z czasem i tak zakupię duży programator na USB, z możliwością debugowania, ale na razie… wychodząc z założenia, że to tylko chwilowe rozwiązanie, należało znaleźć coś, co jest najprostsze i najtańsze w produkcji. Wybór padł na JDM, ale jak się szybko okazało, większość dostępnych schematów odnosi się do starszych przedstawicieli 16F. Dlatego Dostosowałem schemat do warunków programowania 16F628A, przy okazji upraszczając schemat JDM (i tak już prosty). Po trzech dniach walk i prób na breadboardzie (płytce stykowej) osiągnąłem działający egzemplarz. Kilka dni intensywnego działania – programuje 100 na 100 🙂 Dlatego też już poszedł na płytkę drukowaną. Przy okazji, wyposażyłem go w złącze ICSP, które sppisuje się świetnie (o programowaniu ICSP powiem potem kilka słów jeszcze). Schemat? Schemat jest prosty jak… drut 😉 Wygląda bardziej skomplikowanie, niż to jest w rzeczywistości – a to za sprawą wyprowadzenia dodatkowego złącza ICSP.
Płytki PCB nawet nie projektowałem, w pół godziny polutujecie wszystko sobie na dowolnej płytce uniwersalnej. Jedyny problem to gniazdo RS232, w którym trzeba będzie nieco ponaginać piny… osobiście piny 6 oraz 9 usunąłem, natomiast piny 7 i 8 lekko nagiąłem – w ten sposób całe gniazdo ładnie osiadło w rastrze 2,54 mm. Jako gniazdo pod procesor dałem podstawkę DIL18, ale jeżeli znajdziecie gniazdo ZIF – polecam. Do programowania ICSP postawiłem sobie gniazdo 2×5 pinów, takie, jakie widać na płytach komputerowych (taśma 10 żył). Dlaczego takie? Po pierwsze, taśmę 10 pin łatwo dostać 😉 a po drugie, po podłączeniu całego jednego rzędu w tym gnieździe do masy, na taśmie co druga żyła to masa właśnie. Ma to niebagatelne znaczenie, gdyż okazuje się, iż największym problemem w taśmach do ICSP jest linia CLOCK. Dlatego więc: taśmę robimy tylko tak długą, jak jest to potrzebne, linię CLOCK odseparować, o ile to możliwe, dodatkowo linie przedzielone masą: świetna sprawa. Warto zrobić sobie dwie taśmy: jedną zakończoną wtyczką z obu stron, drugą z wtyczką i po drugiej stronie rozdzielonymi i odizolowanymi kabelkami, dodatkowo pobielonymi cyną. Po co? Do włożenia w breadboard, żeby podczas prototypowania układu nie przekładać czipa w te i we wte co dwie minuty.
Na koniec kilka słów o dostosowywaniu układu docelowego do przyszłego programowania poprzez ICSP. Dwie najważniejsze sprawy, to bezwzględne odłączenie oryginalnego zasilania układu podczas programowania (a to z kolei pociąga za sobą, aby linię Vdd z gniazda podłączyć bezpośrednio do procesora, a nie do wspólnego punktu zasilania) oraz separacja linii Vpp – na przykład diodą. Takie rozwiązania wyklucza co prawda ten port z bycia ewentualnym wyjściem, ale… pamiętaj, że podczas programowania Vpp wynosi do 13V! Jedynym innym wyjściem jest zastosowanie wyłącznika mechanicznego. Z pozostałych problemów, warto jest nie używać, o ile to nie jest koniecznie, linii CLOCK i DATA, gdyż podczas programowania podpięte układy mogą wprowadzić zakłócenia uniemożliwiające poprawne zaprogramowanie układu.
To tyle, życzę miłego programowania 😉
Facebooktwittergoogle_plusredditpinterestlinkedinmail
twitterlinkedin