Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Установка тактовой частоты PIC32
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
ZEbr
Есть кварц 16MHz.
Настраиваю тактовую частоту PIC32 следующим образом:

#pragma config FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRI, FPBDIV = DIV_8

#define SYS_FREQ (80000000L)

.........

main()
{
SYSTEMConfig(SYS_FREQ, SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
.......
while(1)
{
PORTD=1;
PORTD=0;
}
}
Смотрю частоту дерганий ножки проца на осциллографе, и вижу ,что время между передним фронтом 1-го и 2-го включения составляет 870нс .
Это явно не 80MHz.

Помогите пожалуйста настроить тактовую частоту!
Заранее спасибо!
evc
Цитата(ZEbr @ May 12 2014, 19:03) *
Есть кварц 16MHz. ...

Смотрим конфигурацию осцилятора (стр.3).
Видим, что для того, что бы на входе PLL была частота 4 .. 5MHz, нужно сначала разделить эти 16 на 4. Так что должна быть директива в прагме:
FPLLIDIV = DIV_4. Потом эти 4 (которые получаем на входе PLL) нужно умножить на 20, значить FPLLMUL = MUL_20. Дальше, эту частоту без изменений нужно подавать дальше, т.е. FPLLODIV = DIV_1:
Код
#pragma config FPLLODIV = DIV_1, FPLLMUL = MUL_20, FPLLIDIV = DIV_4, POSCMOD = HS, FPBDIV = DIV_1, FNOSC = PRIPLL

А потом, что бы "выжать" максимальную частоту, нужно пользоваться не "PORTX =", а "PORTXINV =":
Код
while(1){
     PORTDINV = 1;
}

При такой конфигурации, частота на выводе получается около 16МГц. Это из-за того, что цикл, организованный С инструкцией while, тоже занимает несколько машинных циклов. На самом деле самую высокую частоту можно увидеть вот таким кодом:
Код
while(1){
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
    PORTDINV = 1;
     ....
}

конечно, только во время исполнения тела цикла.

ПП Некоторые образцы 32-го допускают небольшой (без экстремизма, конечно) "оверклокинг"... но это отдельная тема.
ZEbr
То есть как я понял конфигурационные биты которые вы написали соответствуют тактовой частоте проца в 80MHz.
Я пробовал так писать но при выставление FNOSC = PRIPLL девайс не определяется (MPLAB_ICD3).
Я обязательно еще так попробую!
А как насчет альтернативной установки частоты?
Lagman
А что pic умеет дергать ножками с частотой 80 мгц?
P.s. а чего это старые сообщения повылезали в непрочтенные.
Valentine Loginov
Цитата(Lagman @ Jul 5 2014, 17:59) *
А что pic умеет дергать ножками с частотой 80 мгц?
P.s. а чего это старые сообщения повылезали в непрочтенные.

Максимальная частота переферии 50 МГц.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.