Как заставить мигать светодиод

Visits: 4281


Управление светодиодом – это для начинающего разработчика встроенных систем сказать на языке Си – “Привет мир”.

Как заставить мигать светодиод.

Для начала, что такое светодиод?

Светодио́д или светоизлучающий диод (СД, СИД, LED англ. Light-emitting diode) — полупроводниковый прибор с электронно-дырочным переходом, создающий оптическое излучение при пропускании через него электрического тока (а более подробнее читаем в Википедии).  Т.е. нам ILLISSI-CLED-03нужен любой светодиод. Рабочее напряжение нашей учебной платы ILLISSI-4B-03-primum 5 вольт, а светодиода, в зависимости от цвета, может быть от 1,8 до 3,2 вольта. Нам еще понадобиться резистор, для ограничения тока протекающего через него. Эту сложную схему придется спаять :).

ILLISSI-CLED-04

Подключим светодиод к порту B выводу RB1. На фото белый провод, это “+” светодиода. Этот провод необходимо соединить
с с выводом порта RB1. Другой с контакту с надписью Vss. Вариант подключения хорошо виден на фото. Почему вариант? На плате ILLISSI-4B-03-primum есть несколько выводов для подключения к шине Vss “земля”, можно использовать любой из них.

 ILLISSI-CLED-05

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

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



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


  • Temperature measurement with NTC thermistor.Temperature measurement with NTC thermistor.
    Visits: 221 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
  • Audio-bluetooth modules F-6188 (BK8000L)Audio-bluetooth modules F-6188 (BK8000L)
    Visits: 2244Следующий модуль на чипе BK8000L. Заводское обозначение F-6188 также основным производителем не выпускается и отдан на тиражирование. с нижней стороны имеет маркировку В этом варианте мне попалась вроде полноценная …
  • OLED RET012864E/REX012864JOLED RET012864E/REX012864J
    Visits: 1434 RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как …
  • Тестирование модуля генератораТестирование модуля генератора
    Visits: 813  Тестирование модуля генератора Настройка, запуск и проверка рабочей частоты на примере PIC18F26K40. PIC18F26K40 Чтобы понять из-за чего зависит производительность микроконтроллера просто надо понять как работает его задающий тактовый …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Visits: 2646 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
  • Проблемы классической светомузыкиПроблемы классической светомузыки
    Visits: 2021 Светомузыка – что это такое? Определение: Светомузыка  (жаргонное: цветомузыка)  — вид искусства, основанный на способности человека ассоциировать звуковые ощущения со световыми восприятиями. Такое явление в неврологии получило название …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Visits: 1840 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
  • Проект с использованием MCC часть 03Проект с использованием MCC часть 03
    Visits: 1535 Первым делом перенастроим регистры конфигурации, следующим образом: Отключим выход генератора (CLKOUT function is disabled. I/O function on the CLKOUT pin) Включим сторожевой таймер (WDT enabled) После этой настройки …
  • Проект с использованием MCC часть 11Проект с использованием MCC часть 11
    Visits: 804 Можно несколько облагородить программу вынести наши процедуры обработки нажатия кнопок в отдельные функции. Но вы должны понимать, что это хоть и не значительно, но будет тормозить общую скорость …
  • Стабилизатор тока на SN3350, часть 2Стабилизатор тока на SN3350, часть 2
    Visits: 1126 Если вам необходимо разработать устройство с применением мощных светодиодов, то никак не обойтись без применения стабилизатора тока. На настоящий момент стабилизаторы тока являются самым эффективным механизмом, для питания светодиода в течение всего …



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