
Views: 1668
Первым делом перенастроим регистры конфигурации, следующим образом:
- Отключим выход генератора (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 160 downloads
Проект, для текущей стадии изучения (03) ...В четвертой части заставим мигать светики …
Это может быть интересно
Самый простой диммер для светодиодного освещения
Views: 3156 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …MTouch® Модуль Емкостной Библиотеки для MPLAB®X Code Configurator (MCC)
Views: 1304 Введение MTouch ® Модуль Емкостной Библиотеки для MPLAB ® X Code Configurator (MCC) позволяет быстро и легко генерировать решение кода на Cи для емкостной сенсорной кнопки, датчика приближения и слайдера.MPLAB® Harmony – или как это просто! Часть 3.
Views: 2155 Часть третья – копнём немного глубже. Вы наверное заметили, что во второй главе, вроде сначала все шло как по маслу, а потом, что бы заморгали светики, я вставил …NS108-5050-16bit от Newstar
Views: 627 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …Audio-bluetooth modules BK8000L (noname)
Views: 776 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …Униполярный шаговый двигатель – часть 2
Views: 923 В этой части только итог и версия 2.0 универсальной, которая позволяет управлять шаговым двигателем во всех трех режимах и 3.0 специальной библиотеки только для одного полушагового режима. В …Проект с использованием MCC часть 01
Views: 2636 Для изучения MCC я выбрал простой контроллер PIC16F1509. Выбор его был обусловлен богатой новой периферией которую можно изучить. Для начала была собрана схема на макетной плате Внешний вид …Интерактивные Led
Views: 555 Тема проекта продолжение следует…. Это может быть интересноTemperature measurement with NTC thermistor.
Views: 532 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …Проект с использованием MCC часть 07
Views: 1141 Модуль PWM – широтно импульсная модуляция (ШИМ). ПИК контроллеры часто на борту имеют модули ШИМ. На их основе строятся многие узлы управления электро приводами. В нашем варианте мы …
Комментарии