
Просмотров: 1456
Первым делом перенастроим регистры конфигурации, следующим образом:
- Отключим выход генератора (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 133 downloads
Проект, для текущей стадии изучения (03) ...В четвертой части заставим мигать светики …
Это может быть интересно
Просто о структурах и объединениях в Си
Просмотров: 2080 Какие задачи нам позволяют решать структуры и объединения? Для разработчика встроенных систем эффективность и компактность кода всегда на первом месте. Если программировании на Ассемблере ты сам определяешь как …Бегущие огни на WS2812B
Просмотров: 4684 В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по …Стабилизатор тока на SN3350, часть 2
Просмотров: 1069 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …MPLAB® Code Configurator and Encoder
Просмотров: 1339 Еще раз про энкодер… Для некоторых приложений очень удобно и экономически выгодно, для настройки и управления использовать энкодер. Такие энкодеры имеют строенную тактовую кнопку которую можно применить для выбора …PIC18 – System Arbitration
Просмотров: 509 Системный арбитр. Разрешает доступ к памяти между выборами уровнями системы (т.е. Main, Interrupt Service Routine) и выбором периферийных устройств (т.е. DMA и Scanner) на основе назначенных пользователем приоритетов. Каждый …LATINO – открытый проект ch-светомузыки
Просмотров: 1552 Проект построенный на некоторых принципах ch-светомузыка. Проект ознакомительный предназначен, для самостоятельного построения простого и эффективного светосинтезатора. Вывод осуществляется на ВОУ собранной на драйверах HL1606. Для этого была …LCD индикаторы на драйвере ML1001
Просмотров: 1742 ML1001 – статический LCD GOG (чип в стекле) драйвер для 40-сегментного LCD в позолоченном противоударном исполнении. На них можно каскадно строить цельные из 80 или 120 сегментов LCD индикаторы. …Проект с использованием MCC часть 03
Просмотров: 1456 Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки …Бегущие огни (ch-bo-36)
Просмотров: 2355 Проект на PIC-микроконтроллере PIC16F648A. Количество каналов 36. Для индикации используется подключение по матрице 6х6. Расположение светодиодов в одну линию. Все эффекты написаны для возможности увеличения количества светодиодов. Рекомендуется …NeoPixel LED and PIC24
Просмотров: 530 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …
Комментарии