Views: 1708
Первым делом перенастроим регистры конфигурации, следующим образом:
- Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin)
- Включим сторожевой таймер (WDT enabled)
После этой настройки мы должны будем увидеть в изменении графического вида контроллера
Настройки конфигурации должна выглядеть так
Теперь перейдем к настройке портов, необходимо перейти к окну Pin Manager: Grid (MCC)
И сразу вопрос, что с этим делать? Дополнительно откроем закладку
Теперь в окне Pin Manager: Grid (MCC) в разделе Pin Module настроим все выводы портов на выход
Обратите внимание при настройке портов на выход, будет заполняться окно
После окончания “клацанья на замочки” мы получим
Теперь перейдем к более конкретному анализу настройки портов, первое выводы могут быть “цифровые” и “аналоговые”, смотрим на столбец со свойством Analog
И снимем птички Аналог с выводов, и одновременно снимем птички в колонке подтягивающих резисторов WPU, после окончанию процесса нажмем кнопочку сгенерировать
и обратим внимание как изменилось содержимое функции PIN_MANAGER_Initialize в файле pin_manager.c
void PIN_MANAGER_Initialize(void)
{
/**
LATx registers
*/
LATA = 0x00;
LATB = 0x00;
LATC = 0x00;
/**
TRISx registers
*/
TRISA = 0x08;
TRISB = 0x00;
TRISC = 0x00;
/**
ANSELx registers
*/
ANSELC = 0x00;
ANSELB = 0x00;
ANSELA = 0x00;
/**
WPUx registers
*/
WPUB = 0x00;
WPUA = 0x08;
OPTION_REGbits.nWPUEN = 0;
/**
APFCONx registers
*/
APFCON = 0x00;
}
LATx registers – управление сигналами на выходе порта – низкий уровень (0);
TRISx registers – направление сигналов – все на выход, кроме TRISA = 0x08 – это наш вход MCLR;
ANSELx registers – аналоговые входы отключены;
WPUx registers – подтягивающие резисторы отключены (потом мы еще не раз вернемся к этому регистру, будем подключать тактовые кнопки для организации ввода данных);
APFCONx registers – регистр настройки альтернативного подключения периферийных модулей. Это тоже интересный регистр, но о нем немного по позже.
Сделано много, даже можно перепрошить микроконтроллер, но это го маловато для получения первого эффекта типа “гори светодиод”. Как вы должны были заметить, что по схеме мы к ногам 7 и 8 порты RC3 и RC6 подключены светодиоды, они подключены через токоограничивающие резисторы и подключены к “земле”. Это значит, если мы прошьем наш ПИК (так будем в дальнейшем ругаться) светики гореть не будут. Что реально обидно!
Для начала прибегнем к одному приему который в будем может стать довольно удобным, это опишем наши светодиоды так, что бы компилятор понимал, что если мы будем писать LD1=1; это значит подать единицу на порт к которому подключен нас светик.
Откроем главный файл проекта, в вставим следующие строчки описания светодиодов перед началам самой программы, а начнем с символа # откроется окно в котором выберем define
и пропишем:
// описание подключения светодиодов #define LD1 LATC3 // #define LD2 LATC6 //
Это значит, что если мы в тексте пишем LD1 то компилятор будет понимать, что мы хотим обратится к 3 биту регистра LATC который управляет уровнями сигнала на выходе порта С ПИКа.
И самое главное, что надо сделать!!! Это мы включили сторожевой таймер, а за него теперь надо не забывать, он контролирует работу программы ПИКа, и если его периодически не сбрасывать, то он будет считать, что программа работает некорректно и будет выполнять перезапустит ПИК. Для того, что бы этого не произошло, когда программа правильно работает существует в XC8 макрос (функция, как удобно)
CLRWDT(); //сброс сторожевого таймера +++++++++++++++++++++-
Для этого добавим эту команду в начало программы и главный цикл, для начала этого будут вполне достаточно. А теперь зажжем один наш светик.
Наша программа должна иметь вид:
// описание подключения светодиодов
#define LD1 LATC3 //
#define LD2 LATC6 //
void main(void)
{
// initialize the device
SYSTEM_Initialize();
CLRWDT(); //сброс сторожевого таймера +++++++++++++++++++++-
// When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits
// Use the following macros to:
// Enable the Global Interrupts
//INTERRUPT_GlobalInterruptEnable();
// Enable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptEnable();
// Disable the Global Interrupts
//INTERRUPT_GlobalInterruptDisable();
// Disable the Peripheral Interrupts
//INTERRUPT_PeripheralInterruptDisable();
LD1=0; // погасить
LD2=1; // засветить
while (1)
{
CLRWDT(); //сброс сторожевого таймера +++++++++++++++++++++-
// Add your application code
}
}
Обратите внимание: При компиляции может появляться (особенно в ново созданном проекте) сообщение
установите птичку (ну типа не хочу тебя видеть), чтобы в дальнейшем это окно не появлялось.
Если все делаете корректно моему описанию, то у вас не должно возникать проблем а окне Output – программатора всегда будет сообщение
The following memory area(s) will be programmed: program memory: start address = 0x0, end address = 0x7ff configuration memory Programming/Verify complete
После программирования микроконтроллера мы увидим, что LD1 не горит LD2 горит. Изменит параметры
LD1=1; // засветить
LD2=1; // засветить
и поиграемся управлением портами.
Для удобства готовый проект для этой стадии изучения
Проект с использованием MCC часть 03 155.90 KB 161 downloads
Проект, для текущей стадии изучения (03) ...В четвертой части заставим мигать светики …
Это может быть интересно
УКВ – радиоприем, часть 1Views: 9818 Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. …
ESP8266 применение в проектахViews: 3781 (Актуально только для версий прошивки 1.хх) ESP8266 показала себя как надежное и безотказное устройство для обмена данными с применением WIFI. Я использую ESP8266 исключительно через UART, с применением AT …
Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.04Views: 427 Смотри как установить и подключить библиотеку тут. V. – 23_04 – Component Database Update. – configuration file name – DXPPreferences1.DXPPrf. – Added two projects for audio amplifier …
Бегущие огни на WS2812BViews: 5043 В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по …
УКВ – радиоприем, часть 2Views: 6433 Пришло свободное время решил вторую часть проекта реализовать (правда есть мысль и третью с использование цветного OLED и функцией ch-светомузыки, но это только задумка… Для понимания функций интегрального …
Temperature measurement with NTC thermistor.Views: 677 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
Контроллер управления светодиодным освещением с дистанционным управлениемViews: 2071 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …
Altium Designer – подготовка документации для производства и сборки печатных платViews: 3997 В процессе освоения Altium Designer много возникает вопросов по подготовке документации для производства плат, а также для её сборки. Altium Designer позволяет сделать все требуемые документы, хотя скажем …
Проект с использованием MCC часть 05Views: 2195 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
Простой цифровой регулятор мощностиViews: 7772 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …












Комментарии