Настройка тактового генератора PIC24H

Visits: 855


От частоты тактового генератора зависит производительность, а также потребление тока микроконтроллером. От правильной настройки зависит надежность работы всего устройства.

Рассмотрим пример настройки частоты от внутреннего генератора с тактовой частой 7,37 мГц. Точность его настолько велика, что его можно использовать для множества приложений не требующих высокоточных временных интервалов.


Схема генератора.

Catcatcat_ch_music_color_02


Схема умножителя (PLL)

Catcatcat_ch_music_color_01

 Для настройки частоты с использованием умножителя необходимо соблюдать допуски частот, которые указаны на рисунке, а иначе возможность сбой PLL, что может привести не стабильной работы микроконтроллера, хотя могу сказать, что существует запас стабильности и возможно разгон микроконтроллера как минимум до 50 Mips.

Пример настройки для работы контроллера PIC24HJ128GP502 от внутреннего генератора на скорости 50 Mips.

Настройка регистра конфигураций

//FGS (0xf80004)
//General Code Segment Write Protect:
//General Segment Code Protection:
_FGS( GWRP_OFF & GSS_HIGH)
/*      |           +--------------------- High Security Code Protection is Enabled/Высокая степень защиты кода включена защита
 *      +--------------------------------- User program memory is not write-protected/Памяти программы пользователя не защищена от записи
 */
//FOSCSEL (0xf80006)
//Oscillator Mode:
//Internal External Switch Over Mode:
_FOSCSEL( FNOSC_FRCPLL & IESO_OFF)//(39.90 мА)// входная через умножитель
/*            |             +--------------------- Start up with user-selected oscillator/Начать работу с генератора выбранного пользователем
 *            +----------------------------------- Internal Fast RC (FRC) w/PLL/Внутренние Быстрый RC (FRC), с/PLL
 */

 Настройка генератора

// настройка делителей частоты
        CLKDIVbits.PLLPRE=2;    // N1 = 4
        PLLFBD = 107;           // M = 129
        CLKDIVbits.PLLPOST=0;   // N2 = 2

        __builtin_write_OSCCONH(0x01);
        __builtin_write_OSCCONL(OSCCON | 0x01);

// регистр калибровки внутреннего тактового генератора
       OSCTUNbits.TUN=-1;
// Ожидать пока не будет запущен выбранный генератор
        while (OSCCONbits.COSC != 0b001);
// Ожидать пока не будет запушен PLL
        while(OSCCONbits.LOCK!=1);

При этом надо указать

#define FCY 50208130UL      // определение тактовой частоты для макросов __delay_ms() и __delay_us()


Расчет тактовой частоты файл в формате Microsoft Excel 2010[wpdm_file id=228]