
Views: 4477
Основное что необходимо сделать в начале программы, это настроить регистры конфигурации контроллера. От корректной настройки этих регистров часто зависит стабильная работа контроллера.
Описание:
__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);
Это может быть интересно
MAX7219/21 и 8х8 LED дисплеи
Views: 1050 MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересноМультимедийная сеть – AVC-LAN TOYOTA
Views: 5864 AVC LAN – протокол обмена данными мультимедийных систем автомобиля. Кодирование данных. При кодировании различаться три типа данных : преамбула – её назначение, это сообщение устройствам на шине, что начинается передача данных. …Часы-кухонный таймер
Views: 2875 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …Гаджеты для домашней автоматики – Датчик движения
Views: 1490 Управление светодиодным освещением – Датчик движения. Данный гаджет предназначен для управления освещением рабочих столов (кухонных столов), освещение прихожих, освещение зеркал в прихожих, автоматическое включение света в коридорах. Датчик позволяет …LED модуль P10 (1R) V706A
Views: 7903 Это еще одно чудо от китайского брата. Это монохромные матрицы, называются они P10 (1R) V706A, ну типа R-красные, но не верьте паяют светики и зеленые и синие, в общем …NS108-5050-16bit от Newstar
Views: 672 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …WiFi ESP8266 ESP-202 (ESP-12F)
Views: 7891 Первое знакомство, сначала надо его купить… http://voron.ua/catalog/024404 Схема для подключения и тестирования По схеме ставим две кнопки, сброс и кнопку BT2, для перевода в режим обновления прошивки. Если надо сделать …TM1650 драйвер LED семисегментного индикатора
Views: 18269 UPDATES 2025/10/10 Китайский производитель Shenzhen Titan Micro Electronics Co., Ltd. Выпускает широкую линейку драйверов управления светодиодными дисплеями, которые позволяют разгрузить микроконтроллер для основной работы, главная особенность этих драйверов …Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.09
Views: 604 September 2023 component base update. Release updates V. – 23_09 added new components. Changed the structure of the database. Configuration file name – DXPPreferences1.DXPPrf. Added project CLUBBEST_50_Light. …NeoPixel LED and PIC24
Views: 739 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …