Views: 4517
Управление светодиодом – это для начинающего разработчика встроенных систем сказать на языке Си – “Привет мир”.
Как заставить мигать светодиод.
Для начала, что такое светодиод?
Светодио́д или светоизлучающий диод (СД, СИД, 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
Это может быть интересно
Toyota Auto Fader – Модуль включения усилителяViews: 2085 Toyota Auto Fader – Модуль включения усилителя. Часто автолюбители прибегают к замене штатного головного устройства на универсальное мультимедийное, в котором значительно расширены функциональные возможности. Если возникает желание оставить …
Регулятор влажностиViews: 1366 Регулятор ILLISSI-CH-1000 предназначен для контроля и регулировки относительной влажности в диапазоне от 0 до 100%. Регулятор позволяет работать как в режиме осушения, так и увлажнения. Для измерения возможно …
Стабилизатор тока на SN3350, часть 2Views: 1316 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …
Емкостной сенсорViews: 3223 Изучаем изготовление емкостных сенсоров на PIC-микроконтроллере. Конструкция емкостных сенсоров имеет вид: Емкостные сенсоры строятся по схеме высокочастотного генератора, сам принцип основан на измерение частоты этого генератора. Частота зависит …
Audio-bluetooth modules BK8000L (noname)Views: 850 Еще один вариант, так сказать недоразумения Audio-bluetooth modules BK8000L (noname). Его отличительной маркировкой служат два отверстия в плате и надпись R2. Отличают его от модулей на чипе BK8000L, …
Проект с использованием MCC часть 12-1Views: 1101 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …
Самый простой индикатор уровня звукового сигналаViews: 6681 Демонстрационный проект создания индикаторов уровня с использованием WS2812B. Изучив этот проект вы сможете самостоятельно изготавливать и конструировать свои индикаторы уровня звукового сигнала. Дополнительно читайте статью Бегущие огни на …
Pogo Pin Connector LibViews: 29 У своїх проектах почав застосовувати з’єднувачі та контакти типу Pogo Pin. Для цього до своєї існуючої БД додав нову бібліотеку. Огляд від ІІ Pogo Pin (погопін) – це …
TDA7294 part 2Views: 709 Це друга частина проекту TDA7294, початок дивись тут. Тут ви знайдете повністю проект високоякісного підсилювача на TDA7294, схема, 3D моделі, гербер файли для виготовлення друкованої плати. І звичайно …
PIC32MZ – Core Timer (библиотека)Views: 583 Переработанные файлы от Microchip, библиотека для работы с Core Timer.