logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

AtMega8 - Multipleksowanie wyświetlacza - problem z symulacja

Laik90 27 Mar 2013 16:55 2661 11
  • #1 12118771
    Laik90
    Poziom 11  
    Witam, przeprowadzam symulację w programie Proteus ISIS multipleksowania wyświetlacza 7seg i mam problem tego rodzaju że albo program do symulacji coś szwankuję - ponieważ tranzystory PNP ciągle przepuszczają prąd po podaniu napięcia. Albo mam błąd w schemacie. Proszę o sprawdzenie schematu.
    AtMega8 - Multipleksowanie wyświetlacza - problem z symulacja
  • Pomocny post
    #2 12118823
    BlueDraco
    Specjalista - Mikrokontrolery
    Błędy w schemacie masz na pewno - brak rezystorów w bazach tranzystorów i w sterowaniu segmentów. Czy to wpływa na symulację - nie wiem. Prawdziwy układ co nieco by się zagrzał, a mikrokontroler zapewne przestałby działać.
  • #3 12119640
    Laik90
    Poziom 11  
    Ok, faktycznie zapomniałem o tych rezystorach na bazie.
    A więc tak prąd dla wyświetlacza 8 seg ( 7 + kropka ) po 10mA na segment 0.08A a więc opornik 62Ω.
    A co do bramki tranzystora to mikro kontroler daje 5V 20mA, więc jak obliczyć rezystor ?

    Lepiej ?
    AtMega8 - Multipleksowanie wyświetlacza - problem z symulacja
  • #4 12120017
    BlueDraco
    Specjalista - Mikrokontrolery
    10 mA na segment to bez multipleksowania. Przy multipleksowaniu minimum 20,a tak naprawdę tyle, ile tylko wytrzyma wyświetlacz. Jak policzyłeś te 62R? Jakie jest napięCie zasilania i spadek na wyświetlaczach? Coś mi tu nie pasuje.

    Tranzystor masz wysterować prądem rzędu 2..5 mA, czyli rezystor od 1k do 2k2 tak mniej-więcej.
  • #5 12124528
    Laik90
    Poziom 11  
    Cytat:
    Jak policzyłeś te 62R?

    Sciągnąłem aplikacje do elektroniki na androida i taki wynik wyświetliło i nie sprawdzałem - co jest błędem.

    Podpatrując inne schematy zauważyłem że w większości każdy segment ma swój rezystor a każdy segment może być obciążany stale 25mA i 100mA przy cyklu -0.1,1KHz. Przyjmę więc 50mA ( będzie dobrze?) rezystor wynosić będzie:
    I=U/R
    0.05=5/R
    R=5/0.05
    R=100 Ohm na każdy segment.
    Cytat:
    Tranzystor masz wysterować prądem rzędu 2..5 mA, czyli rezystor od 1k do 2k2 tak mniej-więcej.

    Dla bramek tranzystorów rezystor 1K
    I=U/R
    0.005=5/R
    R=5/0.005
    R=1K


    Nota wyświetlacza:
    AtMega8 - Multipleksowanie wyświetlacza - problem z symulacja

    Na symualacji wygląda to tak że wszystkie segmenty są zapalone, gdy wcisnę przycisk s1 pokazuje mi się następna cyfra (używam go aby dodać +1 do licznika), lecz wyświetlacz zapala nową cyfrę a starą gasi dopiero po jakimś czasie.

    Kod: text
    Zaloguj się, aby zobaczyć kod
    [/code]
  • Pomocny post
    #6 12124612
    BlueDraco
    Specjalista - Mikrokontrolery
    Ja tam żadnych bramek nie widzę - masz tranzystory bipolarne, chociaż PMOS byłyby lepsze. Kod masz napisany tak, że na prawdziwym wyświetlaczu byłyby "duchy", więc na symulacji też są - nie gasisz cyfry przed wystawieniem nowych segmentów dla nowej cyfry. Jest jeszcze parę innych błędów.
  • Pomocny post
    #7 12126221
    snnaap
    Poziom 25  
    Laik90 napisał:


    Podpatrując inne schematy zauważyłem że w większości każdy segment ma swój rezystor a każdy segment może być obciążany stale 25mA i 100mA przy cyklu -0.1,1KHz. Przyjmę więc 50mA ( będzie dobrze?) rezystor wynosić będzie:
    I=U/R
    0.05=5/R
    R=5/0.05
    R=100 Ohm na każdy segment.


    Tak na marginesie to w tych skomplikowanych obliczeniach jest błąd.
    Nie jest uwzględniony spadek napięcia na diodzie segmentu.
    Przy zasilaniu 5V i czerwonych segmentach wartość rezystora powinna wynosić ok 75 ohm.

    Tylko zastanów się czy aby na pewno chcesz tak duży prąd.
    Przy zapalonych wszystkich segmentach i dodatkowej kropce sumaryczny prąd będzie wynosił 400mA. Oczywiście będzie to pobór chwilowy ale i tak trzeba będzie się przyjrzeć zastosowanemu tranzystorowi kluczącemu.

    Dla przykładu popularny BC557 wytrzyma prąd rzędu 200mA w piku.
  • Pomocny post
    #8 12126580
    BlueDraco
    Specjalista - Mikrokontrolery
    Najpierw uruchom oprogramowanie z rezystorami ograniczającymi prąd do maksymalnego dozwolonego ciągłego - 25 mA. Kiedy już będzie działało - w razie potrzeby zwiększ prąd poprzez zmniejszenie rezystorów. Inaczej łatwo o uszkodzenie wyświetlacza.
  • #9 12127619
    Laik90
    Poziom 11  
    Bardzo dziękuję za aktywną wypowiedź w temacie.
    BlueDraco napisał:
    Ja tam żadnych bramek nie widzę - masz tranzystory bipolarne, chociaż PMOS byłyby lepsze.

    Fakt, mój błąd. Chcę użyć popularnych BC557 ponieważ mam ich spory zapas w domu.
    BlueDraco napisał:
    Kod masz napisany tak, że na prawdziwym wyświetlaczu byłyby "duchy", więc na symulacji też są - nie gasisz cyfry przed wystawieniem nowych segmentów dla nowej cyfry.

    Gasić cyfry podając stan wysoki na tranzystor czy stan wysoki na cały PORTD?
    W tym i tym wypadku symulacja nie ulega zmianie. Nawet kożystając z tych dwóch opcji na raz nie robi to różnicy.
    snnaap napisał:
    Przy zasilaniu 5V i czerwonych segmentach wartość rezystora powinna wynosić ok 75 ohm.

    Spadek napięcia na wyświetlaczu odczytuje się z noty ? Czy są to jakieś umowne wartości ?
    snnaap napisał:
    Tylko zastanów się czy aby na pewno chcesz tak duży prąd.

    Skorzystam z rady BlueDraco i prąd dam 25mA.

    Wklejam filmik z programu do symulacji. Może ktoś dzięki temu będzie mógł mi powiedzieć coś więcej.
    Filmik:



    Kod:
    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #10 12128110
    BlueDraco
    Specjalista - Mikrokontrolery
    Teraz kod jest zły, bo wyświetlasz w kółko, a trzeba to robić w przerwaniu timera. zapewne problem jest w symulatorze. Zrób to na prawdziwym mikrokontrolerze i wyświetlaczu. Szukanie błędów wynikających z działania symulatora jest z lekka bezsensowne.
  • #11 12130786
    Laik90
    Poziom 11  
    Symulator ten działa dla większości osób więc i u mnie teoretycznie powinno być dobrze. A na mikrokontrolerze i wyświetlaczu będę mógł zrobić dopiero jak opanuję eagle.

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Dobrze skonfigurowałem Timer ? Teraz wyświetla mi ciągle "odwrotną" szóstkę. A zamieniłem tylko kod miejscami z pętli głównej na przerwanie.
  • #12 12130872
    BlueDraco
    Specjalista - Mikrokontrolery
    Włączasz timer przed skonfigurowaniem go - to nie jest dobry pomysł. Popatrz, jak pracuje Twój switch w przerwaniu timera. W pewnym momencie wys_ ma wartość 4 i z taką zostaje do następnego przerwania. Po co? zrób na końcu wys_ ++; wys_ &= 3; i usuń etykietę default. Dlaczego zmienne ewidentnie 8-bitowe mają u Ciebie typ int? - zmień obie tablice, cyfra i wys_ na uint8_t. Reszta wygląda dość dobrze, więc ja podejrzewałbym raczej konfigurację symulatora
REKLAMA