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

Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika

Sam Sung 06 Mar 2022 20:36 3882 17
  • Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika
    Od dłuższego czasu zalegał mi w szufladzie ogromny wyświetlacz ze starego zepsutego radiobudzika.
    Radiobudzik ten był prawdopodobnie zrobiony na układzie LM8560.
    Wyświetlacz ma wyprowadzenia zgodne z Lite-ON LTC-637D1P, ale ma większe cyfry i w każdym segmencie ma 2 zielone LED-y.
    Typowe wyświetlacze multipleksowane spotykane w sprzedaży mają jedną katodę albo anodę wspólną dla 8 segmentów i tyle wspólnych katod/anod, ile jest cyfr. Każda cyfra ma tak samo podłączone segmenty.
    Tutaj jest inaczej. Są tylko dwie wspólne katody i 14 anod obsługujących segmenty cyfr.

    Budowa wewnętrzna wyświetlacza
    Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika
    Liczby są numerami wyprowadzeń anod, kolor czerwony oznacza wspólną katodę 1 (wyprowadzenia 1 i 29), a zielony - wspólną katodę 2 (wyprowadzenia 2 i 26).
    (Oprócz elementów pokazanych powyżej są jeszcze 2 kropki po lewej (PM i AM) oraz jedna po prawej na dole (ALARM), ale nimi się nie będę zajmować.)
    Dwukropek może sobie świecić stale - nie trzeba nim sterować.
    Wychodzi 2+14=16 linii sterujących - za dużo jak na mikrokontroler AT89C2051, który ma 15 linii GPIO. Zresztą, podobnie byłoby w przypadku np. ATtiny2313 - jeśli chcemy mieć zewnętrzny kwarc, to też jest do dyspozycji 15 linii.
    Jedną linię można banalnie łatwo zaoszczędzić - wystarczy połączyć ze sobą sterowanie segmentami a,d,e,g pierwszej cyfry, czyli wyprowadzeniami 7 i 8; nadal da się wyświetlać cyfry 1 i 2 na pierwszej pozycji (na której i tak brakuje segmentu f, czyli górnego lewego).
    Jeszcze jedną linię można zaoszczędzić, dając na wyprowadzenie 6 iloczyn sygnałów na 7 (już połączone z 8) i 9 - przy pomocy dwóch diód 1N4148. Na pozycji pierwszej można będzie nie wyświelić niczego, wyświetlić 1 albo 2.
    Czyli mamy 2+12 linii sterujących wyświetlaczem. Pozostaje jedna wolna linia, przy pomocy której będzie można nastawiać zegar.

    Schemat układu
    zegar.pdf Download (39.54 kB)
    Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika
    Sterowanie wspólnymi katodami odbywa się przez tranzystory BC337, których bazy są podciągane opornikami 1k do +5V, a mikrokontroler może je zatkać wystawiając 0 na odpowiedni port.
    Anody zaś są sterowane tranzystorami BC557, których bazy - poprzez rezystory 4,7k - załącza 0 wystawione przez mikrokontroler na odpowiedni port.
    Dla zachowania jednakowej jasności segmentów użyłem 14, a nie 12 tranzystorów BC557 - opisane wyżej oszczędności w połączeniach dotyczą tylko portów mikrokontrolera.
    Przy 2 zielonych diodach na segment i zasilaniu 5V, prąd płynący przez segmenty i tak jest mniejszy niż mógłby być, więc nie dawałem już żadnych oporników.

    Prototyp - pająk
    Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika
    Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika

    Nastawianie zegara odbywa się przez UART - zegar podsłuchuje meldunki lecące magistralą domu inteligentnego (9600,8,N,1) i się wg nich nastawia.
    Quote:
    \rDD;HH:MM:SS;...

    Przełącznikiem można odpiąć RXD (P3.0) od magistrali i podpiąć ten port do masy, co jest sygnałem dla programu, żeby zgasić wyświetlacz (zegar idzie sobie dalej).
    Pobór prądu:
    - przy 5 V: wszystkie segmenty: 310 mA, 0:00: 280 mA
    - przy 5,88 V: wszystkie segmenty: 400 mA, 0:00: 373 mA

    Program
    zegar.asm Download (12.62 kB) zegar.hex Download (1.29 kB)Points: 2 for user
    Multipleksowanie odbywa się w przerwaniu zegarowym, które jest wywoływane co 3600 cykli, czyli 11059200/12/3600 = 256 razy na sekundę.
    W pętli głównej program czeka na kolejne znaki z magistrali, żeby się nastawić, oraz aktualizuje zegar i "framebuffer", jeśli przerwanie ustawi flagę, że minęła sekunda.
    Multipleksowanie wyświetlacza nie jest w żaden sposób zakłócone innymi operacjami.
    Podczas wyświetlania danej godziny segmenty świecą jednakowo i nic nie miga, ale przy zmianie stanu zegara, w zależności od liczby zapalonych segmentów, jasność trochę się zmienia.
    To chyba skutek za małego napięcia zasilania do tak dużego wyświetlacza (?)
    Zaraz po włączeniu, kiedy mikrokontroler jest w stanie resetu, na wszystkich liniach są jedynki, co oznacza wyłączone anody, ale włączone wspólne katody. Świeci wtedy podłączony na stałe przez opornik 220 omów dwukropek - jaśniej niż normalnie, bo nie odbywa się multipleksacja.

    Co dalej
    1. Trzebaby zrobić jakąś fajną obudowę.
    2. Dobrze byłoby zaoszczędzić jeszcze chociaż jedną linię, żeby móc zrobić normalne nastawianie zegara przy pomocy 2 przycisków. Jakieś pomysły? :) Oczywiście bez używania większych mikrokontrolerów ani ekspanderów, bo to by było strzelanie z armaty do wróbla. Priorytetem jest prostota układu.

    Cool? Ranking DIY
    About Author
    Sam Sung
    Level 32  
    Offline 
    Has specialization in: oprogramowanie systemowe
    Sam Sung wrote 1674 posts with rating 267, helped 205 times. Been with us since 2005 year.
  • #2
    rubik123
    Level 21  
    A nie łatwiej użyć do sterowania segmentami rejestru 74164 pomiędzy prockiem , a wyświetlaczem? Wtedy do sterowania segmentami wystarczą tylko 2 piny portu procka. I nie trzeba kombinować z segmentami pierwszej cyfry. W przypadku tego wyświetlacza oczywiście 2x 74164 i nadal zajęte dwie linie portu do sterowania segmentami. Jeśli ma byś tak jak jest to możesz dodać 2 przyciski podłączone do 2ch linii portu sterujących multipleksowaniem wyświetlacza i odczytywać stan klawiszy na jednej wolnej linii portu jaka Ci pozostała w momencie kiedy masz w programie wygaszone segmenty wtedy gdy program już wybierze konkretną połówkę wyświetlacza.
  • #3
    Sam Sung
    Level 32  
    Czy łatwiej użyć 2 zewnętrznych rejestrów zatrzaskowych, to bym nie powiedział. Raczej na pająka trudno byłoby je podłączyć. Poza tym to podpada pod expandery portów. Wolałbym nie iść w dodawanie scalaków - no chyba, że przy okazji zastąpią istniejące tranzystory i oporniki.

    Czy z tym odczytem stanu klawiszy, to chodziło o coś w tym stylu?
    Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika
    Tylko, że to nie zadziała, bo stan linii K1 i K2 zawsze będzie odczytany jako niski.
    Więc jakby można prosić schemat albo dokładniejszy opis pomysłu... :)
  • #4
    rubik123
    Level 21  
    Tylko, że to nie zadziała, bo stan linii K1 i K2 zawsze będzie odczytany jako niski.
    Więc jakby można prosić schemat albo dokładniejszy opis pomysłu... :)[/quote]

    W Twoim przypadku będzie zawsze niski , bo zrobiłeś błąd. Bazy tranzystorów masz połączone bezpośrednio do procka, a powinny być przez rezystory np 1k i wtedy zawsze na jednym z pinów procka masz logiczne 1 w zależności od aktualnie wybranej połowy wyświetlacza.

    W przypadku aktualnego podłączenia na schemacie na bazach tranzystorów czyli wyjściach portów nie masz 1 w stanie załączenia tylko 0.6v co jest niezgodne ze sztuką....
  • #5
    Sam Sung
    Level 32  
    rubik123 wrote:
    W Twoim przypadku będzie zawsze niski , bo zrobiłeś błąd. Bazy tranzystorów masz połączone bezpośrednio do procka, a powinny być przez rezystory np 1k i wtedy zawsze na jednym z pinów procka masz logiczne 1 w zależności od aktualnie wybranej połowy wyświetlacza.
    A czy to nie odetka obu tranzystorów niezależnie od stanu portów procka?
  • #6
    rubik123
    Level 21  
    [/quote]A czy to nie odetka obu tranzystorów niezależnie od stanu portów procka?[/quote]

    Dobra to inaczej. Klawisze możesz podpiąć zamiast do linii portów sterujących katodami to do portów sterujących segmentami. Wtedy w procedurze multipleksowania jak masz wygaszone obie połówki wyświetlacza wystawiasz tam gdzie masz podpięty switch np "1" wystawiasz 0 i czytasz, potem robisz to samo na linii na której masz podpięty switch "2". Wyświetlacze w tym momencie masz wygaszone więc ....

    Dodano po 11 [minuty]:

    rubik123 wrote:
    A czy to nie odetka obu tranzystorów niezależnie od stanu portów procka?[/quote]

    Dobra to inaczej. Klawisze możesz podpiąć zamiast do linii portów sterujących katodami to do portów sterujących segmentami. Wtedy w procedurze multipleksowania jak masz wygaszone obie połówki wyświetlacza wystawiasz tam gdzie masz podpięty switch np "1" wystawiasz 0 i czytasz, potem robisz to samo na linii na której masz podpięty switch "2". Wyświetlacze w tym momencie masz wygaszone więc ....[/quote]

    Na portach sterujących katodami oba tranzystory będą zatkane, bo rezystor dajesz pomiędzy wyprowadzeniem portu, a bazą. Bazy już nie podciągasz żadnym rezystorem do vcc więc jak na port wystawisz 0 to na bazie też będzie 0.
  • #7
    lechoo
    Level 39  
    Można też wymienić te 2 tranzystory NPN na małe mosfety, np. IRLD014.
  • #8
    rubik123
    Level 21  
    W przypadku obecnego połączenia tranzystorów katodowych w momencie wystawienia 1 na port nie masz 5v czyli jedynki tylko 0,6V. Nie podłącza się bazy bezpośrednio do portu. Na początek wstaw rezystory i sprawdź czy wszystko działa tak jak do tej pory.
  • #9
    Sam Sung
    Level 32  
    rubik123 wrote:
    Dobra to inaczej. Klawisze możesz podpiąć zamiast do linii portów sterujących katodami to do portów sterujących segmentami. Wtedy w procedurze multipleksowania jak masz wygaszone obie połówki wyświetlacza wystawiasz tam gdzie masz podpięty switch np "1" wystawiasz 0 i czytasz, potem robisz to samo na linii na której masz podpięty switch "2". Wyświetlacze w tym momencie masz wygaszone więc ....
    No, i to wygląda na dobry pomysł, w ten sposób mógłbym tą jedną wolną linią samplować nawet 12 przycisków i to niezależnie od tego, jak i czym są sterowane wspólne katody (byleby były wyłączone na czas samplowania, ale to żaden problem wystawić zera na obie bazy).

    rubik123 wrote:
    Na portach sterujących katodami oba tranzystory będą zatkane, bo rezystor dajesz pomiędzy wyprowadzeniem portu, a bazą. Bazy już nie podciągasz żadnym rezystorem do vcc więc jak na port wystawisz 0 to na bazie też będzie 0.
    No tylko że bez "podciągów" te tranzystory będą już zawsze zatkane.
    Nie wiem, czy w toku rozmyślań nie umknął gdzieś fakt, że w tym układzie to jedynka z procka włącza wspólną katodę, a zero ją wyłącza (odwrotnie niż anody, gdzie 0 włącza tranzystor PNP).
    Ale rozumiem, że to już bez znaczenia, gdybym wykorzystał Twój pomysł z przyciskami na liniach sterowania anodami.

    lechoo wrote:
    Można też wymienić te 2 tranzystory NPN na małe mosfety, np. IRLD014.
    No racja, MOSFET nie ściągnie bazy/bramki do 0,6 V, tylko, że taki jeden mały MOSFET kosztuje tyle co 20 małych BC337 :)
  • #10
    rubik123
    Level 21  
    Przecież podciągi zostawiasz od strony portu. Zrób tak jak pisałem i sprawdź. Zobacz gdzie ma być rezystor. Z drugim tranzystorem zrób to samo.
  • #11
    kristof_61
    Level 11  
    Chętnie przygarnąłbym takie uszkodzone radiobudziki z dużym wyświetlaczem.
  • #12
    thereminator
    Conditionally unlocked
    Czy dałoby się taki wyświetlacz w jakiś sposób podłączyć do peceta, żeby wyświetlał czas systemowy?
  • #13
    Anonymous
    Level 1  
  • #14
    Sam Sung
    Level 32  
    Ten układ bez zmiany programu da się podłączyć do peceta przez przejściówkę USB-to-TTL. Zasilanie z USB. GND do GND, +5V do +5V, TXD do TXD. Na PC tylko odpalić programik, który będzie okresowo wysyłał czas systemowy zgodnie z formatem w opisie tj. CR <dzień tygodnia> ; <godzina> : <minuta> : <sekunda> ; LF. Parametry transmisji 9600 bps, 1 bit stopu, bez parzystości.
  • #15
    lechoo
    Level 39  
    Sam Sung wrote:
    Ten układ bez zmiany programu da się podłączyć do peceta przez przejściówkę USB-to-TTL. Zasilanie z USB. GND do GND, +5V do +5V, TXD do TXD. Na PC tylko odpalić programik, który będzie okresowo wysyłał czas systemowy zgodnie z formatem w opisie tj. CR <dzień tygodnia> ; <godzina> : <minuta> : <sekunda> ; LF. Parametry transmisji 9600 bps, 1 bit stopu, bez parzystości.

    Można też zaprogramować moduł ESP8266 aby pełnił funkcję przekaźnika sygnału czasu odbieranego z serwerów czasu - w sieci jest wiele gotowych przykładów jak to zrobić z użyciem popularnego środowiska Arduino.
  • #16
    Sam Sung
    Level 32  
    rubik123 wrote:
    W przypadku aktualnego podłączenia na schemacie na bazach tranzystorów czyli wyjściach portów nie masz 1 w stanie załączenia tylko 0.6v co jest niezgodne ze sztuką....
    Hmm... z jaką sztuką to jest niezgodne?
    Wydaje mi się, że wszystkie elementy są używane zgodnie z datasheetami.
    Owszem, gdybym chciał dołożyć 2 przyciski na liniach katod, to jakieś zmiany są potrzebne, ale jeśli nie, to chyba wszystko jest w porządku (?)
    Nie wiem, czy po dołożeniu tych drugich rezystorów 1k zmniejszony 2x prąd bazy BC337 nie spowoduje, że te tranzystory przestaną się nasycać... (beta=40)
    Możnaby je wymienić na np. BC517 (Darlingtony), ale za to napięcie nasycenia CE zje cały 1V z 5V albo lepiej
  • #17
    lechoo
    Level 39  
    Spróbuj użyć tranzystorów PNP pracujących jako wtórniki emiterowe, w roli tych dolnych driverów - może się okazać, że będą pracowały wydajniej niż to co jest obecnie. Oczywiście w programie należy wtedy zanegować wyjścia nimi sterujące. Zauważalnym błędem w sztuce jest natomiast brak rezystorów ograniczających prąd segmentów wyświetlacza.
  • #18
    Sam Sung
    Level 32  
    Żeby zamknąć temat DIY "w budowie", załączam ostateczną wersję wg tego samego schematu (+ brakujące oporniki), ale na innym wyświetlaczu (LTC-637D1P-W).
    Pewne niedoskonałości obudowy są widoczne z bliska, ale w końcu też mam zegar ścienny, którego nie trzeba nastawiać ani wymieniać w nim baterii.
    Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika Zegar na wyświetlaczu LED z zepsutego, starego radiobudzika