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

Miernik częstotliwości AVT3003 z generatorem 20MHz

austin007 03 Sie 2009 09:41 7159 12
  • #1 6851143
    austin007
    Poziom 17  
    Witam!

    Ponieważ potrzebuję miernik częstotliwości do 160MHz, postanowiłem przerobić nieco projekt AVT3003. Zamiast kwarcu 10Hhz i AT90s2313 włożyłem ATTiny2313 z generatorem kwarcowym 20MHz. Przy takim taktowaniu należało zmienić również program. W komentarzu ' moja zmiana wskazałem, co zmieniłem - trzy linie programu. Problem jest taki,że podłączony do generatora taktującego procek (20MHz), wyśwlietlana jest wartość 20001 kHz zamiast okrągłego 20000. Zanim zmieniłem wskazane linie programu wskazywał równo 10000 kHz (wtedy odmierzana sekunda naliczania trwała 500ms, ze względu na dwa razy większe taktowanie). Tutaj jest schemat oryginalny, z kwarcem 10MHz.
    Miernik częstotliwości AVT3003 z generatorem 20MHz


    $crystal = 20000000   							'MOJA ZMIANA Z 10000000
    Config Lcd = 16 * 1a
    Dim Ccount As Byte
    Dim Maincounter As Long
    Dim C_counter As Word
    Dim Flag1 As Bit
    Dim Flag2 As Word
    Dim Tuning As Word
    Config Pind.0 = Input
    Config Pind.1 = Input
    Config Pind.2 = Input
    Config Pind.3 = Input
    Config Pind.4 = Input
    Config Pind.5 = Input
    Config Pind.6 = Output
    Config Pinb.0 = Output
    Load Timer0 20
    Declare Sub Frequency
    Declare Sub Events
    S1 Alias Pind.1
    S2 Alias Pind.0
    S3 Alias Pind.3
    S4 Alias Pind.4
    Set Portd.6
    Flag2 = 1
    Call Frequency
    Cls
    Sub Frequency
    Config Timer0 = Timer , Prescale = 8
    Config Timer1 = Counter , Edge = Falling , Noice Cancel = 1
    C_counter = 0
    Set Portd.6
    Cls
    Cursor Off
    
    Enable Timer0
    Enable Interrupts
    On Timer0 Timint
    Enable Timer1
    Ccount = 0
    On Timer1 Int_0
    Start Timer0
    Start Timer1
    Timer1 = 0
    Do
    Set Pind.1
    Debounce Pind.1 , 0 , Main , Sub
    Loop
    End Sub
    
    
    Timint:
    Incr C_counter
    If C_counter = Tuning Then
    Stop Timer1
    Stop Timer0
    Maincounter = Ccount * 65536
    Maincounter = Maincounter + Timer1
    If Maincounter = 1 Then
    Maincounter = 0
    End If
    If Maincounter < 30000 Then
    If Portd.6 = 1 Then
    Reset Portd.6
    End If : End If
    
    If Maincounter > 4500000 Then
    If Portd.6 = 0 Then
    Set Portd.6
    End If : End If
    If Maincounter = 0 Then
    Set Portd.6
    End If
    If Portd.6 = 1 Then
    Maincounter = Maincounter / 31
    End If
    Ccount = 0
    If Portd.6 = 0 Then
    Tuning = 9768 				        [b]' Moja zmiana z poprzedniego 4884 (pomnożyłem *2)
    [/b]Else
    Tuning = 9688			                ' [b]Moja zmiana z poprzedniego 4844 (pomnożyłem *2)[/b]
    End If
    
    Timer0 = 0
    Cls
    If Portd.6 = 0 Then
    Lcd "F [Hz]="
    Else
    Lcd "F[kHz]="
    End If
    Locate 2 , 1
    Lcd "          "
    Locate 2 , 1
    Lcd Maincounter ;
    Locate 2 , 8
    Lcd "*"
    Waitms 200
    Locate 2 , 8
    Lcd " "
    C_counter = 0
    Maincounter = 0
    Timer1 = 0
    Start Timer0
    Start Timer1
    End If
    Return
    
    Int_0:
          Incr Ccount
    Return
    
    Main:
    Disable Timer0
    Incr Flag2
    If Flag2 > 2 Then
    Flag2 = 1
    End If
    
    Select Case Flag2
    Case 1 : Call Frequency
    Case 2 : Call Events
    End Select
    Return
    
    Sub Events
    Cls
    Stop Timer1
    Locate 2 , 7
    Lcd "E."
    Wait 1
    Counter1 = 0
    Do
    
    Debounce Pind.1 , 0 , Main , Sub
    Home
    Lcd Counter1
    Set Portd.3
    If Pind.3 = 0 Then Counter1 = 0
    Set Portd.4
    If Pind.4 = 0 Then Stop Timer1
    Set Portd.0
    If Pind.0 = 0 Then Start Timer1
    
    Loop
    End Sub
    
    


    ----------

    Przyznam uczciwie,ze nie do końca rozumiem te warunki. Dlaczego jest rozróżniana długość naliczania impulsów.

    If Portd.6 = 1 Then
    Maincounter = Maincounter / 31
    End If
    Ccount = 0
    If Portd.6 = 0 Then
    Tuning = 9768 				' Moja zmiana z poprzedniego 4884 (pomnożyłem *2)
    Else
    Tuning = 9688				' Moja zmiana z poprzedniego 4844 (pomnożyłem *2)
    End If
    

    Z góry dziękuję


    Proszę umieszczać listingi programów w znacznikach "Code". [c_p]
  • #2 6851198
    sp3ots
    Poziom 38  
    Witam !
    austin007 napisał:

    Ponieważ potrzebuję miernik częstotliwości do 160MHz

    74S74 chyba nie pracuje tak wysoko ?
    Powodzenia życzę. Stefan
  • Pomocny post
    #3 6851229
    Konto nie istnieje
    Poziom 1  
  • #4 6852588
    austin007
    Poziom 17  
    Stefan-> słuszna uwaga:) Seria S nie pociągnie do takiej częstotliwości. Znalazłem już sklep z 74ACT74. Wg noty obsłuży do 160MHz. Jest jeszcze seria 74AS74 ale nie wiem czy ud mi się dopaść je.Dziękuję

    atom1477-> dziękuję za cierpliwe i wyczerpujące wskazówki oraz algorytm wyliczania tajemniczej wartości. Nie wiem jednak nadal dlaczego czasem (warunkowo) przyjmowana jest wartość jedna a czasem druga:

    If Portd.6 = 0 Then
    Tuning = 9768 ' Moja zmiana z poprzedniego 4884 (pomnożyłem *2)
    Else
    Tuning = 9688 ' Moja zmiana z poprzedniego 4844 (pomnożyłem *2)
    End If
  • #5 6852964
    Konto nie istnieje
    Poziom 1  
  • #6 6853074
    sp3ots
    Poziom 38  
    Witam !
    Tuning jest ze względu na niedokładności pomiaru dzięki użyciu generatora 10MHz.

    Gdy by użyć generatora lub rezonatora np. 14,7456MHz,
    można by zrezygnować z Tuningu.
    Wyliczenie 1sek - 14745600Hz / 256 /8 = 7200
    ( nie wiem dlaczego Atom1477 dodaje jeszcze 1 ?, mnie uczono jak wyżej, jestem amatorem ).
    Austin007 możesz nawet zastosować rezonator ww prze zemnie z kondensatorem np.33pF pin 4 i trymerem 50pF
    na pin 5, tak robię wmoich miernikach częstotliwości.
    Pozdrawiam. Stefan
  • #7 6853468
    austin007
    Poziom 17  
    W myśl tego ,co piszesz lepiej chyba użyć generatora 18.432MHz
    18432000/256/8=9000 a jest bliżej 20MHz czyli bliżej pełnych mocy zliczeniowych procesora:) Nie mogę jednak znaleźć generatora o tej częstotliwości, jedynie rezonator. Rozważam też użycie preskalera na TBB202 (podział przez 128, preskaler samooscylujący) lub U893BSE. Nie wiem jednak jak się sprawują.
  • #8 6853597
    sp3ots
    Poziom 38  
    Witam !
    Generatorów nie używam bo przekonałem się że mają odchyłki i nie można skalibrować, są takie z trymerkiem ale są drogie (nie sprawdzałem czy są o przydatnej dla nas częstotliwości.
    Robiłem na U664 dzieli przez 64, U813 dzieli przez 64/128/256. działają dobrze.
    Pozdrawiam,. Stefan
  • #9 6853704
    austin007
    Poziom 17  
    Właśnie przeliczyłem,że jeśli 74ACT74 pociągnie do 160Mhz, preskaler w układzie AVT3003 podzieli to przez 32 to na licznik procka trafi 5 MHz. Teoretycznie obsłużyłby to (na styk) zegar 10MHz. Zatem stosując taktowanie ATTiny 14,7456 MHz(bez podziału wewnątrz na 8 ) z dużym zapasem policzymy impulsy przy 160MHz. Zyskujemy jednak dokładność pomiaru ( 1000x2^14Hz) i parę wolnych linijek kodu na obsługę np preskalera.
    Znalazłem takiego gotowca na pewnym serwisie aukcyjnym Preskaler 1GHz z przedwzmacniaczem (MCW2C) za 25 złociszy. Z takim preskalerem urządzenie zskuje na funkcjonalności. I choć teraz potrzebuję tylko do skalibrowania syntezy 115-160MHz, to kiedyś tam może się przyda ten 1 GHz. Warto?
  • Pomocny post
    #10 6853741
    sp3ots
    Poziom 38  
    Warto kupić zostały 4sztuki.
    Powodzenia. Stefan
  • #11 6855106
    austin007
    Poziom 17  
    Znalazłem jeszcze preskaler SAB6456 (kilka złotych) .O tyle fajny,że podział można wybrać byłoby z procka pomiędzy 64 a 256. W przypadku relatywnie niskiej częstotliwości, dla zwiększenia dokładności można byłoby poprzestać na podziale przez 64. A może zastosować dwa szeregowo połączone te preskalery i wywalić układ preskalujący z kitu AVT3003? Zostałoby nieiwele z oryginału. Nie wiem tylko czy deklarowana czułość 10mV to w praktyce dużo czy mało. Może pozostawić do niższych częstotliwości prościutki wzmacniacz na BF199 z kitu a wyższe podpinać bezpośrednio do preskalera. No chyba,że przekombinowałem i polecasz mimo wszystko wcześniej wspomniany za 25 zł ze sztywnym podziałem 256.

    SAB6456
    Miernik częstotliwości AVT3003 z generatorem 20MHz
  • #12 6855279
    sp3ots
    Poziom 38  
    Witam !
    Rozmawiałem ze znajomym SQ3FYK o tym preskalerze, okazało się ma taki montowany w jakimś fabrycznym mierniku częstotliwości jest z niego zadowolony, jest czuły.
    Masz rację podział powinien być jak najmniejszy ( pomyliłeś się opisywana płytka ma dzielnik /128 nie 256) to trochę za dużo do pomiaru 160MHz ?
    Mam ruskie dzielniki /10,11 działają do około 150MHz, to jest za mało bo AVR 15MHz nie zmierzy.
    Pozdrawiam. Stefan gg6293398
    ps. jaką dokładność pomiaru potrzebujesz dla 160MHz ?
  • #13 6855338
    austin007
    Poziom 17  
    Słusznie:) Opisywany układ na chipe Siemensa TBB202 ma podział na 128( opcja 127).

    Znalazłem jeszcze coś takiego, jak unowocześniony AVT3003 w postaci nowego kitu AVT2820 autorstwa Rafała Orodzińskiego (sp4avs). Tyle ,że tam występuje preskaler u664b a tego nie mam w zasięgu. Chętnie przestudiowałbym program schemat i źródłowy,szczególnie jeśli jest w Bascomie (z C zaczynam dopiero). Idea jest podobna ale przerobiony jest wzmacniacz i zwiększona rozdzielczość. Artykuł był publikowany w Świecie Radio i tam wykorzystywał oryginalną płytkę AVT3003. Ale za żadne skarby nie mogę dopaść schematu i programu:( (Wsad znalazłem).
REKLAMA