Views: 4526
Управление светодиодом – это для начинающего разработчика встроенных систем сказать на языке Си – “Привет мир”.
Как заставить мигать светодиод.
Для начала, что такое светодиод?
Светодио́д или светоизлучающий диод (СД, СИД, 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
Это может быть интересно
Arduino LCD + STONE STVI056WT-01 + Strain gaugeViews: 711 Author li grey email: greyli1987@outlook.com The strain assessment instrument is used to assess the degree of corresponding muscle strain by obtaining the muscle surface action potential through silver …
Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0Views: 310 Altium Designer my Libraries, Project templates, System settings by Catcatcat. V26.0 Here I want to share how I configure Altium Designer and how I use the DXPPreferences1.DXPPrf …
Светодиоды со встроенным драйвером WS2812BViews: 1091 Производитель 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 …
Защита датчиков температуры DS18B20 от статического электричестваViews: 2013 Статья перепечатана с сайта http://svetomuzyka.narod.ru При удалении датчика на большие расстояния возникает опасность наведения импульсов высокого напряжения на кабель, который соединяет датчик с контролером. Если не принимать меры защиты, …
Проект с использованием MCC часть 11Views: 1034 Можно несколько облагородить программу вынести наши процедуры обработки нажатия кнопок в отдельные функции. Но вы должны понимать, что это хоть и не значительно, но будет тормозить общую скорость …
Просто о структурах и объединениях в СиViews: 2392 Какие задачи нам позволяют решать структуры и объединения? Для разработчика встроенных систем эффективность и компактность кода всегда на первом месте. Если программировании на Ассемблере ты сам определяешь как …
Гаджеты для домашней автоматики – Емкостной сенсорViews: 1832 Управление светодиодным освещением – Сенсор емкостной. Данный гаджет предназначен для управления освещением где необходимо включением освещение сенсорным прикосновением. Датчик позволяет управлять светодиодной нагрузкой в виде модулей или светодиодных лент …
MPLAB® Harmony – или как это просто! Часть 4.Views: 2465 Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от …
Audio-bluetooth modules BK8000L (noname)Views: 915 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …
REFERENCE CLOCK OUTPUT MODULEViews: 612 REFERENCE CLOCK OUTPUT MODULE Модуль формирования опорного тактового сигнала Модуль опорного тактового сигнала обеспечивает возможность посылать сигнал синхронизации на тактовый опорный выходной контакт или контакты (CLKR) в зависимости от …