Проект с использованием MCC часть 03

Views: 1674


Первым делом перенастроим регистры конфигурации, следующим образом:

  1. Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin)
  2. Включим сторожевой таймер (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) ...


В четвертой части заставим мигать светики …


Это может быть интересно


  • Светодиоды со встроенным драйвером WS2812BСветодиоды со встроенным драйвером WS2812B
    Views: 1022 Производитель http://www.world-semi.com Краткое описание продукции фирмы Каталог продукции” catcatcat_ws_19 catcatcat_ws_15 catcatcat_ws_11 catcatcat_ws_07 catcatcat_ws_03 catcatcat_ws_18 catcatcat_ws_14 catcatcat_ws_10 catcatcat_ws_06 catcatcat_ws_02 catcatcat_ws_05 catcatcat_ws_09 catcatcat_ws_13 catcatcat_ws_17 catcatcat_ws_16 catcatcat_ws_12 catcatcat_ws_08 catcatcat_ws_04 catcatcat_ws_01 This jQuery …
  • Temperature measurement with NTC thermistor.Temperature measurement with NTC thermistor.
    Views: 560 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Views: 2139 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
  • Kitchen timer with contactless gesture controlKitchen timer with contactless gesture control
    Views: 709    Кухонний таймер з безконтактним керуванням жестами дозволяє встановити необхідний період часу для приготування страв, не торкаючись пристрою. Дуже зручно під час приготування їжі, коли руки забрудниться. Усі …
  • Простой цифровой регулятор мощностиПростой цифровой регулятор мощности
    Views: 7454 Простой регулятор мощности с цифровой индикацией. Этот проект создан как обучающий, для ознакомления с основами построения сетевых регуляторов мощности. Устройства подобного типа можно использовать для управления освещением, скоростью …
  • LED драйвер TM1639LED драйвер TM1639
    Views: 2373 TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом. Для управления драйвером …
  • Просто о внешних переменныхПросто о внешних переменных
    Views: 891  Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
  • MAX7219/21 и 8х8 LED дисплеиMAX7219/21 и 8х8 LED дисплеи
    Views: 1039 MAX7219, MAX7221 предназначены для вывода информации на 8 разрядов семисегментного индикатора, но на нем легко организовать вывод на светодиодные индикаторы 8х8. продолжение следует…. Это может быть интересно
  • Простой цифровой вольтметр ch-c3200Простой цифровой вольтметр ch-c3200
    Views: 2586 В этой статье рассмотрен пример создания простого вольтметра постоянного тока на основе печатной платы ch-c0030pcb, а при возможности использования внешнего делителя и вольтметр переменного тока. Дан краткий принцип …
  • DS18B20 – удаленный контроль температурыDS18B20 – удаленный контроль температуры
    Views: 3206 Контроль температуры с использованием датчиков температуры DS18B20 и платы ILLISSI-4B-09-primum Проект позволяет подключать к плате ILLISSI-4B-09-primum до 16 датчиков температуры DS18B20, удаленных более 300 метров,  и выводить информацию …



Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.

Продолжайте читать

НазадДалее

Комментарии

Добавить комментарий

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.