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

[ATmega8][Bascom]Stoper na 7-segmentowych olbrzymach

Juni[]r 04 Sie 2010 17:54 3714 14
  • #1 04 Sie 2010 17:54
    Juni[]r
    Poziom 16  

    Mam pytanie. Na załączonym obrazku z pewnej książki pewnie i wam dobrze znanej znalazłem sterowanie 7 segmentowymi wyświetlaczami. Chciał bym zrobić stoper na 6 takich segmentach. Minuty Sekundy i Setne... Problem mam taki iż- wyświetlacze które posiadam nie są z tych malutkich tylko mają 18x11cm (obudowa) 13x8cm (segment). Na pewno potrzebują jakiegoś większego prądu wiec co mam przerobić w owym rysunku by je dobrze wysterować. Są to wyświetlacze A-5001SR. Wyczytałem że są ze wspólną anodą.

    [ATmega8][Bascom]Stoper na 7-segmentowych olbrzymach

    Dodano po 13 [minuty]:

    Czy wystarczy użyć za 4543 układ ULN2003 + 22R ?
    Poprawiłem tytuł na bardziej oddający problem i zgodny z regulaminem p. 3.1.15.
    Ponadto proszę się zapoznać z zasadami korzystania z działu:
    https://www.elektroda.pl/rtvforum/topic349089.html
    LordBlick

    0 14
  • #2 04 Sie 2010 18:35
    hotdog
    Poziom 26  

    W nocie masz napisane że każdy segment poza kropką i przecinkiem wymagają napięcia 18V. Kropka wymga 3,6V, a przecinek 8.8V.

    Prądy znikome, bo wszędzie masz 20mA.

    IMO najłatwiej na segmenty (czyli katody wszystkich wyświetlaczy) dać ULN2803A (Najłatwiej jak byś używał tylko kropkę, bo jak chcesz przecinek jeszcze to dodatkowy tranzystor potrzebny). Dla każdej anody musisz zastosować tranzystor z prądem min. 9x 20mA, czyli ok 200mA.

    Przecinek i kropka muszą mieć oddzielnie policzone rezystory bo mają mniejsze napięcie zasilania.

    Jak chcesz osiągnąć największa jasność, to tranzystory na anodach byś musiał trochę lepsze wybrać i dać takie z prądem ok. 1A. ULN ma duży zapas.

    Narysuj sam z tego schemat i daj do sprawdzenia.

    Widać że coś wiesz, ale chyba się Tobie nie chce:)

    Pozdro

    0
  • #3 04 Sie 2010 19:04
    Juni[]r
    Poziom 16  

    a nie wystarczy coś takiego ?

    [ATmega8][Bascom]Stoper na 7-segmentowych olbrzymach

    tylko inne napięcie bo inna ilość diod LED na segment .

    0
  • #4 04 Sie 2010 20:25
    rpal
    Poziom 27  

    To co narysowałeś nie może być bo zwróć uwagę że CD4543 i ULN 2003 odwraca fazę sygnału i o ile dobrze pamiętam wyjścia ma jako otwarty kolektor. Z tego powodu jak podłączysz jeszcze ULN2003 to żądna dioda się tobie nie zapali a jeśli dodałbyś przy CD4543 nawet po oporniku w miejsce segmentu diody aby jakiś sygnał w ogóle sterował driver to wóczas miałbyś zanegowanie tego co byłoby bez ULN2003. Zrezygnuj z CD4543 i programowo dekoduj segmenty wyświetlacza alo z ULN2003. CD4543 sam w sobie jest już driverem i sprawdź jakie sa dla niego dopuszczalne prądy zanim zaczniesz coś niepotrzebnie dokładać.
    Zdaje się że ULN2003 przewodzi większe prądy.

    0
  • #5 05 Sie 2010 16:22
    Juni[]r
    Poziom 16  

    Myślałem że 4543 nie da rady pociągnąć dużego prądu dla segmentu a ULN2003 to po prostu zespół tranzystorów które przekażą większy prąd... Mówisz żeby zrezygnować z BCD tylko od razu na segmenty z wyjść Atmegi ?

    0
  • #6 05 Sie 2010 16:29
    rpal
    Poziom 27  

    Tak mi się zdaje a poza tym będziesz miał większą elastyczność co do wyświetlania znaków choćby taką że wyświetlisz sobie pojedyńcze segmenty albo będziesz mógł sterować miejsce dziesiętnym. Piny na porcie i tak masz wolne więc w cym problem. Moc tracona to zdaje się 500mW więc oblicz sobie albo zmierz prąd płynący przez diody a uwzględniając napięcie zasilnia wyjdzie ci jak daleko możesz się "posunąć" w jasności led-ów. Pamiętaj tylko że jak przesadzisz albo zbliżysz się do granicy możliwości a np. program się tobie zawiesi i padnie multiplekserowanie to na bank spalisz albo driver albo diodę. Więc przy próbach używaj mniejszej jasności.

    0
  • #7 05 Sie 2010 16:32
    Juni[]r
    Poziom 16  

    A pomógł byś mi co do programu... ? Mam książkę i się uczę... ale przyjmę każdą pomoc.... A projekt zrobie w weekend na gotowo bo muszę zaprojektować płytkę albo zrobię na uniwersalnej

    0
  • #8 05 Sie 2010 18:52
    rpal
    Poziom 27  

    Nie nadaję się na nauczyciel ale mogę czasem coś doradzić. Z mojej strony mała prośba jak się masz uczyć to może od razu zacznij od C i AVRStudio nie brnij w ślepą uliczkę Bascom-a. Inaczej nie będę pomagał bo się na tamtym nie wyznaję :) To nie jest post który ma rozpoczynać dyskusję o tym co lesze do programowania, z góry zaznaczam.

    0
  • #9 06 Sie 2010 06:32
    emarcus
    Poziom 34  

    Juni[]r napisał:
    Mam pytanie.


    Czy wystarczy użyć za 4543 układ ULN2003 + 22R ?


    Nie.
    Te dwa układy nie są dla siebie zastępcze ani tez nie eliminują się wzajemnie.
    Jeżeli produktem wyjściowym z uC jest sygnał BCD, to użycie 4543 jest konieczne bez zmiany oprogramowania.
    Ponieważ pracujesz przy napięciu 5V (compatible z TTL), wiec zachodzi potrzeba obniżenia prądu dla diod w układach LED (R9-R16).

    Aby zamienić standardowe wyświetlacze na A-5001SR najprostszym rozwiązaniem byłoby wstawić układ ULN w miejsce rezystorów (R9-R16) zasilany napięciem 18V.
    Jeżeli zastosujesz ULN2003 (układ siedmiotorowy) to musisz dodatkowo dać jeden lub dwa tranzystory obsługujący DP1 i ew. DP2.
    Bardziej sensowne będzie dać tu ULN 2803 (8 torów).
    Ponieważ DP1 i DP2 potrzebują niższego napięcia ( 3,6V i 7,2V odpowiednio), zatem bedzie wymagane stosowanie odpowiedniej wart. rezystorów dla ograniczenia prądu w zakresie 15 do 20 mA (np.~720 Ohm).
    Program dla uC pozostałby bez zmiany.

    e marcus

    0
  • #10 06 Sie 2010 17:20
    Juni[]r
    Poziom 16  

    Czyli rysunek jest dobry tylko z ULN2003 zmienić na ULN2803 gdzie kanał ósmy to kropka z przecinkiem razem ale puszczone przez tranzystor. ? Mógł byś to nanieść na mój rysunek ?

    Do RPAL.

    Pomału myślę jednak nad obejściem BCD... w końcu będę mógł wyświetlać też litery. Myślałem też nad tym co mówiłeś odnośnie programowania. C i inne jeżyki nie należą do łatwych a ja należę jednak do ludzi co tworzą minutniki do jajek i systemy otwierania bram wiec uczyć sie nowego języka to poświęcenie czasu a i tak go nie wykorzystam. Chyba że podasz jakiś przykład stopera w "C" i opiszesz mi linijeczki kodu pewnie zakumam o co chodzi

    0
  • #12 08 Gru 2012 12:19
    dondu
    Moderator Mikrokontrolery Projektowanie

    1. Zacznij od prawidłowego podłączenia mikrokontrolera: http://mikrokontrolery.blogspot.com/2011/04/minimalne-podlaczanie-pinow.html

    2. Nie prowadź połączeń na elementach elektronicznych, w miejsca połączeń należy wstawić symbol połączenia (kropkę), a w ogóle to schematy rysuj tak:
    http://mikrokontrolery.blogspot.com/2011/04/jak-projektowac-czytelne-schematy.html

    3. Regulator napięcia także ma swoje wymagania:
    http://mikrokontrolery.blogspot.com/2011/04/zasilanie-mikrokontrolera.html

    4. W jakim celu rezystory przy przyciskach? Są zbędne.

    Na razie tyle. Poczytaj uważnie, spokojnie i dokładnie podane linki, narysuj schemat od nowa zgodnie z tym czego się nauczysz.

    I generalna uwaga: Czytaj datasheety stosowanych elementów.

    0
  • #13 08 Gru 2012 13:15
    Juni[]r
    Poziom 16  

    Oki rozumiem że chodzi ci o pikanterie rysunku. Jeżeli wstępnie bym ci go pokazał to pewnie byś się załamał bo było długopisem na kartce i to nie w kratkę tylko w linie. Co do pinów tez widzę błąd. Poprawmy go myślowo PortyC to katody PortyB to Anody wyświetlacza. A zasilanie podam +5 podam z zasilacza. I problemy zniknęły.

    Teraz powiedzcie że będzie dobrze...

    Szukam na necie jakiegoś stopera w bascomie bo mógł bym sobie go edytować a w C miał bym z tym problem. Zegar znalazłem ale stopery są tylko na LCD a nie LED

    0
  • #14 08 Gru 2012 14:04
    dondu
    Moderator Mikrokontrolery Projektowanie

    Juni[]r napisał:
    Jeżeli wstępnie bym ci go pokazał to pewnie byś się załamał bo było długopisem na kartce i to nie w kratkę tylko w linie.

    Może być nawet na ziemi patykiem + zdjęcie, byle był kompletny, zanim odpowiemy:

    Juni[]r napisał:
    Teraz powiedzcie że będzie dobrze...

    0
  • #15 08 Gru 2012 16:24
    Juni[]r
    Poziom 16  

    Przepraszam za jakosc ale robilem w starym diptrace bez bibliotek

    czy program zaczerpniety z innego tematu by dzialal ?

    Code:
    $regfile = "m8def.dat"
    
    $crystal = 4000000

    Dim Setsek As Byte , Dziesek As Byte , Sekjed As Byte , Sekdzies As Byte , Minjed As Byte , Mindzies As Byte
    Dim 100ms As Byte , Ktorywysw As Byte , Licz As Bit , Pomoc As Bit , Flaga As Bit , Licznik As Byte

    Config Portc = 255 : Portc = &B11111111 : Config Portd = &B1111111 : Portd = &B1111111
    Config Timer0 = Timer , Prescale = 64 : Enable Interrupts : Enable Timer0

    Setsek = 0 : Dziesek = 0 : Sekjed = 0 : Sekdzies = 0 : Minjed = 0 : Mindzies = 0
    Pomoc = 1

    On Timer0 Co4ms


    Do : Loop : End

    Co4ms:

    Timer0 = 6

    Incr Licznik

    If Licznik = 6 Then
       Licznik = 0

       If Pind.0 = 0 Then
          If Pomoc = 1 Then
             Toggle Licz
             Pomoc = 0

          End If
       Else
          Pomoc = 1
       End If
    End If


    If Licz = 1 Then
       Incr 100ms


       If 100ms = 25 Then
          100ms = 0
          Incr Setsek
          If Setsek = 10 Then
             Setsek = 0
             Incr Dziesek
             If Dziesek = 10 Then
                Dziesek = 0
                Incr Sekjed
                If Sekjed = 10 Then
                   Sekjed = 0
                   Incr Sekdzies
                   If Sekdzies = 6 Then
                      Sekdzies = 0
                         Incr Minjed
                         If Minjed = 10 Then
                            Minjed = 0
                            Incr Mindzies
                            If Mindzies = 6 Then
                            Mindzies = 0
                            End If
                         End If
                    End If
                End If
            End If
        End If
    End If

    Incr Ktorywysw : If Ktorywysw = 4 Then Ktorywysw = 0
    End If
     Portd.1 = 1
     Portd.2 = 1
     Portd.3 = 1
     Portd.4 = 1
     Portd.5 = 1
     Portd.6 = 1

    Select Case Ktorywysw

    Case 0:
       Portc = Lookup(setsek , Tabela)
       Portd.1 = 0
    Case 1:
       Portc = Lookup(dziesek , Tabela)
       Portd.2 = 0
    Case 2:
       Portc = Lookup(sekjed , Tabela)
       Portd.3 = 0
    Case 3:
       Portc = Lookup(sekdzies , Tabela)
       Portd.4 = 0
    Case 4:
       Portc = Lookup(minjed , Tabela)
       Portd.5 = 0
    Case 5:
       Portc = Lookup(mindzies , Tabela)
       Portd.6 = 0

    End Select

    Return

    Tabela:
    Data 192 , 249 , 164 , 176 , 153 , 146 , 130 , 248 , 128 , 144


    Czy to by dzialalo ?

    Przepraszam za brak polskich znakow ale na moim komputerze nie ma polskich liter.

    0