Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

ATxmega128 - podlaczenie i programowanie ICS307-03

JohnCTN 03 Maj 2015 00:26 942 12
  • #1 03 Maj 2015 00:26
    JohnCTN
    Poziom 17  

    witam

    Jestem w trakcie pisania oprogramowania do układu , który tworzę.

    Układ oparty jest na mikrokontrolerze ATxmega128A1U-AU

    do mikrokontrolera podłączam za pośrednictwem 3 linii generator fali prostokątnej ICS307-03. Aby ustawić odpowiednie taktowanie tego generatora, trzeba wysłać szeregowo 132 bity.

    Problem w tym, ze za chiny nie wiem jak obliczyć ciąg tego ciągu :-(

    Pewnie problem polega na tym, ze nie za bardzo jestem dobry z angielskiego a jedyny pdf, jaki mam właśnie jest po Angielsku.

    opierałem się wzorami jakie są zamieszczone w pdf, ale nie mogę uzyskać potrzebnej mi częstotliwości wyjściowej na CLK1.

    zrobiłem więc dużą tabele w Excelu i wyszukałem ręcznie potrzebnych mi częstotliwości. Ale chyba cos jest nie tak ;-(

    Potrzebuję uzyskać częstotliwość

    1,02300 MHz
    0,98500 MHz

    obie częstotliwości będę przełączał programowo, natomiast kwarc wejściowy jaki obecnie wlutowałem do układu to 6MHz (taki mi pasował według mojej tabeli w Exelu - oczywiście mogę go zmienić)

    Najważniejsze jest abym mógł wygenerować potrzebne mi częstotliwości.

    Pomoże ktoś ?

    0 12
  • #2 03 Maj 2015 01:39
    Marek_Skalski
    Moderator Projektowanie

    Podaj jakie ustawienia i wartości chcesz zapisać, to może uda się to spakować.
    Wybrałeś układ, którego dokumentacja jest strasznie zagmatwana.
    Może to marna rada, ale zobacz na układy z serii CS2000 od Cirrus Logic. Bez problemu wygenerujesz zadane częstotliwości, a cena i dostępność ta sama.

    0
  • #3 03 Maj 2015 09:23
    373522
    Użytkownik usunął konto  
  • #4 03 Maj 2015 11:08
    JohnCTN
    Poziom 17  

    Nie sprawdzałem jak to jest w innych układach, ale w tym ICS307-03 nie ma możliwości programowania na "stale" , programuje się go tylko i wyłącznie do rejestru RAM więc układ po włączeniu zasilania trzeba na samym początku zainicjować wysyłając ciąg 132 bitów.

    chcę uzyskać na wyjściu CLK1 dwie programowalne częstotliwości:

    1,02300 MHz
    0,98500 MHz

    Obecnie do układu podpiąłem kwarc 6MHz, ale nie jestem pewny czy nie powinien być z przedziału 10MHz-50MHz

    Marek, to bardzo dobra rada, pewnie będę zmieniał później projekt płytki i wtedy może poszukam lepszego rozwiązania niż ICS307-03, no chyba, ze uda mi się rozwiązać problem i uzyskam w/w częstotliwości.


    niveasoft
    piszesz, ze mam odjąć 2 lub 8 od wartości dzielnika ... oki , ale skąd mam wiedzieć jaka jest wartość tego dzielnika ?
    Nie powinienem mieć problemu z ustaleniem ciągu bitów, ale problem jest w samym obliczeniu odpowiednich wartości dla zmiennych:




    Teraz nie pamiętam skąd wziąłem ten układ... (projekt robię już dość długo).
    Ktoś mi polecił inną serie generatora ICS-307... ja znalazłem wersje 3, która ma duży zakres programowanych częstotliwości, tak więc jakoś tak wyszło.

    Teraz muszę pomęczyć się z tym układem :-(



    Wszystko się rozbija o wzór:

    ATxmega128 - podlaczenie i programowanie ICS307-03

    Gdzie zakładam, ze:

    CLK1Frequency - to częstotliwość, którą chcę uzyskać na wyjściu CLK1
    InputFrequency - to częstotliwość wejściowa podana do układu ICS307-03 (np. zastosowany kwarc)
    V - to VCO Divider (wartość z przedziału 12-2055)
    R - Reference Divider Word (wartość z przedziału 1-2055)
    OD - Output Divider (wartość z tabeli 5,6,lub 7 - w moim wypadku interesuje mnie tabela 5 czyli wartość z przedziału 2-8232)

    z następnego wzoru mamy zmienne:
    VCOmin - zakładam, ze to wartość 12
    VCOMaxfreq - tutaj nie wiem o co chodzi... może 2055

    ta dokumentacja pdf mnie rozwala :-(

    0
  • Pomocny post
    #5 03 Maj 2015 13:19
    Marek_Skalski
    Moderator Projektowanie

    VCOmin = 100MHz, VCOmax = 730MHz z wieloma warunkami. Tabela na stronie 11.
    Przyjmijmy, że VCO pracuje w okolicach 230MHz..270MHz; średnia geometryczna z granic.
    Jeżeli użyjesz kwarcu 11,0592MHz, to możesz na przykład użyć takich ustawień:
    V=333, R=15, OD=240 -> fVCO = ~245MHz, fout = 1,022976MHz, co daje błąd względny rzędu -0,002%.
    V=330, R=15, OD=247 -> fVCO = ~243MHz, fout = 0,985030MHz, co daje błąd względny rzędu 0,003%.
    Na pewno jest jeszcze wiele innych kombinacji, ale te znalazłem na szybko. Jeżeli masz kwarc 6MHz, to teraz możesz spróbować znaleźć właściwe wartości, np. 670/15/262.
    Błąd rzędu 50ppm jest do przyjęcia; to błąd typowego kwarcu.

    0
  • #6 03 Maj 2015 19:13
    JohnCTN
    Poziom 17  

    Marek, powiedz mi jak dobrałeś wartości OD, R, V ???

    trafić w takie aby dopasować częstotliwość nie jest łatwe :-(

    0
  • #7 03 Maj 2015 19:19
    373522
    Użytkownik usunął konto  
  • #8 03 Maj 2015 20:46
    JohnCTN
    Poziom 17  

    Widzialem, ale cos mi tam nie pasuje, nie mogę wybrać ICS307-03

    ale udało mi się znaleźć ustawienia.

    Marek możesz spojrzeć czy takie ustawienia byłyby dobre?

    kwarc 6,00MHz

    wartość wyjściowa na CLK1 = 0,985MHz
    Q=6,00
    V=197
    R=5
    OD=240

    wartość wyjściowa na CLK = 1,023MHz
    Q=6,00
    V=341
    R=8
    OD=250

    jeżeli dane są dobre to pozostało tylko stworzyć ciągi 132bitów

    0
  • #9 03 Maj 2015 22:56
    Marek_Skalski
    Moderator Projektowanie

    Moim zdaniem wartości są ok. Zakoduj i zobacz co układ pokaże.
    Zwróć uwagę, że pierwsza tabela to wartości R, a druga to V. Odwrotnie niż w obliczeniach. Dla R=5 to będzie 0b0000000110010. Dla V=197 to będzie 0b00010111101.
    Nie wiem jaki rezystor jest podłączony, ani jaki prąd ustawić, przez co nie zakoduję pełnych słów sterujących.
    Dla OD = 240 wychodzi mi: 0b001110101001101.
    Do tego pozostałe bity... trochę porozrzucane.
    Powodzenia!

    0
  • #10 03 Maj 2015 23:52
    JohnCTN
    Poziom 17  

    hmmm rezystor... jeżeli piszesz o rezystorach na wyjściach CLK to ja nic nie dałem i sygnał clock od razu wchodzi do układu SN74LVC2G157 (2 linie na 1 linie - w tym układzie przełączam sygnał pomiędzy dwoma generatorami clock )

    0
  • #11 23 Maj 2015 17:17
    JohnCTN
    Poziom 17  

    Marek, możesz mi powiedzieć od czego zależne są te dwa parametry: Loop filter Resistor (2 bity) i Charge Pump Current (5 bitów). Szczerze mówiąc oba parametry dotyczą jednego bloku, ale ja nie wiem co mam wstawić i od czego to zależy.

    0
  • #12 06 Cze 2015 21:01
    JohnCTN
    Poziom 17  

    Wracam do tematu bo jednak się okazuje że układ generuje wartości z kosmosu :(

    Tabela 1. Input Divider - tabela prosta więc dane łatwo obliczyć:

    1= 0b0000000000000
    2= 0b0000000000001

    wartości od 3 do 17 liczymy w następujący sposób:

    Od wartości Divide Value (odejmujemy 2, następnie konwertujemy do zapisu binarnego (wstawiamy wynik w bity [5..2]), wartość binarną konwertujemy przez inwersje bitów (inwersja bitów [5..2]) i wstawiamy wynik w bity [5..2]. na końcu ustawiamy bity [1..0] na wartość 10.

    wartości od 18 do 2055 liczymy w następujący sposób:

    Od wartości Divide Value (odejmujemy 8, następnie konwertujemy do zapisu binarnego (wstawiamy wynik w bity [12..2]), wartość binarną konwertujemy przez inwersje bitów (inwersja bitów [12..2]) i wstawiamy wynik w bity [12..2]. na końcu ustawiamy bity [1..0] na wartość 11.

    Tabela 2. VCO Divider

    Od wartości Divide Value (12-2055) odejmujemy 8 i wstawiamy w bity [23..13] Maksymalną wartoscią wstawianą w bity [23..13] będzie 11 bitowa wartość 2047 a najmniejszą 4.

    Tabela 3. Charge Pump current
    Tabela jest 5 bitowa wiec jest możliwość ustawienia 32 możliwości, wszystkie możliwości są podane tak więc wystarczy wybrać uA i wstawić odpowiednią wartość w ciąg bitów.

    Problem jest taki , ze nie wiem jaką wartość wybrać ? Sprawdziłem Sobie jaką wartość uA powinna dochodzić do układu, który ma podpięte wyjście ICS307-03 no i wychodzi mi wg noty PDF (układ SN74LVC2G157), ze powinienem ustawić
    wartość max 5uA (wiec mogę ustawić bity 1,1,1,1,0 - 3,75uA)
    ale nie jestem tego do końca pewny :-(

    Tabela 4. Loop filter Resistor.
    Dwa bity wartość od 0 do 3 - będę eksperymentował - nie wiem od czego zależy ta wartość tak więc tez nie wiem co wstawić :-(

    Tabela 5. Output Divider For Output 1
    Ta tabela jest dziwna ....
    wartości Divide Value od 2 do 37 są proste i zrozumiale, natomiast wartości od 38 do 8232 to dla mnie jakiś kosmos :-( nie wiem jak mam to liczyć , próbowałem na wszelkie sposoby i nie wychodzi mi to gdy porównuje wyniki do wartości , które już widnieją w tabeli...

    Ta tabela jest najważniejsza w sumie i nie mogę sobie z nią poradzić :(

    ATxmega128 - podlaczenie i programowanie ICS307-03

    Może mi ktoś wyjaśnić jak mam ustawiać bity w tej tabeli ?

    mam dwie wartości do wstawienia 240 i 250.

    0
  • #13 07 Cze 2015 00:34
    Marek_Skalski
    Moderator Projektowanie

    Przykładowa wartość to 240.
    Jeżeli dzielnik ma być w zakresie 38-8232, to bity 97..95 muszą być ustawione na 0b 101.
    Ponieważ można kodować tylko 8 bitów znaczących, to dla wartości >255 trzeba zmienić wykładnik; bity 100..99. Tutaj nie zachodzi i te bity mają wartości 0b 00.
    Bit 98 jest używany jako dodatkowy. Tutaj jest zbędny, czyli 0, ale ze względu na negację powinien być ustawiony.
    Na bitach 109..101 kodujesz wartość, przy czym ta wartość jest 2x mniejsza i dodatkowo pomniejszona o 3. Czyli 240/2-3 = 117 = 0x75.
    Finalnie wartość do wpisania to 0b 01110101001101. Tak jak podałem poprzednio.
    Jeżeli wartość wynosi 250, to:
    97..95 = 0b 101
    98 = 0b 1
    100..99 = 0b 00
    109..101 = 1111010
    Finalnie zapisujesz 0b 01111010001101
    Tak odczytuję treść dokumentacji i takie wartości zapisałbym do rejestrów.
    Co do rezystorów i pompy ładunkowej... Nie wiem. Musisz eksperymentować, jeżeli nie ma żadnych innych informacji dla tego układu.

    0