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

Algorytm programu obsługi wyświetlacza LED 7 segmentowego 4 pozycyjnego

20 Sty 2014 19:25 4770 9
  • Poziom 9  
    Witam,
    mam takie o to algorytmy. Po lewej algorytm programu głownego, po prawej algorytm przerwania INT0.

    Obecnie mam tak narysowane. To co w czerwonym kółku to chciałbym właśnie rozdzielić
    Algorytm programu obsługi wyświetlacza LED 7 segmentowego 4 pozycyjnego

    Wyczytałem, że multipleksacja wyświetlania dynamicznego powinna być w przerwaniu od timera. Ale nie umiem sobie z tym poradzić.

    Może mi ktoś pomóc jak to narysować? Tam jak widzicie w programie głownym sobie coś obliczam, a później to obliczone chciałbym wyświetlić, a po wyświetleniu wyniku znów przejść do działania programu i do obliczeń kolejnych.

    Tak wygląda schemat podłączenia wyświetlacza do uP 8051
    Algorytm programu obsługi wyświetlacza LED 7 segmentowego 4 pozycyjnego

    i to mi wchodzi na P1:
    Algorytm programu obsługi wyświetlacza LED 7 segmentowego 4 pozycyjnego
  • Poziom 24  
    "Wyczytałem, że multipleksacja wyświetlania dynamicznego powinna być w przerwaniu od timera. Ale nie umiem sobie z tym poradzić."
    Polega to na tym że przerwanie występujące w sposób cykliczny musi zając się wyświetlaniem wyniku. Żeby było ciekawie nie wyświetlisz za jednym zamachem czterech cyfr lecz wynik musisz porozkładać "na raty". To wszystko po to, aby wyświetlacze działały z identyczną intensywnością oraz bez migotania. Inaczej mówiąc, piszesz program na sekwencyjne wyświetlanie czterech cyfr w trybie przerwań ponieważ one gwarantują równomierny podział czasu między segmenty. Dopiero z "resztek" czasowych budujesz algorytm zasadniczy.
  • Poziom 9  
    Dzięki za odpowiedź, ale nie wiem jak to ma wyglądać na algorytmie.
    Mógłby ktoś to narysować?
    Chodzi mi o to, że zmierze sobie coś, na podstawie pomiarów dokonam jakiś tam obliczeń i te obliczenia chce wyświetlić.

    Dopiero potem jak wyświetle znowu przejść do następnego pomiaru, obliczeń na jego podstawie i znów procedura wyświetlenia
  • Pomocny post
    Poziom 1  
  • Poziom 9  
    Tak by było ok to wyświetlanie?

    Algorytm programu obsługi wyświetlacza LED 7 segmentowego 4 pozycyjnego
  • Pomocny post
    Poziom 1  
  • Poziom 9  
    Marek_Skalski napisał:
    Zamiast ładować do licznika wartość 62536, co powinno dać przepełnienie po 3000+kilka cykli, lepiej zrobić tylko ORL TH1,#0xFC. TL1 nie musisz modyfikować; niech sobie liczy. Wtedy przy zegarze 12MHz, każda cyfra świeci 1,024ms, co daje odświeżanie 244Hz. Obraz będzie stabilny.
    Jeżeli w Rn masz zagwarantowane stałe bity [7:4] tak jak w algorytmie, a [3:0] to kod BCD dla wyświetlanej wartości, to wyświetlanie jest ok.


    A skąd wziałeś tą wartość którą mam dodać do TH1 0xFC? Nie rozumiem tego.
    I jak z tego wychodzi, że każda cyfra świeci 1,024ms?

    dzięki za odpowiedzi
  • Pomocny post
    Poziom 1  
  • Poziom 9  
    Staram się rozrysować jak to będzie działać, ale jakoś nic mi nie pasuje.

    Załączam zdjęcie, które rozjaśni mój problem
    Algorytm programu obsługi wyświetlacza LED 7 segmentowego 4 pozycyjnego
    Opis pod rysunkiem:
    1. Pierwszy pomiar. Podczas zbocza opadającego na INT0 uruchamia się przerwanie w którym załącza się licznik T0 do liczenia impulsów okresu odbieranego Tr.
    2. Następne zbocze opadające, to kolejne przerwanie na INT0 i wyłączenie licznika T0.
    3. Po wyjściu z przerwania wyłączam je na chwilę.
    - następuje teraz obliczenie prędkości, zamiana jej na BCD i wynik umieszcza się w rejestrach R0-R3.
    - włączam licznik T1, który po przepełnieniu generuje przerwanie od T1.
    4. Przychodzi przerwanie od T1. Wystawiam rejestr R0 na port P1.
    5. Wychodze z przerwania i wracam w miejsce gdzie wcześniej byłem. A więc za miejsce "URUCHOM LICZNIK T1"
    - zeruje znacznik ogólnego przeznaczenia F0
    - i ide do miejsca gdzie znów włączam przerwanie od INT0, a więc dokonuję następnego pomiaru, tak jak w pkt.1.

    No i teraz mi juz nic nie pasuje, bo za chwilę mi przyjdzie kolejne przerwanie od T1, które wystawi teraz rejestr R1 na port P1

    Czy ktoś umiałby mi pomóc jak to poprawić, żeby to jakoś miało ręce i nogi?

    Wyliczyłem, że u mnie pomiar najdłużej będzie trwał 3002us (dla prędkości 20km/h), natomiast dla prędkości 200 km/h czas pomiaru to 2557us.
    Jakby co to załączam te moje obliczenia też
    obliczenia.xlsx
  • Poziom 1