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

Views: 4526


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

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

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

Светодио́д или светоизлучающий диод (СД, СИД, 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



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


  • Moving average – скользящее среднееMoving average – скользящее среднее
    Views: 2473 Скользящая средняя, скользящее среднее (англ. moving average, MA) — общее название для семейства функций, значения которых в каждой точке определения равны среднему значению исходной функции за предыдущий период. Скользящие средние обычно используются с данными временных рядов для сглаживания …
  • MCC – K42 – настройка модуля DMAMCC – K42 – настройка модуля DMA
    Views: 1052 MCC – в версии v.3.95.0 и начиная ядра 4.85.0 конфигуратор предоставляет графический интерфейс для настройки модуля DMA. Для начала: Посмотреть какая версия МСС можно в закладке версии, если …
  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05
    Views: 2255 Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое …
  • The art of DJThe art of DJ
    Views: 263 The art of DJ. The art of DJ has gained wide popularity. Today, a DJ is not just someone whose task is to mix tracks; a DJ is …
  • MPLAB® Harmony – или как это просто! Часть 4.MPLAB® Harmony – или как это просто! Часть 4.
    Views: 2465 Часть четвертая – это может показаться немного сложно. Структура проекта. Для облегчения конфигурирования проекты MPLAB Harmony обычно структурированы таким образом, чтобы изолировать код, необходимый для настройки «системы», от …
  • Емкостной сенсорЕмкостной сенсор
    Views: 3249 Изучаем изготовление емкостных сенсоров на PIC-микроконтроллере. Конструкция емкостных сенсоров имеет вид: Емкостные сенсоры строятся по схеме высокочастотного генератора, сам принцип основан на измерение частоты этого генератора. Частота зависит …
  • Electronic Speed ​​Controller for FPV droneElectronic Speed ​​Controller for FPV drone
    Views: 72 Другий проект цієї серії, це контролер швидкості або контролер управління BLCD мотором. Для аналізу було вибрано плату SpeedyBee BLS 55A 4-in-1 ESC із комплекту SpeedyBee F405 V4 BLS …
  • PIC18 – System ArbitrationPIC18 – System Arbitration
    Views: 754 Системный арбитр. Разрешает доступ к памяти между выборами уровнями системы (т.е. Main, Interrupt Service Routine) и выбором периферийных устройств (т.е. DMA и Scanner) на основе назначенных пользователем приоритетов. Каждый …
  • PIC32MZ – прерывания (заметки)PIC32MZ – прерывания (заметки)
    Views: 538 Виды формирования запоминая контекста при входе в прерывания. Компилятор представляет три варианта AUTO – когда запоминания места возврата из подпрограммы возложено на программу, т.е все создается программно. Этот …
  • Защита датчиков температуры DS18B20 от статического электричестваЗащита датчиков температуры DS18B20 от статического электричества
    Views: 2013 Статья перепечатана с сайта http://svetomuzyka.narod.ru При удалении датчика на большие расстояния возникает опасность наведения импульсов высокого напряжения на кабель, который соединяет датчик с контролером. Если не принимать меры защиты, …



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