Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

raspberry-pi i wyświetlacz led

... a także barometr i podtrzymywany bateryjnie RTC.

Jak wiemy (lub zaraz się dowiemy), r-pi poza standardowymi złączami "komputerowymi" z rodziny hdmi czy USB, posiada także zestaw szpilek oznaczonych "gpio". Do tego złącza można podłączyć różne dziwne rzeczy jak sensowy, wyświetlacze i całą masą innych bzdur. Po ostatnio stworzonym włączniku urządzeń zasilanych z 230V przyszedł czas na ledowy wyświetlacz z gratisami. A dojdzie jeszcze mała klawiatura sterująca mpd + wyświetlacz LCD (128x64).

Na początek, schemat:

Oraz zmontowany układ podwieszony na żyłce:

Czas na opis. Całość rozmawia z r-pi używając szyny i2c. Za obsługę wyświetlacza oraz czujnika oświetlenia odpowiada mikrokontroler ATmega8, zegar czasu rzeczywistego (RTC) to DS1307, ciśnienie i temperaturę podaje BMP085. A wyświetlacze są pomarańczowe i mają 1,8" wielkości (co powoduje kilka problemów, no nie tyle ich wielość co ilość diód w n ich zamontowanych). r-pi na GPIO ma poziomy napięć LVTTL (3V3) i porty te nie są niczym zabezpieczone. ATmega8 może działać przy napięciu od 2V7 do 5V5. DS1307 potrzebuje 5V, BMP085 jest na 3V3. A LEDy potrzebują przynajmniej 6V. To razem daje trzy poziomy napięć, które skądś trzeba wziąć i odpowiednio skonwertować aby nie wysadziły czegoś w powietrze.

Zasilanie

Do głównej linii zasilającej weźmiemy napięcie 12V, dlaczego? Bo można je wziąć z komputera PC (z serwera, który i tak jest cały czas włączony) i jest większe niż 6V. 5V z zasilania r-pi (bo tak). A 3V3 zrobimy sobie sami. Można by je było wziąć r-pi ale r-pi tylko 50mA może dostarczyć, więc trochę mało.

Sprawa konwersji napięć, szczęśliwie DS1307 i ATmega8 mają piny z otwartym kolektorem (z czymś otwartym, nigdy nie pamiętam). W każdym razie wynikają z tego dwie rzeczy, po pierwsze linie SDA (dane), SCL (zegar) wymagają rezystora podciągającego ich napięcie. Po drugie same układy mogą stan napięcia na nich zmieniać tylko ciągnąć je w dół. Podnosić go nie mogą, a że za stan wysoki uznają napięcie >2,7V, to wystarczy że linie są podciągnięte do 3V3 i nic się nie wysadzi. Jak widać na schemacie pull-upów nie ma, bo r-pi je ma wbudowane.

Z 12V zrobić 3V3 jest bardzo prosto, wystarczy skorzystać z regulatora LV33V (IC3) oraz 2 kondensatorów (C3 i C2). Dalej wystarczy je poprowadzić do zasilania wszystkich układów poza RTC. RTC wymaga zasilania 5V wziętego ze złącza SV1.

C1 powinien być względnie mały i umieszczony blisko pinów zasilania sekcji cyfrowej kontrolera. To dla poprawy jego stabilności.

Zegar RTC

Bardzo prosty do podłączenia DS1307. Potrzebuje tylko zasilania (5V), baterii CR2032, 32,768kHz kryształu, jeśli używamy wyjścia zegarowego (używamy) to musimy je podciągnąć rezystorem do 3V3. Kryształ powinien być jak najbliżej układu, a jego obudowa powinna być połączona z masą, to w celu ochrony przed zakłóceniami. Kiedyś zrobiłem błąd i jej nie uziemiłem... dryf zegara wynosił 1h na dobę. :D

Barometr i termometr

Schemat trochę oszukuje, BMP085 nie jest w konstrukcji podłączony bezpośrednio do wszystkiego. Bezpośrednio to układ jest połączony z modułem GY-65, który zawiera kilka elementów potrzebnych aby potrzebnych do jego poprawnego działania.

Notka: z modułu trzeba wymontować dwa rezystory, które podciągają SDA i SCL do zasilania. Te rezystory są już obecne w r-pi, a co za dużo to nie zdrowo.

Czujnik oświetlenia

Czujnik oświetlenia zamontowany mamy w celu automatycznej regulacji jasności LEDów, nie chcielibyśmy aby nocą waliły po oczach jak małe słońca, albo za dnia, w słońcu nie dało sie nic odczytać. Układ jest banalnie prosty, składa się z fotorezystora (R2, RPP130), rezystora ograniczająco-podciągającego R3 i końcówki ADC kontrolera, który w praktyce mierzy spadek napięcia na fotorezystorze. ;)

Wyświetlacz

Wyświetlacz to najbardziej skomplikowany element układu, i coś przez co musiałem robić układ dwa razy. Też mi się zachciało używać dużych wyświetlaczy, pfff. Wszystkie problemy wynikają z tego, że w każdym segmencie są 3 diody LED, całość połączona szeregowo (i ma wspólna anodę, znaczy +). Jedna dioda ma spadek napięcia na poziomie 1V8. Diody są trzy więc w sumie 5,4V. Co oznacza, że napięcie musi wynosić więcej niż około 6V. Z tego wynika, że nie możemy sterować segmentami bezpośrednio z portów kontrolera, i musimy użyć tranzystorów. Oryginalnie sekcje podłączone do anody wyświetlacza wyglądały dokładnie tak jak te sterujące segmentami. Jednak po wykonaniu układu okazało się, że to nie działa jak powinno. Układ sterowania segmentami działał poprawnie. A nawet lepiej niż poprawnie, okazuje się, że można zamienić tam emiter z kolektorem i układ działa tak samo... magia.

Problemem było jednak tranzystory na anodzie, które zawsze były włączone i wyłączały się tylko przy podłączeniu do +12V, czego oczywiście nie można było zrobić, takie napięcie rozwaliłoby kontroler. Problem rozwiązało dodanie drugiego tranzystora (PNP) i 2 rezystorów.

Soft

Software po stronie r-pi jest banalnie prosty (na razie, bo to wersja do testowania wyświetlacza), i wygląda tak:

#include <cstdio> #include <ctime> #include <wiringPi.h> #include <wiringPiI2C.h> #include <unistd.h> int main() { int dev = wiringPiI2CSetup (0x4A); if (!dev) { return 1; } wiringPiI2CWriteReg8(dev, 0x02, 0x88); wiringPiI2CWriteReg8(dev, 0x03, 0x88); sleep(1); int mmp = 0; for(;;) { time_t tme = time(NULL); tm * t = localtime(&tme); int hh = (t->tm_hour % 10) | ((t->tm_hour / 10) << 4); int mm = (t->tm_min % 10) | ((t->tm_min / 10) << 4); if (mm != mmp) { wiringPiI2CWriteReg8(dev, 0x02, hh); wiringPiI2CWriteReg8(dev, 0x03, mm); mmp = mm; } sleep(1); } close(dev); return 0; }

A kod kontrolera udostępniony i opisany będzie przy następnej okazji. A na koniec galeria:

Tutaj sprawdzałem czy wymiary wyprowadzeń wyświetlacza pasują do tego co nabazgrałem na płytce drukowanej.

A tutaj widzimy badanie czemu to draństwo nie działa prawidłowo.

A tutaj płytka w nadsiarczanie sodowym, spędziła tam cale 6h, a potem się zepsuła. ;P 

linux sprzęt programowanie

Komentarze

0 nowych
Humanoid   5 #1 19.03.2013 20:58

"Sprawa konwersji napięć, szczęśliwie DS1307 i ATmega8 mają piny z otwartym kolektorem (z czymś otwartym, nigdy nie pamiętam)."

Nie bardzo wiem, o co chodzi, więc strzelam: bramka NAND?

Kaworu   12 #2 19.03.2013 21:00
Humanoid   5 #3 19.03.2013 21:05

YY.. Sorry, rypłem. Ostatnio na zajęciach tłukliśmy bramki NAND z otwartym kolektorem i tak jakoś mi w głowie utkwiło.

Ogólnie: fajna rzecz ;]

foreste   14 #4 19.03.2013 21:38

ile moduł ds1307 kosztował ?

Kaworu   12 #5 19.03.2013 21:40

Nic, próbki zamówione u Maxima, darmowe. ;)

foreste   14 #6 19.03.2013 21:44

Sam układ czy taki moduł http://www.futurlec.com/Mini_DS1307.shtml ?

Kaworu   12 #7 19.03.2013 21:46

Sam układ. Modułów jeśli nie są z kategorii "za wafla tego nie zmontuję" to nie używam. A z takiej kategorii ten Boshowy BMP085 tylko tutaj jest. :P

foreste   14 #8 19.03.2013 21:49

a ile brałbyś za wykonanie pcb taką technologią jak robisz dla siebie ?

Kaworu   12 #9 19.03.2013 21:53

Nie wiem, pewnie dużo bo to zajmuje od uja czasu (którego notorycznie mi brakuje), to tutaj trwało łączenie około 4-5h.

  #10 19.03.2013 21:55

"r-pi na GPIO ma poziomy napięć LVTTL (3V3) i porty te nie są niczym zabezpieczone."
dlatego warto się zabezpieczyć stosując np. ULN2803 wtedy pzy złym podłączeniu nic nie stanie się malince bo jeśli wyjścia sda/scl podłączasz do maliny bezpośrednio to procent ryzyka podnosisz troszku ;) cały ten projekt jesteś w stanie zamknąć w atmedze8 bez zaprzęgania do pracy maliny.
Bardzo ładnie opisany projekt, + za chęci. Nikt nam nie zabierze wiedzy którą sami zdobywamy podczas takiej zabawy ;)

Pozdro

foreste   14 #11 19.03.2013 21:57

Samo wytrawienie i wywiercenie otworów ?
Ja teraz sam mam mini komputerek na cpu atmega 644pa z sterownikiem silnikow lcd foto rezystor i poteciometr i czujnik temperatury a to programuje w arduino :).

wojtekadams   18 #12 19.03.2013 21:58

Bardzo fajny układ. Niezły pomysł z czujnikiem światła.

Autor edytował komentarz.
Kaworu   12 #13 19.03.2013 22:05

@foreste: No właśnie z akcentem na wiercenie ;P Nie wiem, serio, wydaje mi się, że taniej by wyszło zamówienie sobie obwodów prototypowych u kogoś kto ma odpowiednie maszyny. Bo tak pewnie koło 80pln, zależnie od tego jak wielkie by to miało być. Możesz sobie zobaczyć http://www.prototypy.com/kalk/kalk.php czy nie wyjdzie taniej. ;)

@wojtekadams: Acz czujnik oświetlenia to zastosowałem wcześniej na potrzeby automatycznego włącznika światła, który w kuchni montowałem. ;)

Kaworu   12 #14 20.03.2013 10:33

@Ovca(?): O, tazm zabezpieczenia to pol biedy bo i tak akurat tutaj wszystko w zasadzie działa na 3.3V, ale do sterowania wyświetlaczem ULN2803 byłby fajny :3 Oraz no, oryginalnie atmega brała dane bezpośrednio z RTC, tylko że wtedy na malinie hwclock nie działał. Poza tym malinka nie obsługuje konfiguracji multi-master, i tak oto zegar został "slave-only" ;)