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

[Rozwiązano] Jak przeliczać wartości częstotliwości dla TSA6057 w AVR C?

mateusz19955 16 Kwi 2017 15:35 1383 12
REKLAMA
  • #1 16415987
    mateusz19955
    Poziom 13  
    Witam,
    Mam mały problem z tym układem. Czytałem w sieci, że do komunikacji z tym układem potrzeba 6 bajtów. Pierwszy to adres układu o wartości 198 lub 196, drugi to subadres o wartości 0, potem są DB0, DB1, DB2 tutaj ustawiamy dzielnik na krok 1, 10 lub 25khz, zakres pracy od 512khz do 30mhz lub 30mhz do 150mhz, praca w FM lub AM i DB3 w którym ustawiamy same zera bo to jest jakiś rejestr testowy wykorzystywany podczas produkcji.
    I moje pytanie jest właśnie o te bajty DB0 i DB1. Do tych bajtów należy zapisywać wartość odpowiadającą częstotliwości jaką chcemy uzyskać, ale jak przeliczać tą wartość? Bo ona musi być zapisana od S0 do S16. Czytałem też, że S15 i S16 znajdujące się w DB2 powinny mieć wartość 1, ale o sposobie zapisu danych do tych S0 do S14 nic nie mogę znaleźć. Może mi ktoś to wytłumaczyć w jakiś w miarę prosty sposób bo nie mogę tego zrozumieć.
    Programuję w języku C dla AVR w Atmel Studio 6.
  • REKLAMA
  • #2 16416038
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 16416058
    mateusz19955
    Poziom 13  
    Ok, w nocie są pokazane ramki do komunikacji, ale jak zapisać np, 94mhz do tego układu? Z krokiem syntezy 10khz jest to 94000. Ale ja tak dużą wartość zapisać tam? Gdyby można było zapisać tylko do db0 albo do db1 to bez problemu, ale jak tą wartość podzielić na db0 i db1?
    Znalazłem tam taki wzór: (S0*2^0+S1*2^1+S15*2^15+S16*2^16)*Fref.
    Ale jak z tego wzoru korzystać?
  • Pomocny post
    #4 16416092
    Massive O. Penetrato
    Poziom 11  
    Odpowiednie bity w bajtach DB0 i DB1 oraz kawałku DB2 określają stopień podziału częstości wejściowej - z VCO. Dwa najstarsze bity w bajcie DB2 określają jaka będzie częstość referencyjna dla detektora fazy: 1 kHz, 10 kHz lub 25 kHz (to jest z krokiem syntezy równoważne)
    Przyjmijmy że chcemy krok 1 kHz w FM.
    Wtedy aby zsyntezować 94 MHz podzielnik musi mieć wartość 94 MHz / 1 kHz = 94000 a binarnie 10110111100110000 i tę wartość trzeba przesłać do układu syntezy zakodowaną w bajtach DB0, DB1 i kawałku DB2. Aby uzyskać 94.1 MHz to podzielnik musi być 94.1 MHz/1 kHz = 94100 i tak dalej.
  • #5 16416105
    mateusz19955
    Poziom 13  
    Ok, czyli dla częst. 94mhz beędzie tak:

    DB0 = &b10110111 ta ostatnia 1 to bit CP
    DB1 = &b11001100
    DB2 = &b(bity refi pozostałe)00
    Dobrze to rozumiem?
  • REKLAMA
  • #6 16416140
    Massive O. Penetrato
    Poziom 11  
    Napisz jak podzieliłeś słowo programujące podzielnik bo coś się nie zgadza. Bity D7:D1 w bajcie DB0 mają zawierać najmłodsze 7 bitów podzielnika i na oko widać że to nie jest to.
  • REKLAMA
  • #7 16416144
    mateusz19955
    Poziom 13  
    Właśnie nie wiem jak mi to wyszło, po prostu podzieliłem na pół tą twoją wartość binarną i dodałem tylko tą 1 na cp. Nie mogę tego za bardzo pojąć.
  • #8 16416180
    Massive O. Penetrato
    Poziom 11  
    mateusz19955 napisał:
    Właśnie nie wiem jak mi to wyszło, po prostu podzieliłem na pół tą twoją wartość binarną i dodałem tylko tą 1 na cp. Nie mogę tego za bardzo pojąć.


    ZObacz jeszcze raz do data sheey ktore bity słowa programującego są w jakim bajcie i po prostu je wpisz. W wartości dzielnika 7 najmłodszych bitów to 10110111100110000 i one mają być DB0. A reszta tak jak w datasheet.
  • Pomocny post
    #10 16416201
    Massive O. Penetrato
    Poziom 11  
    Wyglada ok!
  • #12 16416244
    Konto nie istnieje
    Konto nie istnieje  
REKLAMA