jak kaktus poznawał wyświetlacz LED dwukolorowy …

jak kaktus poznawał wyświetlacz LED dwukolorowy …
Oceń opis

Artykuł zawiera opis układu.

wyświetlacz LED 7-seg dwukolorowy

wyświetlacz LED dwukolorowy

Kiedyś, swego czasu zabrałem się za obsługę wyświetlacza 7 segmentowego, był to wyświetlacz LED dwukolorowy, swoją drogą fajna rzecz. Do tego doświadczenia zakupiłem duże 1,2″ czytelne wyświetlacze AS-120118MRMG-B świecące albo na zielono albo na czerwono, ze wspólnymi anodami, dla każdej z barw osobno. To co było dla mnie istotne – są bardzo czytelne nawet z większej odległości przy dziennym intensywnym oświetleniu.
Dłubałem dłubałem i wydłubałem nawet trzeci kolor 😉 ale o tym później.

Była to jedna z pierwszych moich samodzielnych prac, która doczekała się realizacji i funkcjonuje dalej jako układ testowy na płytce stykowej … 😉 Zaczęła powstawać gdzieś około początku 2012 roku (w Eaglowym description opisałem, że projekt zaczął powstawać piątego lutego) i po troszkę wykorzystywałem każde „wolne” pięć minut na jego rozwijanie … Ówczesne zapiski kaktusa:

podwójny termometr na 2051 + DS, z wielkim dwukolorowym wyświetlaczem (4x) 7 segmentów

start 2012-02-05
2012-02-18 zakończony projekt PCB wyświetlacza, z dekoderem BCD
2012-02-21 płytka wyświetlacza poskładana, zacząłem myśleć nad programem, browar podpowiedział jak zapisać 4 bity na raz do portu (nie sekwencyjnie):
odczytać najpierw port, następnie skasować 4 bity funkcja and a potem zsumować 4 bity BCD funkcja or
działa nawet ładnie od 2012-04-04, można jeszcze rezonator 20MHz zapiąć by nie przygasało przy odczycie DS-a
od 2012-05-26, działa zegarek na pomarańczowo z kropką dziesiętną jako sekundnik trochu hardware odmienione, dodany expander I/O i RTC
od 2012-06-09, dodane przyciski do nastawiania, raczej w trakcie dodawania, uruchomione GETRC do sterowania przyciemnianiem
od 2012-08-15, obczajam PCA9530 do sterowania przyciemnianiem – sprzętowe PWM na I2C
2012-08-18, PCA9530 już rozgryziony, dziś zrobiłem soft PWM trzystopniowy i dopasowałem do odczytów z fotorezystora, automatyczne ściemnianie działa ((-;
2012-09-01, PCA nie jest potrzebny uruchomiłem soft PWM ((-; działa ładnie, niemniej przytrafia się jeszcze krótkotrwałe zablokowanie przycisków przy nastawianiu
2012-09-02 w związku z problemami na przyciskach przerabiam projekt na Mega8, dodam jeszcze sterowanie nadajnikiem IR jako budzik

 

Po około pół roku już coś konkretnie działało i można było cieszyć się funkcjonującym wynalazkiem kaktusa, o zwiększonej funkcjonalności.
Całość jest dość złożona, bo w skład układu wchodzą: µC AT89C4051, expander IO (PCF8574), zegar RTC (PCF8583), dekoder (CA3161E) BCD <-> 7-seg, no i dwa cyfrowe „termometry” (DS18B20). Reszta to kod, kilka połączeń, zasilator i płytka testowa + parę elementów dodatkowych. No i oczywiście wspomniane wcześniej wyświetlacze, które są głównym powodem napisania tego artykułu – choć nie wiem czy nie bardziej chęć pochwalenia się tą konstrukcją.
Te zapiski o AVR to ściema nigdy nie powstał model, oprócz kawałka schematu. Całość jest do ogarnięcia na rodzinie ’51. ;-D w tamtym czasie nie interesowałem się w ogóle rodziną AVR opartą o bardzo wydajną architekturę RISC. Uważałem, że do takich zastosowań to przerost formy nad treścią … Choć na dziś dzień uważam, że wygoda programowana µC w układzie i rezonator zewnętrzny jako opcja to niesamowite ułatwienie dające duży komfort przy tworzeniu i budowie układu opartego o µC AVR.

Same wyświetlacze mają osobne PCB z dekoderem,  żeby pole odczytowe trzymało się jakoś kupy. Jakby nie było wyświetlacze generują całą masę połączeń. Z każdego elementu mamy 8 segmentów (licząc punkt dziesiętny) oraz dwie anody i to wszystko zwielokrotniamy przez ilość wyświetlaczy czyli w tym przypadku x 4 ;-0 Długo zastanawiałem się czy do sterowania nie wybrać kilku ekspanderów czy innych dogodnych wynalazków oraz czy nie zrobić wyświetlania statycznego … Suma summarum chciałem spróbować się, obsłużyć te wyświetlacze multipleksowo. Przy okazji kod nie musiałby być nad wyraz obfity. Dodatkowo trzeba było zoptymalizować ilość połączeń i „uszanować” liczbę pinów GPIO µC. Dlatego wymyśliłem by zastosować dekoder BCD do sterowania wyświetlaczami. Wybrane kropki sterowane są bezpośrednio z portów, a anody za pośrednictwem ekspandera portów – akurat nazbierało się ich 8. Wybór dekodera to nie była taka prosta sprawa, nie chciałem tych „zwykłych” układów ze spapraną obsługą cyfr 6 i 9 bez segmentów A przy cyfrze 6 i D przy cyfrze 9. Udało się trafić na dość ciekawe rozwiązanie które zastosowałem. Dodatkowo układ CD3161 umie generować kilka ciekawych znaków, oraz wygasić całe pole odczytowe po odebraniu wartości 15 (nie trzeba kombinować anodami – bardzo wygodna funkcjonalność).

tabela prawdy CA3161Układ interesujący ale w cenie. Jego koszt wynosi równowartość kilku µC, i teraz właśnie zastanawiam się czy nie lepiej kupić tani µC i zrobić sobie taki dekoder samodzielnie 😉 Na tamten czas nie wpadłem na taki pomysł, czego skutkiem było wytropienie stosownego sprzedawcy i zakup takich dekoderów. Czego wcale nie żałuję. Ale myśl o swoim dekoderze jest przednia 😉 Można opracować kompleksowy dekoder sterownik, z bajerami typu sterowanie jasnością – muszę przemyśleć …

Hymmm chyba jednak – ale już po zakupie, przedyskutowaliśmy z browarem możliwość zrobienia swojego dekodera – znaczy browar proponował takie rozwiązanie.

Wracając do wyświetlaczy wspomnę jeszcze raz, że są bardzo dobrymi produktami, a w swej strukturze posiadają dla każdego segmentu po dwie diody LED łączone szeregowo. Czego skutkiem jest bardzo dobra czytelność przy małym prądzie wysterowania.

Sterowanie multipleksowe – bajka … Tak, tak piękna sprawa pod względem energooszczędności … Proszę popatrzeć na fotkę:

sterowanie multipleksowe i zużycie energii elektrycznejukład pracuje podłączony do zasilacza laboratoryjnego, gdzie mamy podgląd na napięcie i pożerany prąd. I teraz chwila prawdy – każdy segment zżera 20mA zapalonych jest 19 segmentów, co daje łączny pobierany prąd 0,38A – nieźle co? A co będzie gdy wysterujemy wszystkie? Na wyświetlaczu zasilacza widzimy pobierany prąd przez cały układ  – 41mA hahahahaa Cyfry są bardzo dobrze czytelne … Ot cała magia sterowania multipleksowego. ;-D
Dla mniej wtajemniczonych – polega ono na chwilowym zaświecaniu poszczególnych cyfr. W tym układzie co około 4ms. Najpierw zapala się cyfra pierwsza świeci 4ms, potem jest gaszona i cyfra kolejna świeci następne 4ms itd … Wykorzystując takie sterowanie możemy mieć wpływ – choć w niewielkim zakresie, na jasność wyświetlanych informacji. Ale trzeba sprytnie dobierać czasy by nie spowodować drażniącego dla konstruktora migotania.ciekawe przejście z prezentacji pierwszej na drugąFotka może paskudna wyszła, ale złapał się ciekawy moment przełączania temperatury wewnątrz na temperaturę zewnętrzną, czy tam na odwrót ;-p Kolor czerwony jeszcze nie zdążył wygasnąć, a zielony zaczyna się rozświetlać.
Swoją drogą od dłuższego czasu rozmyślam nad opracowaniem jakiejś „uniwersalnej” płytki PCB dla czterech takich dużych i dwóch małych wyświetlaczy. Powstało by pole odczytowe oparte o wyświetlacz LED dwukolorowy na sześciu cyfrach z dużymi możliwościami … Jak do tego dodam jeszcze swój sterownik wyjdzie piękna uniwersalna funkcjonalność. A mam kilka zastosowań dla takiego kolorowego rozwiązania. Trzeba to będzie poważnie przemyśleć ;-D

Przy okazji opowiem co ten wynalazek kaktusa potrafi. Jak się już niektórzy domyślają z opisu podzespołów, sprawę można uogólnić do tego, że jest to dwupunktowy termometr z zegarkiem i datą. Temperatura z pierwszego czujnika prezentowana jest na kolor czerwony przez 10 sekund. Następnie przez kolejne 10 sekund w kolorze zielonym prezentowana jest temperatura z drugiego czujnika. Oraz przez następne 10 sekund wyświetlany jest czas z zegara w kolorze … chymmm amber? Mruga wtedy punkt dziesiętny, raz na sekundę rozdzielając cyfry minut od sekund. Cała sekwencja powtarzana jest w kółko. Temperatura na obu wskaźnikach prezentowana jest z rozdzielczością 0.1, w pełnym zakresie pomiarowym sensorów tj od – 55°C do 125°C. Do obsługi zegara – nastawy i prezentacja daty, mamy do dyspozycji dwa przyciski. Podczas normalnej pracy układu, naduszenie guzika „2” uruchamia prezentację daty przez okres 10 sekund, w kolorze amber. Dla identyfikacji wyświetlanych informacji nie mruga wtedy punk dziesiętny. Aby uzyskać dużą precyzję odmierzanego czasu zdecydowałem się na zastosowanie scalonego zegara czasu rzeczywistego. Jego obsługa nie jest skomplikowana. A w swojej strukturze ma dodatkową pamięć (ulotną) do przechowywania informacji.
Nastaw zegara i daty dokonuje się przez inicjację „trybu ustawiania” przez jednoczesne naduszenie obu przycisków. Po czym przycisk pierwszy służy do zatwierdzania ustawionej wartości, a drugi do jej zwiększania. Proste i niezawodne. Aby nastawić datę, wywołujemy prezentację daty, uruchamiamy tryb nastawiania co jest potwierdzane załączeniem dodatkowego punktu dziesiętnego. Modyfikujemy wartości i zatwierdzamy. Dla ustawienia zegara postępować trzeba adekwatnie podczas prezentacji godziny. Oj napociłem się wtedy nad oprogramowaniem tych nastaw ;-D Może będę chciał jeszcze wprowadzić modyfikację w trakcie nastawiania, polegającą na mruganiu cyfry modyfikowanej. W ten sposób zapewniona będzie lepsza komunikacja z „operatorem”.
Docelowo układ ma być wyposażony w automat do przyciemniania wyświetlaczy gdy w otoczeniu jest ciemniej. A to ze względu aby nie pracował jako lampka nocna bo po co. Po zmroku wyświetlacze podczas normalnej pracy są nad wyraz jasne jak dla mnie, co wręcz może przeszkadzać.
Dla uzyskania takiej funkcjonalności uruchomiłem pomiar jasności otoczenia przy pomocy fotorezystora z wykorzystaniem komparatora analogowego µC. Działało to ładnie niemniej powodowało zaburzenia pracy podczas obsługi przycisków. Efekt jakby µC się zamulał, i to na dłuższą chwilę. Pewno po weryfikacji kodu albo modyfikacji mogło by to działać normalnie, lub i nie bo zasoby µC są skończone …
Opowiem teraz o jeszcze jednej istotnej sprawie, która przysporzyła mi problemów. Zwalczając migotanie wyświetlaczy podczas multipleksowania, w którymś momencie zacząłem zwiększać częstotliwość pracy µC wymieniając rezonatory. Obsługa komparatora funkcją GetRC którą się posługiwałem działa prawidłowo przy częstotliwości taktowania µC do 20MHz. Powyżej już nie …. Jasność świecenia w zależności od intensywności oświetlenia zewnętrznego podzieliłem na trzy stopnie. Wszystko jest realizowane programowo. Jak widać w starych zapiskach, dla ułatwienia i uproszczenia kodu rozważałem też zastosowanie kolejnego scalaka, który by sprzętowo załatwiał tą sprawe … Ale się wtedy uparłem, jak to ja i chciałem poćwiczyć 😉 więc dodatkowy układ nie znalazł jak do tej pory zastosowania.

Funkcja ta jest zawieszona przez powodowanie „konfliktów” których jak do tąd nie udało się wyeliminować…

Odczyt wartości temperatury z dwóch układów DS18B20 – jak go oprogramowałem? Jak najprościej się dało, każdy ma swój indywidualny pin z osobną magistralą 1wire. Tym sposobem nie trzeba odczytywać identyfikatorów ID układów, obsługa jest „skromniejsza” i mniej kodu potrzeba do jej zrealizowania. realizujemy ją standardową procedurą odczytu lub zapisu w BASCOM 8051 – 1wwrite / 1wread z dodatkowym parametrem w postaci nazwy pina. O funkcjonalności tej mało kto pamięta, a warto, przynajmniej w niektórych przypadkach.

Sprzętowo układ ma zostać rozbudowany o bateryjkę do zegarka lub super kondensator w celu podtrzymania pracy układu RTC, w przypadku zaniku zasilania.

Przy konstruowaniu i obmyślaniu częsli elektronicznej brałem też pod uwagę ewentualność zastosowania „dużych” µC rodziny ’51 było by wtedy mnóstwo pinów do zagospodarowania. Układ mógłby być uproszczony pewno o ekspander i dekoder, ale … „duże” µC nie posiadają komparatora analogowego w swojej strukturze! A szkoda.

Prezentacja działania „wczesnego” układu modelowego. Na filmie przypadkowo utrwaliły się uroki życia w domowym zaciszu … 😉

Pewnego razu podczas gdy była przerwa w dostawach prądu do domku miała miejsce paskudna heca … Wchodzę do swojego pokoiku patrzę, a tu zasilacz pracuje a układ nie. No to odruchowo klik na guzik z pamięcią w zasilaczu aby zobaczyć czy działa .. a potem szybko guzik ON … Szkoda tylko, że w tym programie nastawione było 15V DC ;-/ Momentalnie zadziałała funkcja zabezpieczenia nadprądowego i zasilacz odłączył napięcie …. Sobie myślę no to pięknie … i zaczynam szybko rachować koszty podzespołów … Ustawiłem też prawidłowe wartości zasilania i uruchomiłem zasilanie ponownie coś tam pomrygało i … Trochę się zagotowałem, wyglądało, że wyświetlacze są sprawne – przynajmniej częściowo. Sprawa zakończyła się na wymianie expandera i RTC ufff – chyba najtańsze scalaki w układzie ;-p

Takim właśnie sposobem opanowałem wyświetlacz LED dwukolorowy. Dla bajeru można porobić jakieś dwukolorowe animacje bo jest jeszcze mnóstwo miejsca na kod programu …

karta wyświetlacza TOS-12101BMRMG-N_karta.jpg (225 pobrań)
nota katalogowa TOS-12101AG-B.pdf (229 pobrań)
nota katalogowa TOS-12101BS-B.pdf (231 pobrań)

nota IC CA3161_bcd-7seg_A.pdf (248 pobrań)

Share Button
Tagi , , , , , , , , .Dodaj do zakładek Link.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

5 × four =

This site uses Akismet to reduce spam. Learn how your comment data is processed.