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.

Licznik modulo 53 - układ scalony 7493

01 Lis 2016 12:06 2715 10
  • Poziom 2  
    Witam serdecznie.
    Mam do zrobienia na zajęcia licznik modulo 53 za pomocą układów scalonych 7493 w programie Altera Quartus. Mój licznik działa, liczy od 0 do 52, tylko mam jeden problem z którym nie mogę sobie poradzić. Licznik za szybko przechodzi z liczby 52 na 0. od 0-51 liczy w takim samym, dobrym tempie, lecz liczba 52 pokazuje się zaledwie na ułamek sekundy i znowu jest 0.
    Moje pytanie: Jak można przedłużyć jakoś ten okres trwania tej liczby 52, żeby za szybko nie znikała? Poniżej pokazuje mój zbudowany układ, może coś tam jest źle? Pozdrawiam serdecznie i z góry dziękuję za pomoc.

    Licznik modulo 53 - układ scalony 7493
  • Poziom 2  
    tos18 napisał:
    Zrezygnuj z przerzutnika na sygnale reset. Skoro cały licznik ma zliczać do 52 to reset ma następować dla stanu 53


    Próbowałem resetowanie bez tego przerzutnika D, lecz wtedy zamiast resetować do 0, resetuje mi do 22, nie wiem czemu. I wtedy liczy od 22 do 52, zamiast od 0 do 52.
  • Poziom 29  
    Są dwa sposoby skracania cyklu licznika - twój (synchroniczny) i kolegi tos18 (asynchroniczny).

    W systemie skracania synchronicznego przerzutnik D działa dlatego, że jest taktowany w przeciwfazie w stosunku do licznika. Jak sprawdzisz w dokumentacji, to zobaczysz, że 7493 jest taktowany zboczem opadającym, a 7474 zboczem narastającym. Układ kombinacyjny wykrywa stan 52 od chwili pojawienia się go na liczniku. Pół fazy zegara później sygnał wykrycia zostaje wpisany do przerzutnika D i stamtąd przekazany do wejść kasujących licznika. Stan licznika zmienia się na zero, asynchroniczny warunek kasowania znika od razu, ale przerzutnik to "zauważy" dwa półcykle zegara później. Wymuszenie kasowania znika, licznik czeka pół cyklu zegara do chwili, gdy na właściwym zboczu przeskoczy na 1. Efekt: wszystkie stany licznika trwają 1 cykl zegara z wyjątkiem stanu 52, który trwa 0,5 cyklu, oraz stanu 0, który trwa 1,5 cyklu.

    W systemie asynchronicznym warunek kasowania to wykrycie stanu 53, a wypracowany sygnał kasowania wymusza natychmiastowe zerowanie licznika. Cykl zegarowy stanu zero składa się z bardzo krótkiego stanu 53 oraz stanu 0 przez pozostały czas cyklu.

    Wadą systemu synchronicznego jest "fazowe" zaburzenie czasu trwania stanów 52 i 0, zaletą jest "szeroki" impuls kasowania (czyli przebieg o częstotliwości 53-krotnie niższej od wejściowej i o wypełnieniu 1/53). System asynchroniczny nie ma tego zaburzenia fazowego, ale jego wadą jest bardzo wąski impuls kasowania oraz krótkotrwały "obcy" stan 53 na wyjściu licznika. Ale tego "obcego" stanu 53 można się pozbyć - stosując rejestr (blok przerzutników D) na wyjściu licznika. Rejestr będzie przepisywał i zapamiętywał stany licznika w przeciwfazie sygnału zegarowego - czyli wtedy, gdy na wyjściu licznika jest stan stabilny. Rejestr nigdy nie zobaczy tego niepożądanego krótkotrwałego stanu 53.
  • Poziom 2  
    Ok, trochę mi to rozjaśniło sprawę. Czyli muszę użyć dwóch rejestrów? Jeden do licznika zliczającego jednostki, a drugi do zliczającego dziesiątki, czy jakoś inaczej? Bardzo prosiłbym o pomoc, albo chociaż o kierunek, w jaki sposób to połączyć, żeby działało.
  • Poziom 29  
    Tu masz rysunki wyjaśniające obie idee skracania cyklu licznika.

    Synchroniczny (CLK - przebieg wejściowy, A52 - asynchroniczne, kombinacyjne wykrycie stanu 52, RST - synchroniczny reset licznika na wyjściu przerzutnika D, stan - stan licznika, zliczona liczba):
    Licznik modulo 53 - układ scalony 7493

    Asynchroniczny (CLK - przebieg wejściowy, A53 - asynchroniczne, kombinacyjne wykrycie stanu 53, stan - stan licznika, zliczona liczba, od razu dorzucone REG - stan na rejestrze pośredniczącym):
    Licznik modulo 53 - układ scalony 7493
    Jak widzisz, tym sposobem można się zabezpieczyć przed pojawieniem się stanu 53 na wyjściu licznika.

    Rejestr - funkcjonalnie to jest jeden rejestr taktowany koniecznie na zboczu przeciwnym niż zbocze zliczające licznika (patrz rysunek dla asynchronicznego kasowania). Jaki się zastosuje układ (układy) - to już kwestia wtórna - są w katalogu układy rejestrów 4-, 6-, 8-bitowych ze wspólnym wejściem zegarowym.

    Ogólny schemat funkcjonalny poniżej. Ale - jak już wcześniej pisałem - w naszym szczególnym przypadku inwerter jest niepotrzebny, bo liczniki są taktowane zboczem opadającym, a rejestry - narastającym (UWAGA: w analizie naszego szczególnego przypadku zaneguj sobie przebieg CLK na wykresach czasowych powyżej, zastosowane układy scalone odwracają logikę zegara!).
    Licznik modulo 53 - układ scalony 7493

    Przy okazji - to jest kaskada dwóch liczników binarnych, a nie dekadowych. Tu nie ma "dziesiątek" i "jednostek", jest jedna 8-bitowa liczba!

    I jeszcze coś:
    - Na moim rysunku i w moim wcześniejszym opisie mowa o "półcyklach" zegara. Założyliśmy, ze przebieg wejściowy ma wypełnienie 50:50. Jeżeli impulsy będą węższe lub szersze, to rysunek się odpowiednio pozmienia.
    - Zastosowanie rejestru do wyrównania czasu trwania stanu 52 i 0 w wersji z kasowaniem synchronicznym byłoby śliskie. Licznik jest asynchroniczny, każda zmiana (zbocze) z wejścia CLK musi się przepropagować przez wszystkie stopnie licznika. Trudno powiedzieć, coby rejestr złapał w tym momencie, kiedy akurat jest przejście z 52 na 0. Mogłoby się np. okazać, że układ pokazuje 51 :arrow: 52 :arrow: 52 :arrow: 1.
    - Cała ta zabawa bierze się stąd, że chcesz liczyć cyklicznie 0-52. Gdyby chodziło wyłącznie podział częstotliwości, to wyjście układu stanowiłby przebieg resetujący licznik (bardzo wąski w wersji z kasowaniem asynchronicznym lub o szerokości cyklu zegara w wersji z kasowaniem synchronicznym).
  • Poziom 39  
    deargross napisał:
    Próbowałem resetowanie bez tego przerzutnika D, lecz wtedy zamiast resetować do 0, resetuje mi do 22, nie wiem czemu


    Dla mnie też jest to dziwne zwłaszcza że 22 ( 010110b ) sugeruje że nie wszystkie przerzutniki liczników zostały wyzerowane. Może problemy robi sam symulator.
    @2N3866 Jakieś sugestie?
  • Poziom 29  
    tos18 napisał:
    deargross napisał:
    Próbowałem resetowanie bez tego przerzutnika D, lecz wtedy zamiast resetować do 0, resetuje mi do 22, nie wiem czemu


    Dla mnie też jest to dziwne zwłaszcza że 22 ( 010110b ) sugeruje że nie wszystkie przerzutniki liczników zostały wyzerowane. Może problemy robi sam symulator.
    @2N3866 Jakieś sugestie?

    Nie mam lepszego pomysłu niż problem symulatora. Zakładając, że resetujesz z 53 do 22 mamy do czynienia z przejściem:
    110101b
    do
    010110b.
    Wygląda jakby czasy resetu "widziane" przez różne przerzutniki były różne - niektóre nie zdążyły się zresetować, a w jednym przypadku mamy do czynienia z tak szybkim resetem, że przerzutnik jakby zdążył już zaliczyć zbocze opadające poprzedzającego przerzutnika (7493 to licznik asynchroniczny). Nie wiem, co to za symulator - albo błąd, albo jakaś symulacja rozrzutu parametrów. Asynchroniczne kasowanie jest śliskie - bardzo krótki impuls i to "samogaszący się".

    Ciekawe, jakby wyglądało resetowanie z 52 (110100b).
  • Poziom 39  
    Na moim symulatorze (proteus ISIS) kasowanie asynchroniczne wychodzi bez problemu. Budowałem różne liczniki na TTL (w rzeczywistości na prawdziwych układach ) zawsze kasowałem asynchronicznie i nigdy nie miałem problemu tego typu.
  • Poziom 29  
    tos18 napisał:
    Budowałem różne liczniki na TTL (w rzeczywistości na prawdziwych układach), zawsze kasowałem asynchronicznie i nigdy nie miałem problemu tego typu.

    Ja też robiłem (klasyka: miernik częstotliwości z kaskadą dekadowych dzielników wzorca :D), bo to zasadniczo działa (resetuje układ), tylko impuls jest wąski. Czasem może to stanowić problem w następnym stopniu, który z jakichś powodów wolałby szerszy impuls albo wręcz wypełnienie 50:50, albo do kolejnego stopnia daleko i linia transmisyjna zniekształca ten krótki impuls, że staje się nieczytelny na drugim końcu. No i mamy ten krótkotrwały stan nadmiarowy.

    Nieprecyzyjnie się wyraziłem, jakby asynchroniczne kasowanie było jakieś "lewe", a tak nie jest. Ważne tylko mieć świadomość własności obu wariantów.