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

Visits: 4302


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

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

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

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



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


  • Сумеречное релеСумеречное реле
    Visits: 1427 Реле управления освещением, датчик день-ночь – одним словом фотореле для управления освещением или формирования сигнала для системы умный дом о понижении или повышении освещенности относительно заданного уровня. Реле выполнено по классической схеме, конденсаторный блок питания, от сети переменного тока …
  • Temperature measurement with NTC thermistor.Temperature measurement with NTC thermistor.
    Visits: 239 Проекты в которых присутствовало измерение температуры начинал с цифровых датчиков, т.к. в них все просто и не надо ничего преобразовывать и вычислять. При использовании цифровых датчиков ты получаешь …
  • ch-светомузыка от теории до реализацииch-светомузыка от теории до реализации
    Visits: 682 Сразу оговоримся технология или теория ch-светомузыки, это постоянно развивающийся процесс и то что будет сказано сегодня завтра может быть опровергнуто и считаться ошибочным. Назовем само решение проблемы автоматического …
  • MPLAB® Harmony – или как это просто! Часть 2.MPLAB® Harmony – или как это просто! Часть 2.
    Visits: 2658 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
  • Интерактивные LedИнтерактивные Led
    Visits: 453 Тема проекта   продолжение следует…. Это может быть интересно
  • MPLAB® Code ConfiguratorMPLAB® Code Configurator
    Visits: 1768 MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект.
  • Просто о внешних переменныхПросто о внешних переменных
    Visits: 766  Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
  • PIC32MZ – Core Timer (библиотека)PIC32MZ – Core Timer (библиотека)
    Visits: 533 Переработанные файлы от Microchip, библиотека для работы с Core Timer.
  • MPLAB® Harmony – или как это просто! Часть 3.MPLAB® Harmony – или как это просто! Часть 3.
    Visits: 2059 Часть третья – копнём немного глубже. Вы наверное заметили, что во второй главе, вроде сначала все шло как по маслу, а потом, что бы заморгали светики, я вставил …
  • Проект с использованием MCC часть 04Проект с использованием MCC часть 04
    Visits: 1109 Теперь простого горения светиков нам не достаточно, заставим их мигать. Для начала используем первобытно простой способ, но достаточно простой. Используем функции delay, напрягаться откуда они берутся не будем, самое …



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