Views: 875
От частоты тактового генератора зависит производительность, а также потребление тока микроконтроллером. От правильной настройки зависит надежность работы всего устройства.
Рассмотрим пример настройки частоты от внутреннего генератора с тактовой частой 7,37 мГц. Точность его настолько велика, что его можно использовать для множества приложений не требующих высокоточных временных интервалов.
Схема генератора.
Схема умножителя (PLL)
Для настройки частоты с использованием умножителя необходимо соблюдать допуски частот, которые указаны на рисунке, а иначе возможность сбой 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]