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

Mini barometr z wyświetlaczem LCD i akumulatorkiem Li-pol na ATmega168PA

hv222 12 Feb 2013 21:29 20997 16
Nazwa.pl
  • Mini barometr z wyświetlaczem LCD i akumulatorkiem Li-pol na ATmega168PA
    Witam,
    Korzystając z ostatnich wolnych dni przed studiami chciałbym zaprezentować moją ostatnią konstrukcję. Jest to mały przenośny barometr. Konstrukcja powstała na potrzeby osoby wrażliwej na zmiany ciśnienia oraz spełnia jej wymagania tzn. mały rozmiar( 20x40x9mm) oraz co się z tym wiąże - mobilność. W krótkim czasie planuję rozbudować urządzenie o pomiar temperatury oraz dodać funkcję pokazującą tendencję ciśnienia (wahania, spadek, wzrost).

    Tak małe wymiary urządzenia udało mi się osiągnąć używając graficznego wyświetlacza z MP3 Creative muvo. Do tego wyświetlacza nie znalazłem żadnych informacji. Pinout wstępnie wypatrzyłem po ścieżkach na PCB odtwarzacza, a potem dokładniej zbadałem analizatorem stanów logicznych. Dzięki temu zabiegowi udało mi się uruchomić ten wyświetlacz oraz napisać program do jego obsługi. W konstrukcji wykorzystałem również pochodzącą z odtwarzacza folię elektroiluminescencyjną do podświetlania LCD oraz układ zasilający folię D355B i elementy powiązane z wyświetlaczem i jego podświetleniem. Do zalet tego wyświetlacza oprócz małych rozmiarów należy dobra widoczność w słońcu oraz przyjazne niebieskie podświetlenie. Jako czujnik ciśnienia zastosowałem sensor Freescale MLP3115A2 pracujący na magistrali I2C. Przy wyborze czujnika kierowałem się ceną (ok.5zł za szt. przy zamówieniu jako sample). Ponieważ maksymalne napięcie dla czujnika to 3.6V, a w pełni naładowany akumulatorek ma napięcie 4.2V zastosowałem stabilizator napięcia 3.3V TC1015 w obudowie SOT23-5. Zasila on wszystkie podzespoły oprócz przetwornicy zasilającej podświetlenie LCD i układu MCP73833. Przetwornica oparta na D355B zasilana jest wprost z akumulatorka, a MCP73833 pełni rolę ładowarki tego akumulatorka. Ładowanie odbywa się za pomocą zewnętrznej ładowarki do telefonów z napięciem wyjściowym 5V i ze złączem mikroUSB. Sam akumulatorek to jedna komora o pojemności 230mAh z układem zabezpieczającym od przeładowania, nadmiernego rozładowania oraz zbyt dużego prądu ładowania i rozładowania. Cały pakiet pochodzi z demontażu jakiegoś odtwarzacza mp3/4. Jako mikrokontroler zastosowałem AVR ATmega168PA w obudowie MLF. Układ ten zajmuje się odczytem wartości ciśnienia z MPL3115A2 i wyświetlaniem jej oraz pomiarem napięcia baterii, kontrolą podświetlenia i przycisku. Oprogramowanie zostało napisane w języku C w środowisku AVR Studio 5. Obecny kod da się zmieścić w mikrokontrolerze Atmega8 (a,l) lub w atmega88. Zastosowałem jednak uC z większą pamięcią flash, aby móc w przyszłości zrealizować dodatkowe funkcje opisane we wstępie. Obsługa LCD jest dość specyficzna - podzielony jest on na 4 bloki (8x96pix) oraz cały blok jest wysyłany jako jedna paczka danych. Sterowanie tego LCD realizuję przez stworzenie tablicy 4 wierszowej i 96kolumnowej w pamięci uC. Sama ta tablica zajmuje 384 z 1024 bajtów z dostępnej pamięci SRAM. Aby ograniczyć użycie pamięci SRAM, czcionki i grafiki przechowuję w pamięci EEPROM. Takie rozwiązanie nie spowalnia wyświetlania. Nie jest też widoczne migotanie lub inne niedogodności przy wyświetlaniu, ponieważ dane do wyświetlenia są buforowane, a następnie wysyłane po SPI dużymi blokami. Wyświetlacz utrzymuje przesłane dane w pamięci swojego kontrolera. Pomiar ciśnienia jest stabilny, więc nie jest potrzebne częste odświeżanie. Odświeżanie jest realizowane co ok. 250ms. Pomiar ciśnienia jest bardzo prosty i sprowadza się od odczytania 3bajtów z czujnika, potem przesunięcie bitowe i podział przez 100 aby uzyskać wynik w hPa. Pomiar napięcia baterii jest wykonywany przez wewnętrzny przetwornik ADC. Konieczne było zastosowanie dzielnika, ponieważ Vref wew. dla ATmegi168PA to 1.1V. Wykrywanie ładowarki jest sygnalizowane zarówno przez diody LED połączone z układem MCP73833, który jest niezależny od mikrokontrolera jak i przez ikonę na LCD. Ikona na LCD jest wyzwalana przerwaniem. Podobnie przerwaniem zrealizowane jest włączanie barometru. Po krótkim wciśnięciu barometr się włączy, ale jeśli przycisk przytrzymamy dłużej to włączy się też podświetlenie. Barometr podczas spoczynku jest usypiany. Po wybudzeniu spowodowanym przerwaniem następuje włączenia wyświetlacza i czujnika ciśnienia. Po zakończeniu działania wyświetlacz i czujnik ciśnienia są przechodzą w tryb zmniejszonego poboru prądu. Również układy wewnętrzne uC zostają wyłączone (TWI, SPI). W celu zmniejszenia poboru prądu uC pracuje na wewnętrznym oscylatorze 1MHz (8MHz z włączonym dzielnikiem). Pobór prądu w stanie czuwania wynosi 0.8mA, podczas dokonywania pomiaru i wyświetlaniu 5mA, a z włączonym podświetleniem 18mA. Czas wyświetlania wyniku to ok. 12sec. w tym czasie pomiar jest aktualizowany co ok. 750ms. Czas przejścia z trybu czuwania do prezentacji pomiaru to ok. 500ms, jest on spowodowany czasem przełączenia się czujnika ciśnienia i czasem dokonania pierwszego pomiaru. Skrócenie tego czasu powoduje chwilowe pojawienie się śmieci na LCD w miejscu przeznaczonym na prezentację pomiaru. Wyświetlacz w pewnym stopniu można spersonalizować obracając wyświetlane dane o 180°. Może to być ułatwienie dla osób leworęcznych. Można też regulować kontrast wyświetlacza, ale ze względu na małe rozmiary urządzenia takie zmiany trzeba dokonywać na etapie kompilacji programu. Jeszcze nie dysponuję informacją na jak długo starcza w pełni naładowany akumulator.
    Mini barometr z wyświetlaczem LCD i akumulatorkiem Li-pol na ATmega168PA
    Płytka dwustronna została zaprojektowana w programie Eagle według powyższego schematu i wykonana samodzielnie w domu metodą fotochemiczną. Większość elementów biernych ma rozmiar 0603 i 0402. Ze względu na małe elementy płytka była częściowo lutowana z pomocą pasty lutowniczej do smd. Czujnik ciśnienia i uC były wlutowane hot-airem. LCD jak i podświetlenie jest wrażliwe na temperaturę, to też zostały wlutowane w ostatniej kolejności.

    Koszt wykonania tej konstrukcji to ok. 39zł
    {
    koszty wykonania PCB - 15zł
    złącze uUSB - 3zł
    uSwitch - 2zł
    ATmega168PA - 15zł
    MPL3115A2 - 5zł
    drobnica - 4zł
    reszta części z demontażu lub własnych zapasów - 0zł
    }

    Obecna wersja nie posiada obudowy. Obudowa będzie w kolejnej wersji. Aktualnie na LCD widoczny jest zalążek softu do drugiej wersji - informacja o stanie ciśnienia. Tymczasowo jest ona wpisana na stałe i nie powinna być brana pod uwagę przy odczytywaniu wartości ciśnienia. Funkcja ta wymaga dokładnego zastanowienia się, gdyż w przypadku urządzenia przenośnego należy zwrócić uwagę na znaczną zmianę ciśnienia wraz z wysokością, która można zakłócić pomiar. Również samą funkcję korygującą należy zrobić tak aby błąd przy korekcji nie nasiał się z czasem i aby zachować minimalny pobór prądu w stanie spoczynku. Sam czujnik ciśnienia może dostarczać danych w postaci ciśnienia jak i wysokości,co może być bardzo przydatne. Do kolejnej wersji będzie poprawione PCB - usunięte błędy, dodane miejsce pod elementy, które zapomniałem dodać na etapie projektowania,poprawione rozmieszczenie elementów oraz dodanie padów kontrolnych i ulepszone mocowanie akumulatorka. Rozważam też prezentację stanu ciśnienia metodą obrazkową (strzałki).

    Jestem otwarty na konstruktywną krytykę. Jak by ktoś dysponował datasheet wyświetlacza lub kontrolera z wyświetlacza to byłbym wdzięczny za namiary. Obecnie bazuję tylko na "funkcjach" podpatrzonych analizatorem logicznym.

    Dziękuję za uwagę i pozdrawiam

    Michał

    Mini barometr z wyświetlaczem LCD i akumulatorkiem Li-pol na ATmega168PA Mini barometr z wyświetlaczem LCD i akumulatorkiem Li-pol na ATmega168PA Mini barometr z wyświetlaczem LCD i akumulatorkiem Li-pol na ATmega168PA Mini barometr z wyświetlaczem LCD i akumulatorkiem Li-pol na ATmega168PA

    Cool? Ranking DIY
    About Author
    hv222
    Level 16  
    Offline 
    hv222 wrote 191 posts with rating 113, helped 10 times. Live in city Białystok. Been with us since 2008 year.
  • Nazwa.pl
  • #2
    c4r0
    Level 36  
    Bardzo ładna płytka. Gratuluję rozgryzienia wyświetlacza. Luty zdecydowanie do poprawy - należy użyć więcej topnika przy lutowaniu a potem go zmyć (specjalnym sprayem lub np. izopropanolem).
  • #3
    zormaj
    Level 11  
    Jeśli możesz, napisz jak wykonałeś soldermaske? Bo płytka wygląda naprawdę profesjonalnie.
  • #4
    byrrt
    Level 21  
    Wyświetlacz wygląda super dzięki podświetlaniu - naprawdę podziwiam chęć rozpracowywania transmisji - mnie by to przerosło - wolałbym kupić gdzieś nowy ;) Dobrą jak nie lepszą alternatywą są wyświetlacze OLED. Na zagranicznym eBayu można kupić moduły oled 128x64 w rozmiarze 0,96 cala (czyli naprawdę b. duża gęstość pixeli), płaski, niesamowicie kontrastowy i za ok 20-30zł (licząc przesyłkę z chin jednej sztuki). Tak więc wg. mnie rewelacja i mamy pełną dokumentację do sterownika - często nawet biblioteki.

    Jak programujesz procka?
  • Nazwa.pl
  • #5
    H3nry
    Level 32  
    hv222 wrote:

    Jako czujnik ciśnienia zastosowałem sensor Freescale MLP3115A2 pracujący na magistrali I2C. Przy wyborze czujnika kierowałem się ceną (ok.5zł za szt. przy zamówieniu jako sample)

    Czy może kolega wyjaśnić jak jest naliczana opłata za sample .
    Luty są wykonane stopem Pb free?
    Chylę czoła za rozpracowanie komunikacji z LCD .
  • #6
    hv222
    Level 16  
    Zgadzam się z tym, że luty są do poprawy. Nie przyłożyłem się specjalnie do tego, gdyż w połowie montażu podjąłem decyzję o wykonaniu drugiego PCB i chciałem dokończyć to aby wykryć kolejne niedociągnięcia i poprawić je w nowej wersji PCB.

    Przed wlutowaniem czujnika delikatnie pocynowałem pady na PCB. Następnie ułożyłem czujnik padami do góry i nałożyłem na każdy pad odrobinę pasty lutowniczej i 3 kulki do BGA rozmiaru 0.25mm (takie miałem), nie używałem dodatkowego topnika. Jak już na każdym padzie były pasta i kulki to delikatnie grzałem całość hot-airem aż utworzą się jednolite większe kulki (dalej czujnik w pozycji padami do góry). Kolejnym krokiem było nałożenie topnika w żelu na PCB i precyzyjne ułożenie czujnika, a następnie grzanie hot-arem. Jak już czujnik zaczął "pływać" odstawiłem hot-air do wystygnięcia. Z lutowaniem czujnika należy zachować ostrożność aby nie uszkodzić wewnętrznego sensora.

    Soldermaska to dwuskładnikowa fotoobrazowa farba ELPEMER PETERS o oznaczeniu SD 2467 SG-DG. Ta farba jest przeznaczona do sitodruku, jednak ja opracowałem inną metodę jej nanoszenia. Przygotowuję płytkę PCB powiększoną o ok. 1cm z każdego boku. (na tym obrzeżu nie może być miedzi). Później na wyczyszczoną powierzchnię płytki po bokach przyklejam taśmę izolacyjną tak aby nie nachodziła na siebie (tak jak na zdjęciu).
    Mini barometr z wyświetlaczem LCD i akumulatorkiem Li-pol na ATmega168PA
    Następnie po wymieszaniu soldermaski nakładam ją na jeden z brzegów płytki, a następnie przeciągam metalowym wałkiem pozyskanym z prowadnicy karetki ze starej drukarki. Taśma izolacyjna tworzy wystarczająco duży ostęp od płytki, aby soldermaska dobrze pokryła płytkę. Metoda ta nie jest doskonałą, ale ale za kolejnym przeciągnięciem wałka można uzyskać bardzo dobre efekty i w miarę równą powłokę jak na warunki domowe. Kolejnym etapem jest podsuszanie farby jeszcze gdy jest w ramie z taśmy, potem naświetlanie, wywoływanie i powtórzenie czynności na drugiej warstwie. Gdy zostanie wywołana druga warstwa całość należy utwardzić termicznie. Wadą tej metody jest to, że farba przed utwardzeniem wstępnym potrafi łapać drobiny kurzu. Tam gdzie siądzie kurz tworzy się grubsza warstwa. Gdy coś takiego się stanie( a staje się zawsze) to czekam do końcowego utwardzania i w tedy żyletką lub innym ostrym narzędziem wyrównuję powierzchnię płytki. Kurz osiada tylko na powierzchni, więc nie uszkadza warstwy soldermaski która jest pod nim. Próbowałem zdejmować drobiny kurzu przed utwardzaniem wstępnym, ale próba zdjęcia kończy się uszkodzeniem powłoki i koniecznością zmycia jej i i nałożenia jej ponownie. Ta soldermaska spełnia moje oczekiwania zarówno pod względem wytrzymałości płytki na czynniki mechaniczne oraz termiczne (grot lutownicy) jak i estetyki płytki.


    Luty wykonałem pastą lutowniczą z dodatkiem ołowiu (była tańsza), kulki BGA też ołowiowe. Większe elementy lutowałem już cyną bezołowiową.

    Freescale dość nietypowo nalicza opłatę za sample. Za każdy zamówiony typ elementu o tym samym symbolu jest liczone $5 (niezależnie czy to jest 1 czy 5 sztuk) + Vat. Całość wychodzi ok. $6.15. Płatności trzeba dokonać z góry (np. paypal lub kartą). Później trzeba czekać na zatwierdzenie zamówienia. Nie wiem co się dzieje z opłatą jeśli zamówienie nie zostanie zatwierdzone. Potem to już tylko czeka się na paczkę. Sama wysyłka zajmuje niecały tydzień, jednak ja musiałem czekać ponad dwa miesiące aż czujnik pojawi się w magazynie Freescale. Sample przyszły kurierem FeedEx. Zamówienie złożyłem przez stronę Freescale podając adres emailowy na Gmailu.

    uC programuję za pomocą STK500 dolutowanego przewodami do złącza LCD (LCD też pracuje na SPI) i do rezystora pull-up przy resecie.

    Wyświetlacz OLED może być warty uwagi i przetestowania. Jednak, gdy już opanowałem komunikację obecnego LCD z uC zrezygnowałem z użycia OLED. Dzięki za informacje. Może wiesz, jaka jest widoczność przy dużym nasłonecznieniu oraz jaki jest pobór prądu przy tym OLED? Pomyślę nad tym wyświetlaczem przy kolejnej wersji.
  • #9
    slawek55
    Level 23  
    A skąd zaczerpnąłeś materiały do tego klona? Jest to w ogóle dostępne w sieci?
  • #11
    Svavo
    Level 23  
    Z Twojego opisu wynika, że LCD może posiadać sterownik zgodny z SPLC501C. Mam podobny wyświetlacz o rozdzielczości 132x64 (są też modele 128x64 z tym samym sterownikiem), który ma pamięć obrazu podzieloną na strony (lub jak piszesz "bloki") 8x132px.
    Pozdro.
  • #12
    encore
    Level 19  
    Jak sprawa wyglada z dokladnoscia wskazan czujnika cisnienia? Z tego co pamietam to ma on dokladnosc +/- 10kPa , a wiec delikatnie mowiac rozczarowujaca.
  • #13
    hv222
    Level 16  
    Ten czujnik ma +/-4hPa dokładności bezwzględnej. To nie jest MPL115. Reszta danych w datasheet. Po lutowaniu może być potrzeba kalibracji czujnika.

    Dodam jeszcze informację o zamawianiu sampli z Freescale. Jak poinformował mnie piotreks-89 płatność przez paypal już nie jest dostępna.
  • #14
    adrianagent
    Level 12  
    Gratuluję pomysłu!
    Może posłużyć za wzór do zrobienia podobnego urządzenia mierzącego ciśnienie doładowania w aucie :)
  • #15
    Maciej Strojewski
    Level 11  
    Mam w planach prace nad pomiarem cisnienia atmosferycznego.
    Ciekawi mnie natomiast jak rozwiązałeś temat interpretacji wyników czyli prognozowania tenedencji. Jaki algorytm zastosowałeś?
  • #16
    hv222
    Level 16  
    hv222 wrote:
    Aktualnie na LCD widoczny jest zalążek softu do drugiej wersji - informacja o stanie ciśnienia. Tymczasowo jest ona wpisana na stałe i nie powinna być brana pod uwagę przy odczytywaniu wartości ciśnienia. Funkcja ta wymaga dokładnego zastanowienia się, gdyż w przypadku urządzenia przenośnego należy zwrócić uwagę na znaczną zmianę ciśnienia wraz z wysokością, która można zakłócić pomiar.


    Jeżeli twoje urządzenie ma być stacjonarne to najprościej będzie porównywać wyniki z zapisanych wcześniej pomiarów. Do zapisywania można użyć np. EEPROM.

    Jeżeli chodzi mobilne rozwiązanie to sam szukam algorytmu.
  • #17
    skowerr
    Level 13  
    Witam,
    Znalazłem u siebie starą nie działąjącą mp3 muvo. Czy mógłbym poprosić o bibliotekę/kod do obsługi tego wyświetlacza?