Views: 4283
Основное что необходимо сделать в начале программы, это настроить регистры конфигурации контроллера. От корректной настройки этих регистров часто зависит стабильная работа контроллера.
Описание:
__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);
Это может быть интересно
- Altium Designer – подготовка документации для производства и сборки печатных платViews: 3678 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …
- Development Boards PIC18F47Q84Views: 3169 Microchip тішить новими мікроконтролерами. Особливістю цього MCU – це багата інтелектуальна периферія, що дозволяє вирішувати такі завдання на 8 бітних MCU, які неможливо реалізувати на деяких навіть 32 …
- Интерактивные LedViews: 464 Тема проекта продолжение следует…. Это может быть интересно
- Проект с использованием MCC часть 10Views: 840 Алгоритм управления освещением от нажатия кнопки. Обработка удержания кнопки: Мы должны проверить кнопка в настоящий момент нажата и флаг удержания установлен, если да Проверить таймер удержания “отработал” – …
- JDY-62A Audio bluetooth moduleViews: 1693 Простой модуль для простого аудио блютуса. Встроенные подсказки на английском языке. Модуль включён, режим муте – после подачи питания. Контроль разряда батареи предупреждение что батарея разряжена и необходима …
- PIC32MZ – прерывания (заметки)Views: 455 Виды формирования запоминая контекста при входе в прерывания. Компилятор представляет три варианта AUTO – когда запоминания места возврата из подпрограммы возложено на программу, т.е все создается программно. Этот …
- Проект с использованием MCC часть 02Views: 2295 Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем …
- MAX7219/21 и 8х8 LED дисплеиViews: 931 MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно
- Система AT команд версии V2.0 для ESP8266 и ESP32Views: 12836 Появление нового модуля на базе ESP32 заставило систематизировать систему AT команд, а так же систему обновления и для модулей на базе ESP8266. Начиная с версии v2.0 в ESP8266 …
- Kitchen timer with contactless gesture controlViews: 653 Кухонний таймер з безконтактним керуванням жестами дозволяє встановити необхідний період часу для приготування страв, не торкаючись пристрою. Дуже зручно під час приготування їжі, коли руки забрудниться. Усі …