
Views: 1166
И так создадим проект в котором при помощи двух кнопок мы сможем управлять яркостью светодиодов. При использовании МСС у нас лафа полная, добрые дяди с 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
И так создадим проект в котором при помощи двух...Но тыкать пальцем в кнопочки меняя яркость одного светодиода как то не серьезно на современном этапе, стоит сделать управление яркостью одной кнопкой, а также чтобы работали два светика, что и как в следующей статье …
Это может быть интересно
Счетчики посетителей
Views: 1270 Вас сосчитали!? или счетчики посетителей. Для чего нужны счетчики посетителей? Какие они бывают? ТОРГОВЛЯ. Подсчитайте, сколько ваш магазин посещает человек за день. Кок много человек приходит утром, какое …Altium Designer my Libraries, Project templates, System settings by Catcatcat V23.09
Views: 479 September 2023 component base update. Release updates V. – 23_09 added new components. Changed the structure of the database. Configuration file name – DXPPreferences1.DXPPrf. Added project CLUBBEST_50_Light. …ESP8266 процедура получение данных даты и времени от серверов точного времени.
Views: 6027 Эта функция доступна уже в версии 1.6.1. Для многих приложений, необходимо часы реального времени, если в вашем проекте есть модуль WiFI ESP8266, то легко можно сделать следующим образом. …VU Meter Tower ART
Views: 1695 Стерео индикатор уровня аудио сигнала. Компактность и удобство проектирования устройств на светодиодах WS2812B, а также легкость реализации алгоритма родило идею созданию своей конструкции. В этом проекте я предоставлю …Оптосимистор и его применение
Views: 19885 Эрве Кадино “Цветомузыкальные установки” Ответ на вопрос – управление мощным тиристором или симистором, от терморегулятора. Статья в pdf[wpdm_file id=129 template=”link-template-calltoaction3.php”] Оптосимистор принадлежат к классу оптронов и обеспечивают очень хорошую …Простой сенсорный регулятор света
Views: 2419 Простой сенсорный регулятор. Проект – 2007 года. Регулятор выполнена на микроконтроллере PIC12F683 и имеет минимальное количество элементов. Выполняет стандартные функции, включение выключение света, изменение яркости, запоминание последнего установленного уровня …Мониторинг температуры
Views: 1432 Настоящий проект создан как обучающий с применением библиотек ds18b20 и LCDHD44780 и компилятора Microchip MPLAB XC8 C Compiler V1.12. Если необходимо иметь информацию по состоянию температуры в помещении или в здании, с количеством до 6 точек (16), то …Просто о внешних переменных
Views: 860 Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …PIC18F25K42 – v. A001 – выявленные баги.
Views: 683 Модуль I2C Не работает при использовании в стандартной конфигурации MCC. Требует особой нестандартной конфигурации и управления для нормальной работы. Обойти Обход проблемы возможен библиотека см статью. Модуль ADC2 На …NeoPixel LED and PIC24
Views: 677 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …
Комментарии