Elektroda.pl
Elektroda.pl
X
Sklep HeluKabel
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

atmega32 Bascom - Multileksowanie 6-ciu wyświetlaczy LED

Elektronik_Kraków 17 Cze 2014 00:33 2670 14
  • #1 17 Cze 2014 00:33
    Elektronik_Kraków
    Poziom 13  

    Witam
    Mam problem z multipleksowaniem wyświetlaczy LED. Mam gotową płytkę bazową
    atmega32 Bascom - Multileksowanie 6-ciu wyświetlaczy LED


    oraz płytkę wyświetlaczy
    atmega32 Bascom - Multileksowanie 6-ciu wyświetlaczy LED

    najpierw próbowałem ustalić, które segmenty mają się zapalać, aby poprawnie wyświetlać cyfrę. No i zaczyna się problem, bo chociaż cyfry zapalają się poprawnie to zapalają się wszystkie.

    Próbuję kodem, jak poniżej:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    gdy wpiszę godzinę = 91 to wszystkie wyświetlacze wyświetlają cyfrę 9.

    0 14
  • Sklep HeluKabel
  • #2 17 Cze 2014 07:42
    seba_x
    Poziom 31  

    Nie wiem jak inni koledzy ale ja bym dał rezystor może 10k między emiter a bazę tranzystorów i multiplexowanie wyświetlaczy najlepiej zrobić na przerwaniach .

    0
  • #3 17 Cze 2014 07:45
    emarcus
    Poziom 35  

    Elektronik_Kraków napisał:
    Witam
    Mam problem z multipleksowaniem wyświetlaczy LED. ..........

    najpierw próbowałem ustalić, które segmenty mają się zapalać, aby poprawnie wyświetlać cyfrę. No i zaczyna się problem, bo chociaż cyfry zapalają się poprawnie to zapalają się wszystkie.

    Próbuję kodem, jak poniżej:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    gdy wpiszę godzinę = 91 to wszystkie wyświetlacze wyświetlają cyfrę 9.

    W zamieszczonym programie brakuje multiplexowej procedury obslugi wyświetlaczy LED. (Label ' Wyświetlanie: ').
    Ponadto, jeżeli użyjesz instrukcji jak wyżej:
    On Timer0 Wyswietlanie,
    - to cała obsługa wyświetlaczy znajdzie się w obsłudze przerwania Timera0 co nie jest w pełni poprawne. Zastosuj raczej flage stawianą w przerwaniu a obsługę wyświetlania uwarunkuj stanem flagi w programie głównym.
    Poza tym, jeżeli taka procedura wyświetlania gdzieś istnieje to wygląda że nie jest poprawna skoro wyświetla tylko jedną cyfrę.
    Multiplexowa obsługa 7-segm. LED nie jest zbyt skomplikowana, lecz wymaga przestrzegania pewnej ustalonej systematyki. Zasada jest że tylko jedna cyfra świeci w danym momencie (!!!)
    W skrócie: Mając przygotowane cyfry do wyświetlenia w jego procedurze:

    1. Najpierw wygaszasz wszystkie wyświetlacze,
    2. Załączasz katody segmentów poprzez ULN wystawiając odpwiednie wartości na port A dla pierwszej cyfry, (lookup do tabeli)
    3. Załączasz tranzystorem anodę tylko dla tej cyfry (w tym wypadku pierwszej)
    4. zerujesz flage postawioną w przerwaniu timer0.
    5. return

    W przerwaniu timera incrementujesz także numer wyświetlacza w zakresie 1 do 6, a w procedurze wyświetlania musisz zadbac aby utrzmac synchronizację pomiędzy numerem wyświetlacza a jego zawartością.
    I.t.d. od początku dla kolejnych cyfr.

    e marcus

    0
  • #4 17 Cze 2014 19:30
    Elektronik_Kraków
    Poziom 13  

    Czyli mogłoby być tak, że ustawiam w przerwaniu flagę np. Wyswietl = 1, a pętli głównej

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    analogicznie powinno być z datą, tylko trzeba by dodać zmienną typu bit do wyboru, co ma być wyświetlane.

    Jeśli to zadziała to mam pytanie, o odczyt czasu z PCF8563. Odczyt czasu wymaga zablokowania przerwań ( przynajmniej ja tak zawsze robię ), zapewne będzie to widoczne w działaniu wyświetlacza.
    Może można skrócić czas odczytu, odczytując prze dłuższy czas tylko sekundy, a przy sekundzie = 59 odczytać cały czas ?

    Dodano po 5 [godziny] 12 [minuty]:

    Witam ponownie
    Przy takim kodzie ( specjalnie dałem dużą wartość w przerwaniu ):
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    oraz rezystorach na bazach, efekt jest taki, że każdy wyświetlacz wyświetla po kolei każdą wartość - czyli wszystkie razem po kolei wyświetlają 9,1,2,3,5,7

    Przy czym ten który powinien wyświetlić poprawną wartość świeci nieco jaśniej. Czyli, jakby nieaktywne segmenty nie były wygaszane.

    nagrałem krótki film - przepraszam, że bokiem, nagrywałem komórką prosto


    Jeśli podłączę bazę któregoś z tranzystorów sterujących anodami do VCC to wszystkie zgasną.
    Czy długość taśmy łączącej obydwie płytki może wpływać na działanie ?

    Mierzyłem napięcie pomiędzy GND a wyjściami PORTC2 - C7, które zasilają tranzystory anod i prawie cały czas jest tam +5V - 0 jest tylko na chwilę wtedy, gdy ma świecić dany wyświetlacz, czyli tranzystory nie przewodzą, a jednak świecą wszystkie.

    Jakie powinny być wartości rezystorów katod ?

    Może problem jest przez to, że są wyświetlacze różnej wielkości ? - pomysły mi się skończyły :cry:

    0
  • #5 18 Cze 2014 07:34
    emarcus
    Poziom 35  

    Elektronik_Kraków napisał:
    Czyli mogłoby być tak, że ustawiam w przerwaniu flagę np. Wyswietl = 1, a pętli głównej.....

    Może problem jest przez to, że są wyświetlacze różnej wielkości ? - pomysły mi się skończyły :cry:



    Mniej/więcej, - tak. Program jednak wymaga troche poprawek
    Cytat:

    Jeśli podłączę bazę któregoś z tranzystorów sterujących anodami do VCC to wszystkie zgasną.

    Powina gasnąc tylko ta jedna cyfra, którą steruje ten tranzystor (!)
    Prawdopodobnie masz gdzieś zwarcie w układzie i to byc może jest źródłem twojego problemu. (patrz także niżej (*1))
    Odnośnie pierwszego rysunku:
    Jaką rolę pełnią ranzystory T2 i T3 (są podłączone odwrotnie !)?
    Cytat:


    Czy długość taśmy łączącej obydwie płytki może wpływać na działanie ?

    Długośc taśmy nie jest krytyczna, ale nie powinna by zbyt długa.
    Cytat:

    Jakie powinny być wartości rezystorów katod ?

    Wartości rezystorów katod obliczasz tak aby uzyskac prąd rzędu 15 do 20 mA na segment. Zależy on od napięcia zasilania oraz Vf wyświetlacza, które z kolei zależy od ilości diod w jednym segmencie (dla większych może by więcej niż 1).
    Jeżeli masz mieszane rodzaje wyświetlaczy to wymagane jest stosowanie także różnych wartości rezystorów, tak aby prądy przepływające przez segment były z grubsza na tym samym poziomie, co da możliwośc równomiernej jasności świecenia. Nie jest wykluczona potrzeba doatkowej korekty wartości tych rezystorów. Multiplexing jest processem dynamicznym i czas załączenia wyświetlacza ma także wpływ na poziom jasności świecenia.

    Cytat:

    Mierzyłem napięcie pomiędzy GND a wyjściami PORTC2 - C7, które zasilają tranzystory anod i prawie cały czas jest tam +5V - 0 jest tylko na chwilę wtedy, gdy ma świecić dany wyświetlacz, czyli tranzystory nie przewodzą, a jednak świecą wszystkie


    To wcale nie znaczy że tranzystory nie przewodzą...
    Znaczy to że tranzystory nie zamykają się całkowicie przy podaniu na bazę 5V.
    Jeżeli tranzystor PNP jest zasilany napięciem wyższym niż 5V (np. 9 V) to aby go zamknąc, potrzebujesz jego bazę podłączyc do napięcia zasilania; w tym celu potrzebowałbyś drugi tranzstor NPN do sterowania tego w obwodzie anod.
    Dotyczy to również pytania (*1)

    e marcus

    0
  • Sklep HeluKabel
  • #6 18 Cze 2014 10:48
    Elektronik_Kraków
    Poziom 13  

    Wyświetlacze 1 do 4 są 1,8 cala ( trzy diody LED na segment ), wyświetlacze 5 i 6 są 1,5 cala ( dwie diody na segment ). Jak projektowałem płytkę to tutaj na elektrodzie konfrontowałem schemat i Koledzy poradzili mi dodać rezystor na anodach 1,5 calowych wyświetlaczy.

    Cytat:

    Odnośnie pierwszego rysunku:
    Jaką rolę pełnią ranzystory T2 i T3 (są podłączone odwrotnie !)?

    ale wszystkie są tak podpięte, więc o co z nimi chodzi ?

    Cytat:

    To wcale nie znaczy że tranzystory nie przewodzą...
    Znaczy to że tranzystory nie zamykają się całkowicie przy podaniu na bazę 5V.
    Jeżeli tranzystor PNP jest zasilany napięciem wyższym niż 5V (np. 9 V) to aby go zamknąc, potrzebujesz jego bazę podłączyc do napięcia zasilania; w tym celu potrzebowałbyś drugi tranzstor NPN do sterowania tego w obwodzie anod.
    Dotyczy to również pytania (*1)


    czyli, jeśli miałbym mniejsze segmenty zasilane z 5V tzn, w tym układzie będą działać, natomiast, przy 8-9V trzeba bazę zasilić z tego samego źródła co duże wyświetlacze.

    Czyli pozostaje włożyć pośredniczące tranzystory pomiędzy wyjścia Atmegi a bazy sterujących anodami. Czy w obecnej sytuacji nie można się "poratować" i dać mniejszy rezystor na bazie tranzystora sterującego anodą ?

    Cytat:

    Powina gasnąc tylko ta jedna cyfra, którą steruje ten tranzystor (!)
    Prawdopodobnie masz gdzieś zwarcie w układzie i to byc może jest źródłem twojego problemu. (patrz także niżej (*1))


    Obserwując działanie wyświetlacza segmenty zapalają się prawidłową jasnością.
    Problem w tym wygaszaniu.

    Jeśli podłączę tylko zasilanie +8V oraz dam gnd na jeden z tranzystorów i +5V na jeden z segmentów to świeci tylko ten segment, czyli się nic nie zwiera.

    Problemem może być to, że są różne wyświetlacze.

    Cytat:

    Mniej/więcej, - tak. Program jednak wymaga troche poprawek

    Proszę o wskazówki co jest nie tak, ale mam wrażenie, że to coś sprzętowego.

    Jeśli chodzi o ten dodatkowy tranzystor to coś takiego, jak poniżej

    atmega32 Bascom - Multileksowanie 6-ciu wyświetlaczy LED



    Edytuj
    Może dałoby się zastąpić ten tranzystor BC327 na płytce LED tranzystorem BC517, lub BC516 ( ma w sobie darlingtona ) ?

    0
  • #7 18 Cze 2014 16:51
    n0name10
    Poziom 17  

    Jak podkreślił kolega emarcus problemem jest zbyt duża różnica napięć na złączu EB tranzystora PNP. Gdybyś przeczytał datasheet'a BC327 widziałbyś, że napięcie przewodzenia złącza EB Twojego tranzystora wynosi ~1,2V. Jednym słowem tranzystory ciągle przewodzą, czego skutkiem jest świecenie wszystkich wyświetlaczy. Problemu by nie było gdybyś zasilił wyświetlacze z napięcia 5V a nie 8V. Schemat który podałeś u góry jest także nieprawidłowy. U dołu zamieszczam prawidłowe rozwiązanie, Twoim zadaniem jest dobranie odpowiednich wartości rezystorów. Załóż że tranzystory pracują w stanie nasycenia, znając prąd kolektora tranzystora PNP i jego wzmocnienie oblicz odpowiedni prąd bazy. Odsyłam do not katalogowych:
    BC327 http://www.fairchildsemi.com/ds/BC/BC327.pdf
    BC337 http://www.fairchildsemi.com/ds/BC/BC337.pdf

    atmega32 Bascom - Multileksowanie 6-ciu wyświetlaczy LED

    0
  • #8 18 Cze 2014 22:11
    emarcus
    Poziom 35  

    Elektronik_Kraków napisał:

    Cytat:

    Odnośnie pierwszego rysunku:
    Jaką rolę pełnią ranzystory T2 i T3 (są podłączone odwrotnie !)?

    ale wszystkie są tak podpięte, więc o co z nimi chodzi ?


    Chodziło o pierwszy rysunek;
    https://obrazki.elektroda.pl/3311050900_1402957511.jpg
    - tam masz dwa tranzystory PNP również oznaczone T2 i T3, które sa w odwrotnej konfiguracji.
    Emiter winien byc podłączony do zasilania, a obciążenie wpiete w obwód kolektora.
    -Skonfrontuj sam.

    Cytat:

    (1) czyli, jeśli miałbym mniejsze segmenty zasilane z 5V tzn, w tym układzie będą działać, natomiast, przy 8-9V trzeba bazę zasilić z tego samego źródła co duże wyświetlacze.

    (2) Czyli pozostaje włożyć pośredniczące tranzystory pomiędzy wyjścia Atmegi a bazy sterujących anodami. Czy w obecnej sytuacji nie można się "poratować" i dać mniejszy rezystor na bazie tranzystora sterującego anodą ?


    Ad(1)- dokładnie tak, ale nie możesz tego zrobic bezpośrednio bo wejdziesz w kolizje z wyjściem controllera, zatem więc wymagana jest opcja (2), tak jak sugeruje kol. n0name10;

    -albo alternatywnie zrezygnowac całkowicie z tej kombinacji NPN/PNP i całośc zastąpic zespololnym 8-kanałowym układem UDN2981A/UDN2982A.

    Cytat:

    Może dałoby się zastąpić ten tranzystor BC327 na płytce LED tranzystorem BC517, lub BC516 ( ma w sobie darlingtona ) ?

    Układ Darlingtona daje ci tylko możliwośc wiekszego wzmocnienia, oraz zwiększonej prądowej obciążalności. Charakter tranzystora pozostaje bez zmiany. W dalszym ciągu będziesz pracowal w zakresie pomiędzy pełnym przewodzeniem a punktem 'gdzieś' w obszarze liniowej charakterystyki wzmocnienia, bez osiągnięcia punktu "cut off" czyli odcięcia - (pełnego zamknięcia tranzystora).

    Cytat:

    Cytat:

    Mniej/więcej, - tak. Program jednak wymaga troche poprawek

    Proszę o wskazówki co jest nie tak, ale mam wrażenie, że to coś sprzętowego.

    Oczwiście, problem jest sprzętowy...
    Gdy już poprawisz sprzęt; dokładając albo dodatkowy tranzystor NPN lub podmieniając całośc sterowania anodowego na UDN, to okaże się że musisz odwrócic w programie logike załączania zasilania anod wyświetlaczy.
    Ponadto gdy już to zrobisz, to przydałoby sie troche uporządkowac /zoptymalizowac cały listing z wykorzystaniem odpowiednich subrutyn.

    e marcus

    0
  • #9 21 Cze 2014 19:11
    miro340
    Poziom 12  

    Witam.
    Zobacz sobie TUTAJ. Jest tam wszystko o multipleksowaniu i sterowaniu wyświetlaczy LED w bascom. Trzeba tylko uzbroić się w cierpliwość oglądając dość długie ale bardzo szczegółowe poradniki :-)]Link[/url]

    0
  • #10 26 Lip 2014 17:53
    Elektronik_Kraków
    Poziom 13  

    Witam
    Odświeżę wątek.

    Dodałem układ UDN2981A pomiędzy Atmege a wyświetlacze, wyrzuciłem tranzystory które sterowały anodami oraz ich rezystory z baz.
    Działa całkiem nieźle. Jest jedno ale... jasność.

    Steruje to takim kodem:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Migotanie nie widać, ale jasność jest słaba, tzn. gdy nie ma dużego słońca to ujdzie, podobnie jak w nocy.
    Zastanawiam się, czy pomoże coś zmiana częstotliwości na wyższą - 12 lub 16 MHz. Przy zabawie z rejestrem 74HC595 mogłem sterować jasnością poprzez ustawienie flagi przerwania dla LED ( po każdym przepełnieniu timera lub wprowadzając licznik pomocniczy i zliczając przepełnienie licznika - im mniejsza była wartość tych zliczeń tym jaśniej ).

    0
  • #11 26 Lip 2014 20:15
    emarcus
    Poziom 35  

    Elektronik_Kraków napisał:
    Witam
    Odświeżę wątek.

    Dodałem układ UDN2981A pomiędzy Atmege a wyświetlacze, wyrzuciłem tranzystory które sterowały anodami oraz ich rezystory z baz.
    Działa całkiem nieźle. Jest jedno ale... jasność.


    Migotanie nie widać, ale jasność jest słaba, tzn. gdy nie ma dużego słońca to ujdzie, podobnie jak w nocy.
    Zastanawiam się, czy pomoże coś zmiana częstotliwości na wyższą - 12 lub 16 MHz.


    Podnieś napięcie zasilania wyświetlaczy o jakieś 2 do 3 Volt (9, albo 12 V).
    Prąd LED zawsze możesz korygowac wartościami rezystorów w obwodach katod.
    Od tego powinieneś zacząc...

    Spróbuj też zmniejszyc częstotliwośc dla multiplexing:

    Config Timer0 = Timer , Prescale = 64

    wtedy zamiast 4 kHz będzie ok 500 Hz.
    250 Hz skutecznie eliminuje efekt 'migotania'.

    e marcus

    0
  • #12 26 Lip 2014 22:52
    Elektronik_Kraków
    Poziom 13  

    LED zasilam napięciem 9,5V ( podniosłem z 8,7V), rezystory na segmentach mam 150R, z wyjątkiem rezystora dla segmentu DP, który jest większy.
    LED duże mają trzy LED na segment, mniejsze dwie LED na segment, kropka we wszystkich to jeden LED na segment.

    próbuję dokładać na segment drugi rezystor 150R, wtedy nieco się rozjaśnia.

    Całość zasilam z podwójnego zasilacza na dwóch L2576T, jeden ma ustawione 5V, drugi 9,5V, część LED-owa pobiera 65 mA, nic się oczywiście nie grzeje.

    Wyświetlacze są zielone Ultra Green -15mcd ( 10 mA )
    Jak policzyć wartość rezystora dla segmentu ? Jak mam rozumieć te 10 mA ? Dla jednej diody w segmencie ? Przeważnie przyjmuje się 20 mA dla diody
    Bo licząc spadek napięcia 2V na diodę, to daje
    9,5 - 6V = 3,5V to
    R = 3,5V/0,02A
    R = 175om
    ja daję 150 om i bez rewelacji

    0
  • #13 27 Lip 2014 02:24
    emarcus
    Poziom 35  

    Elektronik_Kraków napisał:
    LED zasilam napięciem 9,5V ( podniosłem z 8,7V),

    Wyświetlacze są zielone Ultra Green -15mcd ( 10 mA )
    Jak policzyć wartość rezystora dla segmentu ? Jak mam rozumieć te 10 mA ? Dla jednej diody w segmencie ? Przeważnie przyjmuje się 20 mA dla diody
    Bo licząc spadek napięcia 2V na diodę, to daje
    9,5 - 6V = 3,5V to
    R = 3,5V/0,02A
    R = 175om
    ja daję 150 om i bez rewelacji


    Tak mógłbyś liczyc gdybys łączył LED bezposrednio przewodami do źródła zasilania i stosował statyczny/(ciągły) charakter świecenia.
    Poza tym w/g datasheet dla zielonych wyświetlaczy Vf= 2.2 V do 2.5 V, więc należałoby przyjąc średnią wartośc (2.4V/diodę).
    U ciebie w obwodzie są dodatkowo wpięte UDN i ULN, które traktujesz jako darlington tranzystor o nie zerowym spadku na nich napięcia nawet w stanie pełnego nasycenia, które nie powinny byc pominięte. Niektóre datasheets tranzystorów podają wartości VCE(sat) wynoszące różnie: od 0.2V do 1.1V. Ta ostatnia wartośc odnosi się do ULN. Odszukaj jaką wartoś ma UDN.... może byc więcej (?!)
    Uwaga:Przy obliczeniach prądów kolectora tranzystorów BJT w stanie nasycenia, podawany w datasheet współczynnik wzmocnienia β (Hfe) nie jest aktualny. Odnosi się on tylko do pola z zakresu charakterystyk liniowych. Stan nasycenia leży poza tym obszarem.
    Twój rzeczywisty układ z LED ma charakter zasilania dynamiczny; - multiplexing (x6 w cyklu kołowym), który możesz porównac do PWM o wypełnieniu 1/6 czyli zaledwie 16%.
    Możesz to spokojnie zasilic napięciem nie stabilizowanym 12V, albo na początek zmniejsz o połowę wartości rezystorów.

    e marcus

    0
  • #14 27 Lip 2014 15:04
    Elektronik_Kraków
    Poziom 13  

    czyli błędne założenia
    Powinno być 2,4V na diodę, 1V na UL2803, 1,6V na UDN2981A
    czyli
    7,2V +1V +1,6V = 9,8V - nie jest wystarczające
    najprościej będzie mi podnieść napięcie zasilania LED
    12V - 9,8V
    R= 2,2V/0,02
    R = 110 om

    Chciałem jeszcze zapytać i RC5, bo pasowałoby mieć opcje regulacji czasu.
    Dodałem w konfiguracji

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Dodałem w pętli głownej
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    RC5 odbieranie bez przerwania, no i wyświetla tylko pierwszą cyfrę, rozumiem, że RC5 oczekuje na dane. Wejście RC5 ma stan wysoki w trybie oczekiwania, może dać jakiś warunek sprawdzający stan wejścia RC5?

    0
  • #15 29 Lip 2014 21:14
    Elektronik_Kraków
    Poziom 13  

    Dokonałem optymalizacji kodu, rozmiar zmniejszył się o 2 %. Pilot RC5 działa, można zmienić czas/date, obsługę wyświetlania przeniosłem do przerwania
    Ale mam kłopot z wyświetlaniem kropki

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod



    Nie mogę wyświetlić kropki dziesiętnej na wyświetlaczu, próbowałem maskowania, ale nic się nie dzieje.

    0