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

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

adrian_krc 20 Sty 2014 19:25 5760 9
REKLAMA
  • #1 13199962
    adrian_krc
    Poziom 10  
    Posty: 37
    Ocena: 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
  • REKLAMA
  • #2 13200113
    trebuch1
    Poziom 26  
    Posty: 823
    Pomógł: 84
    Ocena: 131
    "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.
  • #3 13200238
    adrian_krc
    Poziom 10  
    Posty: 37
    Ocena: 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
  • REKLAMA
  • Pomocny post
    #4 13200347
    Konto nie istnieje
    Poziom 1  
  • #5 13200721
    adrian_krc
    Poziom 10  
    Posty: 37
    Ocena: 9
    Tak by było ok to wyświetlanie?

    Algorytm programu obsługi wyświetlacza LED 7 segmentowego 4 pozycyjnego
  • REKLAMA
  • Pomocny post
    #6 13200802
    Konto nie istnieje
    Poziom 1  
  • #7 13200879
    adrian_krc
    Poziom 10  
    Posty: 37
    Ocena: 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
    #8 13201036
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #9 13203030
    adrian_krc
    Poziom 10  
    Posty: 37
    Ocena: 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
  • #10 13204317
    Konto nie istnieje
    Poziom 1  

Podsumowanie tematu

✨ Użytkownik poszukuje pomocy w rozdzieleniu algorytmu programu obsługi wyświetlacza LED 7-segmentowego w kontekście multipleksacji dynamicznej. Zasugerowano, że wyświetlanie powinno być realizowane w przerwaniach od timera, co pozwala na równomierne wyświetlanie cyfr bez migotania. W odpowiedziach omówiono konfigurację liczników, generowanie przerwań oraz sposób obsługi wyświetlacza, w tym ładowanie danych do portów oraz zarządzanie anody. Użytkownik zadał pytania dotyczące wartości rejestru TH1 oraz częstotliwości odświeżania, co doprowadziło do wyjaśnień na temat minimalnej częstotliwości odświeżania oraz obliczeń związanych z czasem świecenia cyfr.
Wygenerowane przez model językowy.
REKLAMA