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 impulsów do 10MHz

15 Paź 2003 23:03 3019 17
  • VIP Zasłużony dla elektroda
    Natknąłem się na pewien problem przy budowie tego urządzenia związany z ograniczeniami ze strony procesorów AVR. Maksymalny zakres to dla 90s2313 5 MHz (czestotliwosc rezonatora /2 ). Rozwiązanie z którymś z ATmega też nie jest brane pod uwage... Moje pytanie brzmi czy jest mozliwe w nieskomplikowany sposób poszerzyć zakres częstotliwości do 10 MHz... :?: Najwazniejsze jest by licznik nie gubił impulsów...
    Może ktoś spotkał sie z takim problemem :?:
    Pozdrawiam :)
  • Poziom 17  
    witam.

    raczej żaden procek nie poradzi sobie bezpośrednio z taką czestotliwością. jeżeli nie jest potrzebny ci pomiar z dokładnością do Hz proponuje podzielić sygnał przez 1000 zwyklymi dzielnikami. pomiar bedziesz mial z dokladnością do 1khz o ile dobrze napiszesz program. wszystko zależy też do czego to ma służyć i w jakim zakresie ma mierzyć.
    jeżeli ma to być częstotliwościomierz to bedziesz musial podzielić go na podzakresy. i programowo i elektronicznie.
  • VIP Zasłużony dla elektroda
    nie chodzi mi o pomiar czestotliwości... urządzenie ma za zadanie zliczać impulsy których max częstotliwość może siegać 10MHz... dlatego raczej nie ma mowy o dzieleniu przez 1000 :( a co do programu to nie ma problemów ... chodzi tylko o sposób ominięcia ograniczenia procesora...
  • Poziom 33  
    A w czym problem żeby dać licznik (np. / 4 lub / 8 - 2 lub 3 przerzutniki D) i potem zlioczną liczbę programowo wymnożyć przez te 4 czy 8?
    Ilość zliczonych impulsów będzie bez zmian, tyle że częściowo wykona to sprzęt poza uC.
  • Poziom 20  
    Przetaktowywałem kiedyś 2313 do 18, 20 i 22 MHz. I szło, byle program nie był zbyt skomplikowany. Do 18 z kawałkiem MHz wypluwał mi jeszcze wyniki na LCD i przez UART na 19200 bodów. Potem się "krzaczył" RS, ale uC działał i wyświetlał OK. Ja, co prawda, robiłem coś innego niż licznik 10 MHz, ale przetaktować można.
  • VIP Zasłużony dla elektroda
    Jesli wspomniany dzielnik nie zgubi impulsów to spoko... jestem wdzieczny za rade... poszukam tylko jakiegos sensownego schematu....
    chyba ze ktos posiada juz takowy :D jesli tak, to sądze że nie tylko ja na tym skożystam :)
    dzieki za pomoc :wink:
  • Poziom 17  
    witam ponownie
    może inaczej: żaden procek nie jest w stanie policzyć impulsów z taką częstotliwością. są mikrokontrolery które posiadają coś w rodzaju preskalera ale nie do takiej f.
    jeżeli chcesz dokładnie policzyć impulsy w dogodnych dla ciebie momentach z taką częstotliwością to w/g mnie pozostaje ci zliczyć je na zewnętrznych licznikach i wprowadzić je do uK za pomocą multiplekserów. i tam sobie je "obrobić". dużo zależy od tego ile tych impulsów chcesz policzyć. napisz coś więcej o tym co tworzysz.

    a teraz z innej beczki:
    procka masz np na 10 MHz i teoretycznie niech jeden cykl maszynowy trwa 1/1 000 000 sekundy chaciaż zazwyczaj tak nie jest. każdy rozkaz w maszynówce trwa od 1 do nawet 8 cykli maszynowych, ale średnią przyjmijmy jako 3 cykle. czyli zostaje 3 miliony rozkazów na sek. dalej żeby obsłużyć przerwanie i wykonać jakiś program w tym przerwaniu musisz zapisać srednio z 10 rozkazów (nie licząc taktów na przejście do przerwania i powrót do wlaściwego programu) zostaje ci 300 000 rozkazów na sekunde czyli jakby max częstotliwość z którą procek może "obsłużyć" każdy nadchodzący impuls. a gdzie czas na obsługę właściwego programu?

    ja na podstawie swojego doświadczenia wiem że przy dokładnych pomiarach (czy to będzie częstotliwość, odstawa czasowa, wogóle pomiar jakiejś wielkości) lepiej jest zastosować coś zewnętrznego co mierzy interesującą nas wielkość, wprowadzić to do kontrolera i tam sobie obrobić tak jak potrebujesz, i przy okazji wykorzystać kontroler jako przyjazny użytkownikowi interfejs.

    może się powtarzam ale napisz dokładniej co chcesz wykonać lub uzyskać. postaram ci się pomóc
  • Poziom 33  
    piotrekk: nie zgodzę się z Tobą. W większości uC jest możliwość sprzętowego zliczania impulsów zewnętrznych i to nie absorbuje czasu pracy uC. Cykl maszynowy procesorów AVR (a o takim tu jest mowa) jest równy cyklowi zegarowemu, czyli przy 10MHz wynosi 0.1us (niektóre instrukcje wymagają kilku cykli maszynowych), a maksymalna f zewnętrzną jaką może zliczyć uC jest równa fclk/2.
    Najlepszym rozwiązaniem wydaje mi się jest mały preskaler zewnętrzny (/ 4, / 8, ....) i potem programowe uwzględnienie tego podzielnika. Żaden impuls nie ma prawa "zniknąć" przy takim zliczaniu.
  • Poziom 32  
    No tak a co z impulsami w preskalerze ???
    Jak je odczytasz ??
  • Poziom 33  
    MOżesz zrobic alblo licznik zewnetrzny (wtedy liczysz w oddzielnych scalakach (np. '590 - to zdaje sie liczniki z zatrzaskiem na wyjsciu tri state) i odczytujesz pokolei wszystkie liczniki (po 8 bitow), albo jezeli chcesz typowy preskaler to ygnal mierzony podajesz na wejscie licznika, ktory po zliczeniu do jakies konkretnej wartosci ( np. przepelnienie) zmienia stan wejscia licznikowego uC. Wtedy musisz pamietac zeby liczbe zliczona przez uC przemnozyc przez podzielnik licznika wstepnego.
  • Poziom 17  
    witam

    ok tdv. zgodzę się z tobą przy pomiarze częstotliwości i wykorzystaniu sprzętowego preskalera. ale z tego co gościu pisze to on chce zliczyć dokładnie impulsy i po zliczeniu chce coś wykonać. dzielniki w tym wypadku odpadają. ja zrobilbym na zewnątrz liczniki ustawiane przez procek i liczące do tyłu przy przejściu przez zero ma odrazu impuls wykonawczy.
    co z tego ma? idealnie policzone impulsy i sygnał wywołujący dalszą reakcję.
    dalej nie wiemy co Jarek Sieracki ma na myśli zbudować
  • Poziom 2  
    wedlug mnie to pozostaje ci wstepny dzielnik podlaczony tat aby procesor mogl odczytac jego zawartosc i odpowiednia obsluga programowa albo nadzieja ze da sie przetaktowac procka.
  • VIP Zasłużony dla elektroda
    spiesze z wyjasnieniami... urządzoko ma za zadanie tylko zliczac impulsy,
    a na koniec po recznym zatrzymaniu lub po wskazanym czasie pomiarów pokazac wynik na LCD. to co juz sklecilem jest dosc pojemne (oklo 2 bilionów impulsów :) ) wykożystany jest 16 bitowy timer T1 , wiec jest jeszcze sporo pinów do ewentualnego wykożystani :wink: czekam na kolejne posty z propozycjami ... :)

    pozdrawiam...
  • Poziom 33  
    No to proponuję wziąć scalony licznik 8 bitów z wyjściami równoległymi. Najstarszy bit podłączyć do wejscia licznikowego uC, oraz całe 8 bitów do któregoś portu. I tak tajmer w uC będzie zliczzał wielkrotności 256 (przepełnienia licznika sprzętowego), ktorych max f wyniesie fmax = 10MHz/256 co daje około 40kHz, czyli już calkiem malutko. Po skończeniu zliczania wczytujesz zawartość licznika sprzętowego podłączonego do portu i dodajesz do tego co Ci zliczył procek (oczywiście wymnożonego przez 256).
    moim zdaniem z ekonomicznego punktu widzenia to będzie najkorzystniejesze rozwiązanie.
  • Poziom 17  
    w pełni tdv się zgadzam z tobą.
    myślałem że to troszke bardziej bardziej będą skomplikowane zamierzenia pracy układu.
    ale w tym wypadku strzał w dziesiątke moim zdaniem.

    pozdrawiam
  • Poziom 12  
    Tdv napisał:
    A w czym problem żeby dać licznik (np. / 4 lub / 8 - 2 lub 3 przerzutniki D) i potem zlioczną liczbę programowo wymnożyć przez te 4 czy 8?
    Ilość zliczonych impulsów będzie bez zmian, tyle że częściowo wykona to sprzęt poza uC.


    czy tak bez zmian to bym nie byl pewien. przy liczbie n impulsow zliczony wynik bedzie n/4 dajmy na to, a faktyczny bedzie n/4 + n%4, gdzie / to dzielenie calkowite a % reszta z dzielenia.
    Jelsi taki blad jest do przyjecia to rozwiazanie jest ok, jesli nie to trzeba siegnac po zewnetrzny licznik
  • VIP Zasłużony dla elektroda
    Witam ponownie... :) Musze przyznac ze Tdv trafił w 10... bo przy tak malej komplikacji hardwaru sam program wymaga tylko kilku "upiększeń" i powinno byc OK :D . Jak wszystko bedzie grało to wrzuce to w ramach podzieki na forum zeby wszyscy mogli skorzystac :)
    Pozdrawiam .... :wink:
  • Poziom 24  
    skoro atmel moze pracowac z czestotliwoscia 10MHz i da sie ustawic wewnętrzny prescaler licznika na CK, czyli zliczanie impulsów bezposrednio z kwarcu, to moze jednak wyrobi sie z sygnalem zewnetrznym? wtedy calosc hardware'u zamknelaby sie w jednym IC.

    Pozdro.