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