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

Views: 4265


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

Описание:

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

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


  • Униполярный шаговый двигатель – часть 2Униполярный шаговый двигатель – часть 2
    Views: 797 В этой части только итог и версия 2.0 универсальной, которая позволяет управлять шаговым двигателем во всех трех режимах и 3.0 специальной библиотеки только для одного полушагового режима. В …
  • Проект с использованием MCC часть 04Проект с использованием MCC часть 04
    Views: 1110 Теперь простого горения светиков нам не достаточно, заставим их мигать. Для начала используем первобытно простой способ, но достаточно простой. Используем функции delay, напрягаться откуда они берутся не будем, самое …
  • Проект с использованием MCC часть 09Проект с использованием MCC часть 09
    Views: 878   Эта часть будет посвящена созданию практического проекта управления освещение. Тех задание: Два выхода управления ШИМ – светодиодным освещением. Две кнопки управления, каждая кнопка управляет, своим каналом, логика самая …
  • Проблемы классической светомузыкиПроблемы классической светомузыки
    Views: 2044 Светомузыка – что это такое? Определение: Светомузыка  (жаргонное: цветомузыка)  — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
  • Просто о внешних переменныхПросто о внешних переменных
    Views: 767  Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
  • Простой цифровой вольтметр ch-c3200Простой цифровой вольтметр ch-c3200
    Views: 2483 В этой статье рассмотрен пример создания простого вольтметра постоянного тока на основе печатной платы ch-c0030pcb, а при возможности использования внешнего делителя и вольтметр переменного тока. Дан краткий принцип …
  • Одноканальный емкостной сенсор – AT42QT1012Одноканальный емкостной сенсор – AT42QT1012
    Views: 2323 Описание сенсора [wpdm_file id=242] Незаконченный проект, так-как сенсор не оправдал своего назначения, не рекомендую, просто выброшенные деньги. Особенности. • Количество сенсоров – один, режим переключения ( touch-on/touch-off ), а также программируемая …
  • Инфракрасный датчик движения, PIR-sensorИнфракрасный датчик движения, PIR-sensor
    Views: 3066 Домашняя автоматика предполагает наличие датчиков движения, которые способны контролировать движения человека. Самым простым и доступным устройством позволяющие контролировать изменения ИК-излучения, это ПИР-сенсоры. На текущий момент доступны не дорогие модели D203B, D204B, D205B. Все …
  • Мультизоновый индикатор-терморегулятор ch-c3010Мультизоновый индикатор-терморегулятор ch-c3010
    Views: 1154 Часто возникает необходимость получить информацию по температуре с множества точек контроля. Вам необходимо знать температуру в комнате, в коридоре,  температуру на улице, а в погребе (или на балконе) …
  • Проект с использованием MCC часть 12-1Проект с использованием MCC часть 12-1
    Views: 915 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …



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