
Views: 1674
Первым делом перенастроим регистры конфигурации, следующим образом:
- Отключим выход генератора (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) ...В четвертой части заставим мигать светики …
Это может быть интересно
Development Boards PIC18F47Q84
Views: 6049 Microchip тішить новими мікроконтролерами. Особливістю цього MCU – це багата інтелектуальна периферія, що дозволяє вирішувати такі завдання на 8 бітних MCU, які неможливо реалізувати на деяких навіть 32 …Проект с использованием MCC часть 02
Views: 2409 Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем …Customs codes for export
Views: 303 Митні коди (HS Code) для надсилання посилок за кордон. Для відправки товару за кордон на сьогодні необхідно зазначати митні коди. Часто визначення коду займає багато часу. Для …Просто о структурах и объединениях в Си
Views: 2284 Какие задачи нам позволяют решать структуры и объединения? Для разработчика встроенных систем эффективность и компактность кода всегда на первом месте. Если программировании на Ассемблере ты сам определяешь как …Простой сенсорный регулятор света
Views: 2476 Простой сенсорный регулятор. Проект – 2007 года. Регулятор выполнена на микроконтроллере PIC12F683 и имеет минимальное количество элементов. Выполняет стандартные функции, включение выключение света, изменение яркости, запоминание последнего установленного уровня …CLUBBEST – reasoning on the visualization of music.
Views: 275 ВІД ЗАХОДУ ДО СВІТАНКУ АБО ПОБАЧИТИ МУЗИКУ. Час доби, коли почуття людини загострюються, – це час від заходу до світанку. В цей час людина відкрита для …Простой цифровой вольтметр ch-c3200
Views: 2586 В этой статье рассмотрен пример создания простого вольтметра постоянного тока на основе печатной платы ch-c0030pcb, а при возможности использования внешнего делителя и вольтметр переменного тока. Дан краткий принцип …Бегущие огни (ch-bo-36)
Views: 2565 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …Стробоскоп для автомобиля
Views: 2200 Одним из популярных решений светового тюнинга автомобиля, мотоцикла или скутера стал эффект – “полицейский стробоскоп“. На база платы ch-c0050 реализовано несколько проектов. В этой статье приводятся две версии …Цифровой тахометр для автомобиля CH-С3300
Views: 1987 Тахометр Ch-С3300 предназначен для индикации и контроля оборотов, времени работы и максимальных оборотов развиваемых двигателем во время поездки. Датчиком может использоваться как обычный контактный прерыватель или выход датчика …
Комментарии