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

Views: 4352


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

Описание:

__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);

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


  • JDY-62A Audio bluetooth moduleJDY-62A Audio bluetooth module
    Views: 1734 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
  • Altium Designer first projectAltium Designer first project
    Views: 367 Эта статья подразумевает, что у вас установлен и настроен Altium Designer как описано в статье  Altium Designer my setup system and project structure.  Обратите внимание! Библиотека постоянно обновляется, …
  • Проект с использованием MCC часть 04Проект с использованием MCC часть 04
    Views: 1177 Теперь простого горения светиков нам не достаточно, заставим их мигать. Для начала используем первобытно простой способ, но достаточно простой. Используем функции delay, напрягаться откуда они берутся не будем, самое …
  • Часы + Календарь + Термометр + …Часы + Календарь + Термометр + …
    Views: 2751 Часы + Календарь + Термометр + Индикатор влажности + Секундомер + Дистанционное управление на ИК лучах (пульты на RC-5 протоколе) + Автоматическая регулировка яркости + Возможность вывода данных через USB, …
  • Acquaintance with audio-bluetooth modules F-6888 (BK3254).Acquaintance with audio-bluetooth modules F-6888 (BK3254).
    Views: 2239 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
  • Проект с использованием MCC часть 01Проект с использованием MCC часть 01
    Views: 2606 Для изучения MCC я выбрал простой контроллер PIC16F1509. Выбор его был обусловлен богатой новой периферией которую можно изучить. Для начала была собрана схема на макетной плате Внешний вид …
  • Стробоскоп для автомобиляСтробоскоп для автомобиля
    Views: 2186 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект –  “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …
  • 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA20412-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204
    Views: 850 Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении …
  • Development of temperature control and management systemsDevelopment of temperature control and management systems
    Views: 152 Catcatcat Electronics Пошта для контакту e-mail: catcatcat.electronics@gmail.com
  • Самый простой индикатор уровня звукового сигналаСамый простой индикатор уровня звукового сигнала
    Views: 6444 Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете  самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на …



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