
Views: 4487
Управление светодиодом – это для начинающего разработчика встроенных систем сказать на языке Си – “Привет мир”.
Как заставить мигать светодиод.
Для начала, что такое светодиод?
Светодио́д или светоизлучающий диод (СД, СИД, LED англ. Light-emitting diode) — полупроводниковый прибор с электронно-дырочным переходом, создающий оптическое излучение при пропускании через него электрического тока (а более подробнее читаем в Википедии). Т.е. нам нужен любой светодиод. Рабочее напряжение нашей учебной платы ILLISSI-4B-03-primum 5 вольт, а светодиода, в зависимости от цвета, может быть от 1,8 до 3,2 вольта. Нам еще понадобиться резистор, для ограничения тока протекающего через него. Эту сложную схему придется спаять :).
Подключим светодиод к порту B выводу RB1. На фото белый провод, это “+” светодиода. Этот провод необходимо соединить
с с выводом порта RB1. Другой с контакту с надписью Vss. Вариант подключения хорошо виден на фото. Почему вариант? На плате ILLISSI-4B-03-primum есть несколько выводов для подключения к шине Vss “земля”, можно использовать любой из них.
Самый простой способ заставить мигать светодиод, это организовать в главном цикле программы задержку и по окончанию задержки переключать состояние светодиода на противоположное. В Си это будет выглядеть очень
просто:
while (1) { CLRWDT(); // сброс сторожевого таймера __delay_ms(1000); // задержка в 1 секунду LATB1=!LATB1; // переключить светодиод }
Чтобы менять частоту импульсов необходимо изменить число 1000. Что обозначает каждая строчка. Цикл while (1) { } – это бесконечный цикл, главный цикл нашей программы. __delay_ms(1000); – макрос задержки – в этом мести процессор контроллера выполняет цикл задержки с длительно нами заданной. LATB1 = !LATB1 – это сама команда переключения светодиода. Для управления используем регистр LATB, это регистр управления выходными сигналами порта B. А читать строку программы необходимо так, присвоить LATB1 значение “инверсное” его текущему состоянию. Т.е. если был “0”, то станет “1” и наоборот. Команда CLRWDT(); – это сброс сторожевого таймера, это тот таймер который контролирует отсутствие сбоев (зависания) нашей программы (он в регистре конфигурации нашей программы включен).
А размер самой программы тоже не очень велик, основной текст, это конфигурирование контроллера под наши нужды:
#include // конфигурирование контроллера __CONFIG( FOSC_INTOSC & // INTOSC oscillator: I/O function on CLKIN pin WDTE_ON & // WDT disabled PWRTE_ON & // PWRT enabled MCLRE_ON & // MCLR/VPP pin function is digital input CP_ON & // Program memory code protection is enabled CPD_ON & // Data memory code protection is enabled BOREN_ON & // Brown-out Reset enabled CLKOUTEN_OFF & // CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin IESO_OFF & // Internal/External Switchover mode is disabled FCMEN_OFF); // Fail-Safe Clock Monitor is disabled __CONFIG( WRT_ALL & // 000h to 7FFh write protected, no addresses may be modified by EECON control PLLEN_ON & // 4x PLL enabled STVREN_OFF & // Stack Overflow or Underflow will not cause a Reset BORV_HI & // Brown-out Reset Voltage (VBOR) set to 2.7V LVP_OFF); // High-voltage on MCLR/VPP must be used for programmin // сообщить компилятору с какой тактовой частотой работает микроконтроллер #define _XTAL_FREQ 32000000
// сама программа, в начале настройка тактового генератора void main(void) { CLRWDT(); // сброс сторожевого таймера // настройка внутреннего генератора 8*4=32мГц OSCCON=0b11110000; // |||||||| // ||||| ++-- SCS<1:0> основной генератор (работа через PLL) // |++++----- IRCF<3:0> частота 8 мГц // +--------- SPLLEN умножитель 1-включен
// конфигурирование портов микроконтроллера TRISA = 0; PORTA = 0; ANSELA = 0; TRISB = 0; PORTB = 0; ANSELB = 0; PORTC = 0; TRISC = 0;
//--------------------------------------------------------------- // главный цикл, управления миганием светодиода. while (1) { CLRWDT(); // сброс сторожевого таймера __delay_ms(1000); // задержка в 1 секунду LATB1=!LATB1; // переключить светодиод } }//
Поэкспериментируйте с константой – 1000 в макросе __delay_ms, установите последовательно значения – 500, 250, 125.
Примечания. Это только пример и такое управление в реальных проектах не приемлемо. В современных проектах для формирования длительности удобнее использовать встроенные таймеры контроллера и через систему прерываний управлять длительностью мигания светодиода.
Полностью проект можно скачать Среда MPLAB v8.85, компилятор HI-TECH C Compiler for PIC10/12/16 MCUs (PRO Mode) V9.83

Это может быть интересно
Проект с использованием MCC часть 12-1
Views: 1033 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …Проект с использованием MCC часть 06
Views: 1404 Изменим схему следующим образом добавим две тактовые кнопки BT1 и BT2. Теперь переключимся на конфигурацию выводов, для этого сделаем двойной клик в окне Ресурсы проекта на Pin Module. …NS108-5050-16bit от Newstar
Views: 627 Кто уже использует в своих проектах адресуемые светодиоды хорошо знакомы с такими как WS2812 и им подобные. Эти светодиоды для управления используют однопроводную шину. Из-за этого пропускная способность …PIC32MZ – Core Timer (библиотека)
Views: 556 Переработанные файлы от Microchip, библиотека для работы с Core Timer.Интерактивные Led
Views: 555 Тема проекта продолжение следует…. Это может быть интересноСумеречное реле
Views: 1601 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …Проблемы классической светомузыки
Views: 2142 Светомузыка – что это такое? Определение: Светомузыка (жаргонное: цветомузыка) — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …Регулятор влажности ch-3800
Views: 1530 И еще один проект на плате ch-c3xxx – универсальный регулятор влажности ch-3800. Регулятор позволяет работать как в режиме индикатора влажности, так и в режиме регулятора. Рабочий диапазон …Kitchen timer with contactless gesture control
Views: 686 Кухонний таймер з безконтактним керуванням жестами дозволяє встановити необхідний період часу для приготування страв, не торкаючись пристрою. Дуже зручно під час приготування їжі, коли руки забрудниться. Усі …Часы-кухонный таймер
Views: 2841 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …