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.

Aktywacja CLKOUT w MCP2515

rosak 03 Kwi 2017 18:18 441 3
  • #1 03 Kwi 2017 18:18
    rosak
    Poziom 22  

    Witam,
    mam lamerskie pytanie dotyczące programowania w C.
    Chciałbym ustawić pin CLKOUT kontrolera CAN MCP2515 na wyjście zegara dla mikrokontrolera, z mnożnikiem 1.
    Opis z datasheet:
    "The CLKOUT pin is provided to the system designer for
    use as the main system clock or as a clock input for
    other devices in the system. The CLKOUT has an internal
    prescaler which can divide FOSC by 1, 2, 4 and 8.
    The CLKOUT function is enabled and the prescaler is
    selected via the CANCNTRL register"

    Biblioteka mcp_can_dfs.h zawiera:

    Code:
    /*
    
     *   CANCTRL Register Values
     */
    #define CLKOUT_ENABLE   0x04
    #define CLKOUT_DISABLE  0x00
    #define CLKOUT_PS1      0x00
    #define CLKOUT_PS2      0x01
    #define CLKOUT_PS4      0x02
    #define CLKOUT_PS8      0x03


    więc trzeba tylko zmienić wartości, niestety nie wiem na jakie.

    Z góry dzięki za pomoc.

    0 3
  • Pomocny post
    #2 04 Kwi 2017 11:59
    alecki99
    Poziom 14  

    Domyślnie po resecie na wyjściu CLKOUT powinien być zegar FOSC podzielony przez 8. To tak dla weryfikacji.
    Żeby na wyjściu CLKOUT był zegar z mnożnikiem 1, trzeba wpisać zera do dwóch ostatnich rejestru CANCTRL.

    Jeśli robić to "po ludzku" z wykorzystaniem owych #define, wtedy istotne z jakiego kompilatora kolega korzysta.

    Nawiasem, zauważyłem że w datasheecie rejestr ma dwie nazwy: CANCTRL i CANCNTRL...

    Pozdrawiam,
    Alek

    0
  • #3 04 Kwi 2017 17:48
    rosak
    Poziom 22  

    Dziękuję Alek za odpowiedź.
    W sumie miałem skasować ten temat, bo doszedłem do wniosku, że to nie jest najlepszy pomysł aby klokować uc z zewnętrznego układu. Myślę, że lepiej zrobić to na odwrót, ale nie wiedziałem, że z Atmega328 da się wyciągnąć CKOUT.
    Niemniej jednak chciałbym się dowiedzieć, skąd biorą się te wartości o które pytałem, "0x04", 0x84" itd, umiałbyś to w miarę prosto wytłumaczyć? Domyślnie w MCP2515 na wyjściu CLKOUT jest SOF (Start-of-Frame), nie zegar.

    0
  • Pomocny post
    #4 04 Kwi 2017 21:46
    alecki99
    Poziom 14  

    Muszę się poprawić.
    Ponieważ MCP2515 jest podłączony do kontrolera przez SPI, to rejestru CANCTRL nie można ustawiać tak jak napisałem. To, co chcemy wpisać do rejestru CANCTRL trzeba wysłać jako parametr komendy WRITE albo jeśli chcemy zmienić pojedyncze bity w tym rejestrze należy użyć instrukcji BIT MODIFY.

    Żeby wyzerować dwa najmłodsze bity rejestru CANCTRL - to według drugiego sposobu - przez SPI należy wysłać po kolei takie bajty:

    MCP_BITMOD (komenda modyfikacji bitów)
    MCP_CANCTRL (adres rejestru CANCTRL)
    0x03 (bajt maski dwóch najmłodszych bitów)
    CLKOUT_PS1 (bajt danych z dwoma najmłodszymi bitami wyzerowanymi)

    0