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

MSP430F44x FFL+clock module

Dyrek 11 Kwi 2011 12:32 2454 4
REKLAMA
  • #1 9386690
    Dyrek
    Poziom 16  
    Witam
    Po latach wracam do głębszego poznania procków MSP430F a konkretnie MSP430F449 i mam problem z układem taktującym. Podłączając rezonator "zegarkowy" 32768Hz i wykorzystując ustrojstwo wewnątrz procka do mnożenia częstotliwości chcę uzyskać sygnał taktujący rzędu ok 8MHz. Postępuję według noty TI: Link tyle że jest tam według mnie nie do końca sprecyzowane co uzyskam konfigurując poszczególne rejestry a już tym bardziej nie zgadza się to z tym co uzyskuję w praktyce.
    Konkretnie chodzi o częstotliwość fDCOCLK którą wybieram jako sygnał dla MCLK i SMCLK. Według noty fDCOCLK=(N+1)*fcrystal dla wyzerowanego bitu DCOPLUS lub fDCOCLK=D*(N+1)*fcrystal dla ustawionego bitu DCOPLUS gdzie N jest określane przez bity w rejestrze SCFQCTL a D określają bity FLLDx w rejestrze SCFI0 w praktyce jednak wychodzi że przy DCOPLUS=1 fDCOCLK w przybliżeniu jest proporcjonalne do D a przy DCOPLUS=0 odwrotnie proporcjonalne. I jaki wpływ liczbowy na częstotliwość końcową mają bity FN_x w generatorze DCO bo ich zmiana znacząco zmienia częstotliwość wyjściową ale nie znalazłem wzoru w jaki sposób.

    To jest listing programu jaki używam do testów:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Przerwania od timera A używam do zapalania diody i odmierzania czasu za jej pomocą.

    Może trochę nie jasno wszystko opisałem więc uściślę pytanie: Czy ktoś zna faktyczne wzory na konfigurację rejestrów aby otrzymać faktyczną wartość częstotliwości taktującej bo to co podaje producent w nocie aplikacyjnej nijak się ma do tego co otrzymuję w testach?
    Potrzebuję znać konkretną wartość bo chce te procki wykorzystać do transmisji przez USART.

    Pozdrawiam
  • REKLAMA
  • #2 9389559
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #3 9389898
    Dyrek
    Poziom 16  
    Sęk w tym że zmiana FN_x powoduje zmianę częstotliwości wyjściowej u mnie.
    A wyniki są takie że przy ustawieniach jak w powyższym kodzie wszystko działa tak jak się należy czyli osiągam zamierzone 8MHz (a dokładnie 8388608Hz), pomiaru dokonuje za pomocą timera A ustawionego tak aby migał diodą z częstotliwością 1Hz - z sekundnikiem w ręku liczę mrugnięcia :-)
    Czyli raczej odpada możliwość że nie działa rezonator.
    Lecz częstotliwość rozjeżdża się o jakieś 15% gdy zmienię FN_x, przy niższym FN_x naliczam tylko 50 mrugnięć na minutę a przy wyższym FN_x ponad 70 mrugnięć. Dodatkowo zmiana FLLD_x o jedno "oczko" powinna teoretycznie podwoić lub podzielić częstotliwość przez dwa a u mnie podobnie jak FN_x zmienia ją w granicach 10-20%
    Przy tych samych ustawieniach zmieniając tylko FLLD na współczynnik podziału=1 powinienem otrzymać 32768*128=4194304Hz i mruganie diody raz na dwie sekundy, co się udało ale tylko gdy ustawiłem FN_x=0
    Podsumowując, mogę uzyskać częstotliwości jakie chcę ale muszę eksperymentalnie ustawiać rejestry i w jakiś sposób dokonać pomiaru czy się częstotliwość zgadza, nie mogę wyliczyć, ustawić jak trzeba i być pewny że wszystko jest ok :/
    Chyba spróbuję to w asemblerze napisać i sprawdzić czy tak samo się zachowuje.
    Czy jest możliwość że procki które były wysyłane w samplach różnią się od tych dostępnych normalnie w sprzedaży bo takie właśnie posiadam sprzed kilku lat.
  • REKLAMA
  • #4 9390152
    Konto nie istnieje
    Konto nie istnieje  
  • #5 9390328
    Dyrek
    Poziom 16  
    Ja też miałem kwarc na myśli (ten 32768Hz), czytając dokumentację zrozumiałem że FN_x właśnie ustala warunki pracy i przykładowo dla częstotliwości około 4MHz ustawienie FN_x na 1 lud 0 nie powinno mieć znaczenia a tymczasem u mnie zmienia to częstotliwość wyjściową dość znacznie. Tak że nadal nie wiem jak ustawiać te bity konkretne aby nie robić tego eksperymentalnie bo na dłuższą metę mija się to z celem.

    I jeszcze jedno pytanie - czy w trybie debugowania pod IAR jest normalne że uruchomiony program wykonuje się kilka razy wolniej niż normalnie bo przykładowo dioda powinnam i migać raz na sekundę a faktycznie miga raz na ok 4 sekundy, gdy odłączę programator to zaczyna działać normalnie według założeń.
REKLAMA