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

Visits: 4247


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

Описание:

__CONFIG(n,x); // где n – номер регистра, x – данные конфигурации

Пример:

__CONFIG(1, HSPLL); // запустить генератор с умножителем
__CONFIG(2, BORDIS & BORV45 & PWRTEN & WDTDIS & WDTPS1);
__CONFIG(3, CCP2RB3);

Как и где посмотреть какие есть регистры в контроллере – смотрим в описании на контроллер.

Как эти регистры описываются для С?

Лезем в каталог C:\Program Files\HI-TECH Software\PICC-18\PRO\9.66\include\legacy (установки компилятора) и открываем файл, например, ppic18f452.h. В нем ищем раздел // Configuration bit values

В этом разделе смотрим, как описываются биты настройки конфигурации.


Пример настройки контроллера pic18f452

__CONFIG(1, HS; OSCSDIS);
//           |     +------ переключатель выбора генератора отключен
//           +------------ запустить генератор в режиме HS
__CONFIG(2, BOREN; BORV45; PWRTEN; WDTEN; WDTPS128);
//             |      |      |       |       +--предделитель таймера настроен на 128
//             |      |      |       +--сторожевой таймер включен
//             |      |      +--активировать таймер задержки включения
//             |      +--порог активации сброса 4,5 вольта
//             +--функция сброса по понижению питания активна
__CONFIG(3, CCP2RB3); //выход модуля CCP2 настроен на вывод RB3
__CONFIG(4, DEBUGDIS; LVPDIS; STVRDIS);
//             |        |        +--сброс по переполнению стека отключен
//             |        +--низковольтное программирование отключено
//             +--режим внутреннего отладчика отключен
__CONFIG(5, CPALL); // установлена защита на всю память
__CONFIG(6, WPALL); // защита по записи установлена на всю память
__CONFIG(7, TRU);   // табличное чтение памяти программ разрешено

Пример настройки для PIC18F46K22

__CONFIG(1,
 // FOSC_HSMP & //
 // FOSC_INTIO7 &
 FOSC_INTIO67 & // внутрений генератор: выводы генератора используются как выводы i/o
 PLLCFG_ON & // умножитель включен
 PRICLKEN_OFF & // первичный генератор не может быть отключен программно
 FCMEN_OFF & // Отказоустойчивый Монитор Генератора отключен
 IESO_OFF); // режим переключения генераторов отключен
__CONFIG(2,
 PWRTEN_ON & // таймер задержки влючения по подаче питания включен
 BOREN_ON & // сброс по понижению питания влючен
 BORV_220 & // уровень сброса 2,2 вольта
 WDTEN_ON & // сторожевой таймер
 WDTPS_32768); // предделитель сторожевого таймера
__CONFIG(3,
 CCP2MX_PORTC1 & // CCP2 подключен к PORTC1
 PBADEN_OFF & // порт PORTB скофигурирован при подаче питания как цифровой
 CCP3MX_PORTB5 & // CCP3 подключен к PORTB5
 HFOFST_OFF & // запуск задерживается до появления устойчивого состояния генератора
 T3CMX_PORTC0 & // T3 подключен к PORTC0
 P2BMX_PORTD2 & // P2B подключен к PORTD2
 MCLRE_EXTMCLR); // MCLRE включен
__CONFIG(4,
 STVREN_OFF & // сброс по переполнению стека отключен
 LVP_OFF & // поддержка низковольного программирования отключена
 XINST_OFF & // поддержка расширенных команд отключена
 DEBUG_OFF); // встроенный дебагер отключен
__CONFIG(5,
 CP0_ON & // Block 0 (000640-003FFFh) защищен
 CP1_ON & // Block 1 (004000-007FFFh) защищен
 CP2_ON & // Block 2 (006400-00BFFFh) защищен
 CP3_ON & // Block 3 (00C000-00FFFFh) защищен
 CPB_ON & // Boot block (000000-0007FFh) защищен
 CPD_ON); // Data EEPROM защищен
__CONFIG(6,
 WRT0_OFF & // Block 0 (000640-003FFFh) запись разрешена
 WRT1_OFF & // Block 1 (004000-007FFFh) запись разрешена
 WRT2_OFF & // Block 2 (006400-00BFFFh) запись разрешена
 WRT3_OFF & // Block 3 (00C000-00FFFFh) запись разрешена
 WRTC_OFF & // Регистр конфигурации - запись разрешена
 WRTB_OFF & // Блок загрузки (000000-0007FFh)- запись разрешена
 WRTD_OFF); // Запись в EEPROM - запись разрешена
__CONFIG(7,
 EBTR0_OFF & // Block 0 (000640-003FFFh) табличное чтение - разрешено
 EBTR1_OFF & // Block 1 (004000-007FFFh) табличное чтение - разрешено
 EBTR2_OFF & // Block 2 (006400-00BFFFh) табличное чтение - разрешено
 EBTR3_OFF & // Block 3 (00C000-00FFFFh) табличное чтение - разрешено
 EBTRB_OFF); // Boot Block (000000-0007FFh) табличное чтение - разрешено
//---------------------------------------------------------------

Пример настройки регистров PIC16F877A

__CONFIG(
 FOSC_HS & // HS oscillator
 WDTE_ON & // WDT enabled
 PWRTE_ON & // PWRT enabled
 BOREN_ON & // BOR enabled
 LVP_OFF & // Low-Voltage
 CPD_OFF & // Data EEPROM code-protected
 WRT_OFF & // Write protection off
 DEBUG_OFF & // In-Circuit Debugger disabled
 CP_OFF); // All program memory code-protected
//-----------------------------------------------

Пример для XC8 контроллер PIC16F1829

//================================================================================
// конфигурирование контроллера PIC16F1829
//---------------------------------------------------------------------------
// конфигурирование контроллера (регистры конфигурации)
__CONFIG(
 FOSC_INTOSC & 		// внутрений генератор, выводы генератора и спользуются как порты ввода вывода
 WDTE_NSLEEP &		// Сторожевой таймер включен в рабочем режиме, выключен в режиме сна
 PWRTE_OFF	&		// Таймер задержки включения питания-включен
 MCLRE_OFF	&		// вывод MCLR/VPP фунцция RA3
 CP_ON		&		// Защита чтения памяти програм - включена
 CPD_ON		&		// Защита чтения памяти данных (EPPROM) - включена
 BOREN_ON	&		// Сброс по понижению питания отключен
 CLKOUTEN_OFF	&	// Фунцйия CLKOUT выхода тактовой частоты на вывод генератора - отключена
 IESO_OFF	&		// Функция переключателя Internal/External генратор - отключена
 FCMEN_OFF);		// Монитор генератора бесперебойной работы - отключен

__CONFIG(
 WRT_ALL & 			// Память программ - защищена от записи
 PLLEN_ON 	&		// Внутренний умножитель 4x PLL - включен
 STVREN_OFF & 		// сброс по переполнению стека отключен 
 BORV_LO 	&		// Уровень сброса по понижению питания установлен на 2.7V
 LVP_OFF);			// Низковольтное программирование отключено
//================================================================================

 Варианты альтернативной настройки регистров конфигурации для контроллера PIC18F25K20

Microchip MPLAB XC8 C Compiler V1.12

вариант 1

// конфигурирование контроллера
__CONFIG(1, FOSC_INTIO67 & FCMEN_OFF & IESO_OFF);
//		|               |           +---Отключен режим переключения Генератора
//		|               +--Отказоустойчивый Монитор Генератора отключен
//		+--Выбор Генератора, Внутренний генератор, функция порта на RA6 и RA7
//
__CONFIG(2L, PWRT_ON & BOREN_ON & BORV_27);
//		|	|           +---Уровень напряжения срабатывания сброс при понижении питания 2.7 В
//		|	+---Сброс по понижению питания
//		+---Задежка запуска процессора при подаче питания (включена)
//
__CONFIG(2H, WDTEN_ON & WDTPS_1024);
//		|	+---1:1024 задежка страбатывания сторожевого таймера.	
//		+---сторожевой таймер включен
//
__CONFIG(3, CCP2MX_PORTBE & PBADEN_OFF & LPT1OSC_OFF & HFOFST_OFF & MCLRE_ON);
//		|		|           |               |		+---MCLR включен
//		|		|           |               +---HF-INTOSC Быстрый Запуск - отключен
//		|		|           +---Режим малой мощности Генератора Timer1 Отключен, T1 работает в стандартном режиме мощности.
//		|		+---Режим работы порта PORTB после сброса, выводы PORTB<4:0> конфигурированы на цифровой ввод		
//		+---Выход CCP2 подключен к выводу RB3.		
__CONFIG(4, STVREN_OFF	& LVP_OFF & XINST_OFF & DEBUG_OFF);
//		|           |		|           +---Режим фонового отладчика отключен.
//		|           |		+---Расширенный набор команд отключен
//		|           +---Низковольтное программирование выключенно.
//		+---Сброс при переполнении стека отключен.
//
__CONFIG(5, CP0_ON & CP1_ON & CP2_ON & CP3_ON & CPB_ON & CPD_ON);
//		|	|           |       |           |	+---защита EEPROM данных активирована
//		|	|           |       |		+---защита блока загрузки активирована
//		|	|           |       +---защита кода блока 3 активирована
//		|	|           +---защита кода блока 2 активирована
//		|	+---защита кода блока 1 активирована
//		+---защита кода блока 0 активирована
//
__CONFIG(6, WRT0_OFF & WRT1_OFF & WRT2_OFF & WRT3_OFF & WRTB_OFF & WRTC_OFF & WRTD_OFF);
//		|       |           |		|           |           |	+---Защита записи в EEPROM память
//		|       |           |		|           |		+---Защита записи в регистр конфирураций
//		|	|           |		|           +---Защита записи в блок загрузки
//		|	|           |		+---защита записи в блок 3
//		|	|           +---защита записи в блок 2
//		|	+---защита записи в блок 1
//		+---защита записи в блок 0  
__CONFIG(7, EBTR0_OFF &  EBTR1_OFF &  EBTR2_OFF &  EBTR3_OFF &  EBTRB_OFF);
//		|           |           |               |           |
//		|           |           |		|           +---Защита от табличного чтения блок загрузки
//		|           |		|		+---Защита от табличного чтения блока памяти 3
//		|           |		+---Защита от табличного чтения блока памяти 2
//		|           +---Защита от табличного чтения блока памяти 1
//		+---Защита от табличного чтения блока памяти 0
//-------------------------------------------------------------------------------------------------------

вариант 2

//---------------------------------------------------------------------------
// конфигурирование контроллера
#pragma config FOSC = INTIO67	// Internal oscillator block, port function on RA6 and RA7/Выбор Генератора, Внутренний генератор, функция порта на RA6 и RA7
#pragma config FCMEN = OFF	// Fail-Safe Clock Monitor disabled/Отказоустойчивый Монитор Генератора отключен
#pragma config IESO = OFF       // Oscillator Switchover mode disabled/Отключен режим переключения Генератора
#pragma config PWRT = ON  	// PWRT enabled/Задежка запуска процессора при подаче питания (включена)
#pragma config BOREN = ON 	// Brown-out Reset enabled and controlled by software (SBOREN is enabled)/Сброс по понижению питания
#pragma config BORV = 27	// VBOR set to 2.7 V nominalУровень напряжения срабатывания сброс при понижении питания 2.7 В
#pragma config WDTEN = ON 	// WDT is always enabled. SWDTEN bit has no effect/сторожевой таймер включен
#pragma config WDTPS = 8192	// 1:8192/ задежка страбатывания сторожевого таймера.
#pragma config CCP2MX = PORTBE	// CCP2 input/output is multiplexed with RB3/Выход CCP2 подключен к выводу RB3.
#pragma config PBADEN = OFF	// PORTB<4:0> pins are configured as digital I/O on Reset
#pragma config LPT1OSC = OFF	// Timer1 configured for higher power operation
#pragma config HFOFST = OFF     // The system clock is held off until the HFINTOSC is stable.
#pragma config MCLRE = ON       // MCLR pin enabled; RE3 input pin disabled
#pragma config STVREN = OFF     // Stack full/underflow will not cause Reset
#pragma config LVP = OFF        // Single-Supply ICSP disabled
#pragma config XINST = OFF      // Instruction set extension and Indexed Addressing mode disabled (Legacy mode)
#pragma config DEBUG = OFF      // Background debugger disabled, RB6 and RB7 configured as general purpose I/O pins
#pragma config CP0 = ON         // Block 0 (000800-003FFFh) code-protected
#pragma config CP1 = ON         // Block 1 (004000-007FFFh) code-protected
#pragma config CP2 = ON         // Block 2 (008000-00BFFFh) code-protected
#pragma config CP3 = ON         // Block 3 (00C000-00FFFFh) code-protected
#pragma config CPB = ON         // Boot block (000000-0007FFh) code-protected
#pragma config CPD = ON         // Data EEPROM code-protected
#pragma config WRT0 = OFF       // Block 0 (000800-003FFFh) not write-protected
#pragma config WRT1 = OFF       // Block 1 (004000-007FFFh) not write-protected
#pragma config WRT2 = OFF       // Block 2 (008000-00BFFFh) not write-protected
#pragma config WRT3 = OFF       // Block 3 (00C000h-00FFFFh) not write-protected
#pragma config WRTC = OFF       // Configuration registers (300000-3000FFh) not write-protected
#pragma config WRTB = OFF       // Boot Block (000000-0007FFh) not write-protected
#pragma config WRTD = OFF       // Data EEPROM not write-protected
#pragma config EBTR0 = OFF      // Block 0 (000800-003FFFh) not protected from table reads executed in other blocks
#pragma config EBTR1 = OFF      // Block 1 (004000-007FFFh) not protected from table reads executed in other blocks
#pragma config EBTR2 = OFF      // Block 2 (008000-00BFFFh) not protected from table reads executed in other blocks
#pragma config EBTR3 = OFF      // Block 3 (00C000-00FFFFh) not protected from table reads executed in other blocks
#pragma config EBTRB = OFF      // Boot Block (000000-0007FFh) not protected from table reads executed in other blocks

//---------------------------------------------------------------------------

примеры общего вида конфигураций

#include <xc.h>
__CONFIG(WDTDIS & HS & UNPROTECT);

для PIC10/12/16

#include <xc.h>
__CONFIG(WDTDIS & XT & UNPROTECT); // Program config. word 1
__CONFIG(FCMEN);

для PIC18

__CONFIG(2, BW8 & PWRTDIS & WDTPS1 & WDTEN);

Это может быть интересно


  • MPLAB® Harmony – или как это просто! Часть 4.MPLAB® Harmony – или как это просто! Часть 4.
    Visits: 1943 Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от …
  • Ultrasonic Level Meters – ULM –53LUltrasonic Level Meters – ULM –53L
    Visits: 697 Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики …
  • TDA7294 part 1TDA7294 part 1
    Visits: 197 TDA7294 має унікальні дані для створення підсилювачів звукової частоти HI-FI класу. Варіант застосування є конфігурація BRIDGE (мостова схема включення), де використовуються два TDA7294, як показано на схематичній діаграмі …
  • Altium Designer – создание рисунков на печатной платеAltium Designer – создание рисунков на печатной плате
    Visits: 3221   Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
  • LM317 и светодиодыLM317 и светодиоды
    Visits: 7792 LM317 и светодиоды статья с переработанная с сайта http://invent-systems.narod.ru/LM317.htm Долговечность светодиодов определяется качеством изготовления кристалла, а для белых светодиодов еще и качеством люминофора. В процессе эксплуатации скорость деградации кристалла …
  • PIC18 – модуль DMAPIC18 – модуль DMA
    Visits: 1133 Введение   Модуль прямого доступа к памяти (DMA) предназначен для обслуживания передачи данных непосредственно между различными областями памяти без вмешательства процессора. Исключив при этом необходимость в интенсивной  обработки …
  • Стробоскоп для автомобиляСтробоскоп для автомобиля
    Visits: 2136 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект –  “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Visits: 1830 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
  • Trimax – кодирование и декодирование ИК-командTrimax – кодирование и декодирование ИК-команд
    Visits: 2127 Первое, что надо понять назначение кнопок клавиш пульта, а также, что за кодирование реализовано в ИК- пульте. Для назначения клавиш обратимся к описанию, а для взлома кодирования воспользуемся …
  • APA102 – светодиоды со встроенным драйвером и SPI интерфейсомAPA102 – светодиоды со встроенным драйвером и SPI интерфейсом
    Visits: 3240 APA102 В 2014 году фирма Shenzhen Led Color Optoelectronic Co., Ltd http://www.szledcolor.com/ начала производство светодиодов на драйвере APA102. Это серия так называемых светодиодов со встроенным драйвером. Основной особенностью этих …



Поделись этим!