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

Просмотров: 907


И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с Microchipa подготовили функции, которыи позволяет изменять значения ШИМ, это PWM1_LoadDutyValue и PWM2_LoadDutyValue.

Надо только понимать, что их параметр это не процент, а число, в нашем случае число 10 битное, т.е. от 0 до 1023. Выполним некоторый предварительный эксперимент, добавим основной в текст нашей программы (наконец то, че нибудь своими руками напишим) две эти функции и обновим прошивку контроллера.

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;  // 0-погасить/1-засветить
    
    
    PWM2_LoadDutyValue(2);
    PWM1_LoadDutyValue(1023);
            
    while (1)
    {
        CLRWDT();   //сброс сторожевого таймера +++++++++++++++++++++-    
        // Add your application code
//        __delay_ms (500);
//        LD2=!LD2;  
//        LD1=!LD1;
    }
}

Перед основным циклом, закомментируем начальные настройки светиков и установим яркость LD1 100% = 1023, а яркость LD2 – 0,19% – этот значение 2. Перепрошьем микроконтроллер. И сразу заметим, что у нас изменились яркости горения светиков.

На фото видно, что первый светик горит на сто 100%, а второй еле “тлеет” ;). Нам теперь остается мелочь придумать корректное управление яркостью.

Сделаем так, при нажатии на кнопку будет изменяться переменная яркости которая будет вызывать функцию PWMх_LoadDutyValue для изменения яркости.

Конечно тыкать 1023 раза будет не интересно, можно сделать, чтобы яркость изменялась значению равном 1%, но сто раз это тоже многовато, сделаем например 10%, это 100/10= 10 шагов. Каждый шаг 1023/10 = 102. Значит так нажимаем на кнопку к значению текущей яркости прибавляется значение 51, нажимает вторую кнопку и от текущего значения вычитается 102.

Какие могут быть подводные камни, нам надо обеспечить, чтобы значение яркости не было больше 1023 и не было меньше 0.


Немного об особенностях настройки ШИМ ПИК-контроллеров

Период или частота задаются таймером Т2. Ширина импульса задается В регистрах PWMхDCL и PWMхDCH, величина ШИМ может быть меньше 10 бит и это будет зависеть от периода ШИМ, более подробно можно прочесть в описании на микроконтроллер. Для нас главное надо понять как формируется длительность.

Для того, чтобы получить сигнал при максимальном значении без импульсов, надо выбирать значение регистра PR2 < 255, если установить значение 255, то при 100% яркости мы получим наличие отрицательных импульсов ШИМ, что иногда совсем не приемлемо.

Для устранения этого нежелательного эффекта измените значение записываемое в регистр PR2, например, на 254.

Теперь при 100% яркости у нас отсутствую нежелательные импульсы. Что необходимо понять, если формируемая длительность (значение) больше значения записанного в регистр периода PR2, то на выходе ШИМ, будет логическая единица (или ноль – это зависит от выбранной полярности на выходе), Если равно или меньше, будет формироваться ШИМю При нуле, будет постоянно низкий уровень.


Для переменной яркости нам надо выбрать типа int со знаком, или в нашем проекте конкретно будет использовать такое описание int_least16_t, это число может принимать значение в диапазоне -32768 до + 32767 (описание можно посмотреть в файле stdint.h).

Первое, что надо будет сделать, мы должны использовать функции PWM в файлах pin_manager, а для этого необходимо их включить в эти файлы, в этом файле объявим и наши переменные яркости

Добавим в файл pin_manager.c описание переменных

....
#include "pwm1.h"   // для работы с ШИМ
#include "pwm2.h"   // для работы с ШИМ

int_least16_t BrightnessLED1,BrightnessLED2; // переменные значения яркости
.....

Изменим функцию обработки нажатия кнопок.

void IOCBF6_ISR(void) {

    // Add custom IOCBF6 code
    __delay_ms(10);
//    if(!RB6)LD1=!LD1;
    if(!RB6)
    {
        BrightnessLED1+=102;
        if(BrightnessLED1>1023)BrightnessLED1=1023;
        PWM1_LoadDutyValue(BrightnessLED1); 
    }
    
    // Call the interrupt handler for the callback registered at runtime
    if(IOCBF6_InterruptHandler)
    {
        IOCBF6_InterruptHandler();
    }
    IOCBFbits.IOCBF6 = 0;
}


/**
   IOCBF7 Interrupt Service Routine
*/
void IOCBF7_ISR(void) {

    // Add custom IOCBF7 code
    __delay_ms(10);
//    if(!RB7)LD2=!LD2;
    if(!RB7)
    {
        BrightnessLED1-=102;
        if(BrightnessLED1<0)BrightnessLED1=0;
        PWM1_LoadDutyValue(BrightnessLED1);
    }
    // Call the interrupt handler for the callback registered at runtime
    if(IOCBF7_InterruptHandler)
    {
        IOCBF7_InterruptHandler();
    }
    IOCBFbits.IOCBF7 = 0;
}

Скомпилируем проект.

Теперь при помощи кнопок можно управлять яркостью светодиода 1. Для того, чтобы при подаче питания светодиоды не светились изменим начальное значение в MCC для PWM = 0%.


Проект для изучения 

Значок

Проект с использованием MCC часть 08 739.74 KB 75 downloads

И так создадим проект в котором при помощи двух...


Но тыкать пальцем в кнопочки меняя яркость одного светодиода как то не серьезно на современном этапе, стоит сделать управление яркостью одной кнопкой, а также чтобы работали два светика, что и как в следующей статье …


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


  • WiFi ESP8266 ESP-202 (ESP-12F)WiFi ESP8266 ESP-202 (ESP-12F)
    Просмотров: 7429 Первое знакомство, сначала надо его купить… http://voron.ua/catalog/024404 Схема для подключения и тестирования По схеме ставим две кнопки, сброс и кнопку BT2, для перевода в режим обновления прошивки. Если надо сделать …
  • Сумеречное релеСумеречное реле
    Просмотров: 1327 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Просмотров: 2529 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
  • Проект с использованием MCC часть 02Проект с использованием MCC часть 02
    Просмотров: 2105 Когда мы запустили конфигуратор, самое главное понять, что с этим делать и как проверить, то что мы делаем работает или нет. Для начала настроим регистры конфигурации микроконтроллера и настроем …
  • Acquaintance with audio-bluetooth modules F-6888 (BK3254).Acquaintance with audio-bluetooth modules F-6888 (BK3254).
    Просмотров: 1862 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
  • Проект с использованием MCC часть 14Проект с использованием MCC часть 14
    Просмотров: 709 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
  • Ultrasonic Level Meters – ULM –53LUltrasonic Level Meters – ULM –53L
    Просмотров: 674 Измерение расстояния при помощи ультра звукового датчика ULM–53L–10. Диапазон измерения от 0,5 м до 10 м, полностью пластмассовый излучатель PVDF, механическое соединение фланцем из полиэтилена HDPE (исполнение “N”) Характеристики …
  • Дифференциальный терморегуляторДифференциальный терморегулятор
    Просмотров: 3830 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …
  • Бегущие огни на WS2812BБегущие огни на WS2812B
    Просмотров: 4661 В настоящее время большой популярностью стали пользоваться светодиоды со встроенным драйвером WS2812B. Текущий проект предназначен показать возможность использования и управления этими светодиодами. Это и проект и исследование по …
  • MPLAB® Code Configurator and EncoderMPLAB® Code Configurator and Encoder
    Просмотров: 1332 Еще раз про энкодер… Для некоторых приложений очень удобно и экономически выгодно, для настройки и управления использовать энкодер. Такие энкодеры имеют строенную тактовую кнопку которую можно применить для выбора …



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

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.

Комментарии

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

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