Схемы на pic контроллерах: Проекты на PIC

Содержание

Электроника,схемы на микроконтроллере

Подробности

   Предоставляю вам схему спец сигнала  (Крякалка), для самостоятельной сборки. Решил поставить ребенку на велосипед (пусть прохожих под домом пугает), но так же можно и в автомобиль поставить (если есть связи в ГАИ).  Данное устройство состоит из минимум деталей, а так же простая в сборке и под силу каждому. 

Подробнее…

Подробности

   В интернете цены на часы основанные на лампах ИН-14 если и попадаются еще, то цены на них весьма дороговаты. Мы рассмотрим как спаять

часы на лампах ИН своими руками, так как это намного дешевле чем купить готовые,при этом они всегда будут радовать ваши глаза.

Подробнее…

Подробности

   Пришло время еще раз затронуть тему изготовление программатора, так как цены на них не такие и маленькие,и при этом гарантии нет что он заработает. Рассмотрим схему программатора jdm с внешним питанием,с помощью которого програмируются микросхемы PIC и подключаемому к стационарному компьютеру через COM(rs232) порт.

Список прошиваемых PIC микроконтроллеров в статье.

Подробнее…

Подробности

Простое ИК управление своими руками

Управление устройствами по ИК каналу может пригодиться для разных нужд, как в квартире так и за ее пределами. Например приспособить для открытия или закрытия дверей автомобиля, включение и выключения люстры с пульта и т.д. Данная схема ИК управления является лишь главным устройством передатчика и приемника.

Данное устройство предназначено для управления нагрузками на небольшой дистанции. За основу взят дешевый, миниатюрный ПДУ с eBay. К нему был изготовлен дешифратор на микроконтроллере PIC12F675. Режим работы — кнопка. Состояние на выходе дешифратора удерживается до тех пор, пока нажата кнопка на пульте.

 

Подробнее…

Подробности

Гирлянда на микроконтроллере своими руками

гирлянда своими руками С наступающим вас дорогие пользователи. И к предстоящему празднику решил порадовать вас схемой-новогодняя гирлянда на микроконтроллере pic.

И прошу к просмотру подробнее данной статьи.

 

Подробнее…

Подробности

Полицейская крякалка своими руками на PIC

схема крякалки сирены

Предлагаю вам для повторения схему звукового устройства, имитирующего сигнал «Милицейской Сирены». Устройство сделано на микроконтроллере  PIC16F628. Схема имеет две различные сирены и «Крякалку».

В основном полицейскую крякалку ставят в автомобиль,так что смотрите еще другие схемы для авто

Так же вам понадобиться программатор для PIC, вот схема

Подробнее…

Подробности

Простой измеритель емкости и индуктивности

схема измерителя емкости

Вы скажите что современные измерительные приборы имеют функцию измерять емкость и индуктивность

. Но не так давно такие приборы очень много весили так как микросхемы только появлялись и требовали особого навыка работы.

В статье предлагается проверенная схема своими руками измерителя емкости и индуктивности катушки.Если вы задавались вопросом как измерить емкость или индуктивность.То вам сюда.Схема собрана на микроконтроллере PIC 16F84A.

Подробнее…

Подробности

Схема копирования ключей от домофона

схема копирования ключей ключ для всех домофонов Бывает что нам нужно изготовить ключ от всех домофонов,но в интернете есть не всех шифровки, и для копирования предлогаю схему

копирования или как называют копирщика домофонных ключей на микроконтроллере pic

Копии домофонных ключей делаются с помощью компьютерной программы и адаптера, подключаемого к компьютеру.

 

Подробнее…

Подробности

Часы с будильником на PIC

схема электронных часов Схема часов с будильником своими руками вы можете собрать такую как на фото слева.

Часы можно питать как от  сети,но ставить блок  питания,или же от батареек  но  или от аккумуляторов,но при использовании других методов непредусматривая сеть,следует отключать индикатор.

 

 

 

Подробнее…

Подробности

Схема электронных часов на pic16f628a

схема электронных часов Предлогаю вашему вниманию схему электронных часов своими руками на микроконтроллере PIC 16F628A

 

 

 

 

 

 

 

 

 

Подробнее…

Устройства на микроконтроллерах





     Светодиодный куб 8х8х8 элементов — принципиальная схема на микроконтроллере AtMega32 и MAX232, с возможностью подключения к порту ПК.

06.02.2015 Прочитали: 29250

     Конструкция наручных электронных часов с микроконтроллером и двумя светодиодами, показывающим время в двоичном коде.

15.01.2015 Прочитали: 27605

     Программатор EXTRA-PIC v3.2, с возможностью программирования PIC и AVR контроллеров через COM порт.

06.12.2014 Прочитали: 56962

     Всего на одном отечественном вакуумном индикаторе ИН-12 и микроконтроллере PIC16F84A можно собрать небольшие оригинальные часы.

05.12.2014 Прочитали: 18531

     Простой LC метр — цифровой прибор с ЖК дисплеем, для определения значений ёмкости и индуктивности радиоэлементов.

04.12.2014 Прочитали: 35961

     Как сделать простой USB программатор для начинающих — подробная инструкция и архив с файлами документации.

21.11.2014 Прочитали: 39082

     Электронное информационное табло на 85 светодиодах — практический пример создания LED панели для вывода информации — букв, цифр и так далее.

23.10.2014 Прочитали: 36957

     Электронный блок управления освещением по двум или трём хлопкам, с использованием микроконтроллера Attiny2313 — схема, фото, видео.

19.10.2014 Прочитали: 23619

     Робот Уолли — один из самых миниатюрных роботов на микроконтроллере PIC, с дистанционным управлением.

17.10.2014 Прочитали: 29400





Устройства на микроконтроллерах





МАЛЫШ FM     Простейший металлоискатель — пинпоинтер на микроконтроллере PIC16F629.

10.01.2012 Прочитали: 129089

КАК ПРОШИТЬ PIC КОНТРОЛЛЕР     Принципиальная схема программатора и пример пошаговой прошивки pic-контроллера.

12.09.2011 Прочитали: 148652

УПРАВЛЕНИЕ НАСОСОМ     Схема и фото самодельного блока управления насосом на микроконтроллере ATtiy2313.

30.08.2011 Прочитали: 42293

СТРОБОСКОП СВОИМИ РУКАМИ     Предлагаю для повторения проверенную схему стробоскопа на светодиодах для автомобиля.

20.06.2011 Прочитали: 140882

КЛЮЧИ ДЛЯ ДОМОФОНА     Схема и фотографии универсального ключа на микроконтроллере для домофонов — своеобразной электронной отмычки.

29.05.2011 Прочитали: 93374

ЧАСЫ НА СВЕТОДИОДАХ     Предлагаем интересный вариант передели настольных часов на светодиодные, с микроконтроллерным управлением. Приведено фото и описание конструкции.

16.05.2011 Прочитали: 46845

СХЕМА ПОДСВЕТКИ     Схема интеллектуальной подсветки салона автомобиля, выполненная на микроконтроллере pic12f629.

11.05.2011 Прочитали: 38083

ПРОГРАММАТОР ДЛЯ PIC     Схема простейшего программатора с питанием от компьютера для прошивки контроллеров семейства pic.

27.04.2011 Прочитали: 196983





Осваиваем простейший микроконтроллер PIC. Часть 1 / ХабрВыбор микроконтроллера обычно осуществляется под необходимые задачи. Для изучения хорошо подойдет популярный МК с минимальным набором периферии: PIC16F628A.

Первым делом необходимо скачать документацию по выбранному микроконтроллеру. Достаточно зайти на сайт производителя и скачать Datasheet.

На первых страницах перечислены основные характеристики МК (русское описание).

Основные моменты, которые нам понадобятся:

  • микроконтроллер содержит внутренний генератор на 4 MHz, так же можно подключить внешний кварц частотой до 20 MHz
  • 16 ног микроконтроллера можно использовать как цифровые входы\выходы
  • есть 2 аналоговых компаратора
  • 3 таймера
  • CCP модуль
  • USART модуль
  • 128 байт энергонезависимой памяти EEPROM

Схема расположения выводов:

Vdd — питание.
Vss — земля.

Это минимум, необходимый для работы МК.

Остаются доступными 16 ног МК. Не сложно посчитать, что использование каждой ноги каким-либо модулем уменьшает максимальное число используемых цифровых портов.

Компилятор


Как я уже писал в предыдущих статьях, самым простым и легким я посчитал компилятор JAL с IDE JALEdit.

Качаем JALPack, устанавливаем.
В этом паке содержаться все необходимые библиотеки, а так же примеры их использования.

Запускаем JALEdit. Открываем пример програмы для нашего микроконтроллера: 16f628a_blink.jal, дабы не портить исходник, сразу сохраняем ее в новый файл, к примеру, 16f628a_test.jal.

Весь код можно разделить на 4 блока:

  • выбор МК и его конфигурация
    include 16f628a -- подключение библиотеки нашего МК
    --
    -- This program assumes a 20 MHz resonator or crystal
    -- is connected to pins OSC1 and OSC2.
    pragma target clock 20_000_000 -- oscillator frequency
    -- configuration memory settings (fuses)
    pragma target OSC HS -- HS crystal or resonator
    pragma target WDT disabled -- no watchdog
    pragma target LVP disabled -- no Low Voltage Programming
    pragma target MCLR external -- reset externally
    --

  • объявление переменных, процедур, функций
    alias led is pin_A0
    pin_A0_direction = output

  • выполнение настроек и расчетов до основного цикла
    enable_digital_io() -- переключение всех входов\выходов на цифровой режим
  • бесконечный цикл основных действий МК
    forever loop
    led = on
    _usec_delay(250000)
    led = off
    _usec_delay(250000)
    end loop

Нажав F9 (или соответсвующую кнопку) программа скомпилируется в готовую прошивку, при этом будет видно сколько ресурсов МК будет задействовано:
Code :58/2048 Data:4/208 Hardware Stack: 0/8 Software Stack :80

Если прочитать комментарии, то станет ясно, что данная программа рассчитана на использование внешнего кварца 20MHz.
Так как у нас его пока нет, разберемся с конфигурацией и перепишем программу на использование внутреннего генератора.

Конфигурация


В разных микрокотнролерах существуют различные наборы конфигурационных битов. Узнать о назначении каждого бита можно в даташите (стр. 97).
В подключенной библиотеке каждому биту и каждому его значению присвоена читабельная переменная, остается только выбрать необходимые нам параметры.
-- Symbolic Fuse definitions
-- -------------------------
--
-- addr 0x2007
--
pragma fuse_def OSC 0x13 { -- oscillator
RC_CLKOUT = 0x13 -- rc: clkout on ra6/osc2/clkout, rc on ra7/osc1/clkin
RC_NOCLKOUT = 0x12 -- rc: i/o on ra6/osc2/clkout, rc on ra7/osc1/clkin
INTOSC_CLKOUT = 0x11 -- intosc: clkout on ra6/osc2/clkout, i/o on ra7/osc1/clkin
INTOSC_NOCLKOUT = 0x10 -- intosc: i/o on ra6/osc2/clkout, i/o on ra7/osc1/clkin
EC_NOCLKOUT = 0x3 -- ec
HS = 0x2 -- hs
XT = 0x1 -- xt
LP = 0x0 -- lp
}
pragma fuse_def WDT 0x4 { -- watchdog timer
ENABLED = 0x4 -- on
DISABLED = 0x0 -- off
}
pragma fuse_def PWRTE 0x8 { -- power up timer
DISABLED = 0x8 -- disabled
ENABLED = 0x0 -- enabled
}
pragma fuse_def MCLR 0x20 { -- master clear enable
EXTERNAL = 0x20 -- enabled
INTERNAL = 0x0 -- disabled
}
pragma fuse_def BROWNOUT 0x40 { -- brown out detect
ENABLED = 0x40 -- enabled
DISABLED = 0x0 -- disabled
}
pragma fuse_def LVP 0x80 { -- low voltage program
ENABLED = 0x80 -- enabled
DISABLED = 0x0 -- disabled
}
pragma fuse_def CPD 0x100 { -- data ee read protect
DISABLED = 0x100 -- disabled
ENABLED = 0x0 -- enabled
}
pragma fuse_def CP 0x2000 { -- code protect
DISABLED = 0x2000 -- off
ENABLED = 0x0 -- on
}
  • OSC — конфигурация источника тактирования
    может принимать 8 различных значений, 4 из которых нам могут понадобиться
    1. INTOSC_NOCLKOUT — внутренний генератор (4M Hz)
    2. HS — внешний высокочастотный кварц (8-20 MHz)
    3. XT = внешний кварц (200 kHz — 4 MHz)
    4. LP — внешний низкочастотный кварц (до 200 kHz)
  • WDT — сторожевой таймер.
    Основная работа этого таймера в том, что бы перезагрузить микроконтроллер когда он дотикает до конца.
    Что бы перезагрузки не происходило, его нужно своевременно обнулять.
    Таким образом при сбое счетчик таймера перестанет обнуляться, что приведет к сбросу МК. Иногда бывает удобно, но в данный момент нам это не потребуется.
  • PWRTE — очередной таймер.
    При активации он будет сбрасывать МК до тех пор, пока питание не поднимется до нужного уровня.
  • BROWNOUT — сброс МК при падении питания ниже нормы.
  • MCLR — активация возможности внешнего сброса МК.
    При включении функции МК будет в постоянном резете до тех пор, пока на ноге MCLR (pin 4) не будет положительного напряжения.
    Для сброса МК достаточно установить кнопку, замыкающую pin 4 на землю.
  • LVP — активация возможности программирования при низком напряжении.
    При активации один цифровой вход переключится в режим LVP (pin 10). Если подать 5В на эту ногу, то МК перейдет в режим программирования. Для нормальной работы МК требуется держать на этой ноге 0В (подсоединить к земле).
    Мы будем использовать программатор, использующий повышенное напряжение, потому LVP активировать не требуется.
  • CPD — защита EEPROM от считывания программатором.
  • CP — защита FLASH (прошивки) от считывания программатором.

Изменим конфигурацию под себя:

pragma target clock 4_000_000 -- указываем рабочую частоту, необходимо для некоторых функций расчета времени
-- конфигурация микроконтроллера
pragma target OSC INTOSC_NOCLKOUT -- используем внутренний генератор
pragma target WDT disabled -- сторожевой таймер отключен
pragma target PWRTE disabled -- таймер питания отключен
pragma target MCLR external -- внешний сброс активен
pragma target BROWNOUT disabled -- сбос при падении питания отключен
pragma target LVP disabled -- программирование низким напряжением отключено
pragma target CPD disabled -- защита EEPROM отключена
pragma target CP disabled -- защита кода отключена

Моргаем светодиодом по нажатию кнопки


Модифицируем программу так, что бы светодиод моргал только тогда, когда зажата кнопка.
Решив данную задачу мы научимся работать с цифровыми портами как в режиме входа, так и в режиме выхода.
Цифровой выход

Выберем еще неиспользуемую ногу МК. Возьмем, к примеру, RB5(pin 11). Данная нога не имеет дополнительных функций, потому она нам более нигде не понадобится.
В режиме цифрового выхода МК может притягивать к ноге либо питание, либо землю.
Подключать нагрузку можно как к плюсу, так и к минусу. Разница будет лишь в том, когда и в какую сторону потечет ток.


В первом случае ток потечет от МК при установке единицы, а во втором — к МК при установке нуля.

Дабы светодиод зажигался от логической единицы, остановимся на первом варианте.

Для ограничения тока через ногу (максимально допустимо 25 мА на цифровой вход или 200 мА на все порты) установлен токоограничительный резистор. По простейшей формуле высчитываем минимальное значение в 125 Ом. Но так как предел нам не нужен, возьмем резистор в 500 Ом (а точнее ближайший подходящий).

Для подключения более мощной нагрузки можно использовать транзисторы в различных вариантах.

Цифровой вход

Возьмем вторую неиспользуемую нигде ногу — RB4 (pin 10, указанная в распиновке функция PGM отностися к LVP, который мы отключили).
В режиме цифрового входа микроконтроллер может считывать два состояния: наличие или отсутствие напряжения. Значит нам необходимо подключить кнопку так, что бы в одном состоянии на ногу шел плюс, а во втором состоянии — к ноге подключалась земля.

В данном варианте резистор используется в качестве подтяжки (Pull-up). Обычно для подтяжки применяют резистор номиналом 10 кОм.

Впрочем, подтягивающий резистор не всегда необходим. Все ноги PORTB (RB0-RB7) имеют внутреннюю подтяжку, подключаемую программно. Но использование внешней подтяжки куда надежнее.

Можно подключать не только кнопку, главное помнить о ограничении тока через МК.
Кнопка сброса

Пока не забыли, что мы активировали внешний сброс, добавим аналогичную кнопку на ногу MCLR (pin 4).

После нажатия такой кнопки МК начнет выполнение программы с нуля.

Прошивка

Присваиваем нашему светодиоду и кнопке переменные:
enable_digital_io() -- переключение всех входов\выходов на цифровой режим
--
alias led is pin_B5 -- светодиод подключен к RB5
pin_B5_direction = output -- настраиваем RB5 как цифровой выход
--
alias button is pin_B4 -- кнопка подключена к RB4
pin_B4_direction = input -- настраиваем RB4 как вход
led = off -- выключаем светодиод

Теперь присваивая переменной led значения 1 или 0 (on или off, true или false, другие алиасы..) мы будем подтягивать к нужной ноге МК или плюс, или минус, тем самым зажигая и гася светодиод, а при чтении переменной button мы будем получать 1 если кнопка не нажата и 0 если кнопка нажата.

Теперь напишем необходимые нам действия в бесконечном цикле (эти действия будут выполняться постоянно. При отсутствии бесконечного цикла МК зависнет):

forever loop
led = off -- выключаем светодиод
_usec_delay(500000) -- ждем 0,5 сек
if Button == 0 then -- если кнопка нажата, выполняем действия
led = on -- зажигаем светодиод
_usec_delay(500000) -- ждем 0,5 сек
end if
end loop

Задержка считается просто:
частота генератора у нас 4MHz. Рабочая частота в 4 раза меньше: 1 MHz. Или 1 такт = 1 мкс. 500.000 мкс = 0,5 с.

Компилируем прошивку:

Errors :0 Warnings :0
Code :60/2048 Data:4/208 Hardware Stack: 0/8 Software Stack :80

Теперь нам необходимо записать эту прошивку в МК, собрать устройство согласно схеме и проверить, что у нас все получилось как надо.

Программатор


Все таже схема:

Смотрим на распиновку:

  • PGD — pin 13
  • PGC — pin 12
  • MCLR(Vpp) — pin 4
  • Vdd — pin 14
  • Vss — pin 5

Паяем…


Некачественная пайка — одна из основных проблем неработоспособности устройства.
Не повторяйте мои плохие привычки: не используйте навесной монтаж.

В качестве питания 5В в данном случае использовался хвост от старой PS/2 мыши, вставленный в разъем для мыши.

Подключаем к компьютеру.

Качаем и запускаем WinPic800.

Идем в Settings->Hardware, выбираем JDM и номер порта, на котором висит программатор

Нажимаем Hardware Test, затем Detect Device

Открываем нашу прошивку pic628a_test.hex

На вкладке Setting можно проверить, что конфигурационные биты выставлены верно, при желании тут же их можно изменить

Program All, затем Verify All

Если ошибок не возникло, продолжаем паять.

Результат


Финальная схема:

От программатора нам мешает только высокое напряжение (12в) на MCLR. Дабы не отпаивать весь программатор, можно отпаять только один провод… Или просто не подключать программатор к COM порту. Остальные провода нам мешать не будут (а подключенные питание и земля только упростят пайку).

Кнопку на MCLR паять можно по желанию, но подтяжка обязательна.

При повторном подключении программатора резистор необходимо будет убрать, иначе он подтянет 12в к питанию.


Результат работы можно увидеть на видео.

Итак, у нас получилось самое простое устройство на микроконтроллере: мигалка светодиодом.

Теперь нам необходимо научиться пользоваться всей оставшейся периферией, но об этом в следущей статье.

Устройства на микроконтроллерах





     Простые часы на светодиодных матрицах с функцией настраиваемой бегущей строкой, посредством которой выводится вся информация.

01.11.2013 Прочитали: 40759

     Повторение конструкции светодиодного RGB светильника с бесконтактным управлением, на фотоэлементах и Attiny13.

26.10.2013 Прочитали: 23152

     Принципиальная схема регулятора температуры электрокамина, с применением микроконтроллера 16F628.

24.10.2013 Прочитали: 31264

     Как сделать часы с использованием вакуумных советских индикаторов ИН-14 — схема, фото и видео.

16.10.2013 Прочитали: 56631

     Проверенная схема измерителя ESR конденсаторов, собранная с примнением МК Attiny2313 и двухстрочного ЖК индикатора.

19.06.2013 Прочитали: 88199

     Цифровой измеритель ампер и вольт, на микроконтроллере Attiny26, с отображением информации на LCD дисплее. Схема, фото и описание работы устройства.

31.03.2013 Прочитали: 35424

     Простые светодиодные часы на микроконтроллере Attiny2313 — схема и фото готовой самодельной конструкции.

14.03.2013 Прочитали: 35989





Устройства на микроконтроллерах





     Схема самодельного измерителя индуктивности и ёмкости на микроконтроллере pic16 и ЖК дисплее от Nokia.

30.05.2014 Прочитали: 57754

     Как сделать терморегулятор с цифровой индикацией и микроконтроллером для электрического духового шкафа — два варианта схем.

23.04.2014 Прочитали: 116525

     Сборка и настройка простой встраиваемой конструкции вольтамперватметра на микроконтроллере PIC16F676 и микросхеме 74HC595.
 

10.04.2014 Прочитали: 28998

     Инструкция по изготовлению цифрового ампервольтметра на микроконтроллере и ЖК дисплее от телефона Nokia-1202.

04.03.2014 Прочитали: 62304

     Общая информация о микросхемах в радиоэлектронике. Что это такое и когда, в каких случаях их используют.

02.03.2014 Прочитали: 52966

     Игрушечная машинка на микроконтроллере ATMEGA8, которая имеет оптические датчики и может обходить препятствия.

01.02.2014 Прочитали: 13415

     Делаем простейший декоративный LED светильник на небольшом маломощном RGB светодиоде и микроконтроллере.

14.01.2014 Прочитали: 19629

     Микроконтроллеры для начинающих — делаем простой термометр на AtTiny2313.

12.01.2014 Прочитали: 37170

     Делаем электронный измеритель температуры на основе специального датчика, микроконтроллера и ЖК дисплея от мобильного.

07.01.2014 Прочитали: 33643





Схемы на микроконтроллерах

     Оригинальный индикатор звука, собранный на базе микроконтроллера ATMEGA624 и специальных люминисцентных радиоламп.

18.10.2014 Читали: 7146


     Делаем программируемый таймер на микроконтроллере PIC16F628A, с цифровым жидкокристаллическим индикатором для отображения времени и настроек.

16.10.2014 Читали: 18376


     Схема интересного устройства — веб радио плеер на Ардуино. Предназначен для прослушивания музыки из интернета без компьютера.

14.10.2014 Читали: 33187


   Делаем самодельный термоконтроллер на МК ATMEL90S2313.

10.11.2013 Читали: 16801


     Принципиальная схема и видео дискотечного светового светодиодного прибора, работающего по принципу вращающейся головы.

26.08.2013 Читали: 23309


     Устройство, представленное в этом проекте, содержит в себе функции сразу 3-х измерителей: вольтметр, термометр и часы.

31.07.2013 Читали: 28865


     Схема, печатная плата и демонстрационнй аудиофайл сирены на контроллере Pic12F629, с усилителем мощности.

23.06.2013 Читали: 28039



Введение в архитектуру PIC и MPLABX

В 1980 году Intel разработала первый микроконтроллер (8051) с Гарвардской архитектурой 8051, и с тех пор микроконтроллеры произвели революцию в электронике и встраиваемой промышленности. Благодаря технологическому прогрессу со временем у нас появилось много более эффективных и маломощных микроконтроллеров, таких как AVR, PIC , ARM. Эти микроконтроллеры более функциональны и просты в использовании, имеют новейшие протоколы связи, такие как USB, I2C, SPI, CAN и т. Д.Даже Arduino и Raspberry Pi полностью изменили взгляд на микроконтроллеры, и Raspberry Pi — это не просто микроконтроллер, а встроенный компьютер.

Это будет первая часть серии учебных пособий, которые еще будут в курсе, которые помогут вам в изучении микроконтроллеров PIC . Если вы из области электроники, и вы всегда хотели начать с изучения некоторых микроконтроллеров и погрузиться в мир кодирования и конструирования, то эта серия руководств станет вашим первым шагом для начала.

Микроконтроллер

PIC — очень удобный выбор для начала работы с проектами микроконтроллеров, потому что он имеет отличные форумы поддержки и послужит прочной основой для развития всех ваших продвинутых микроконтроллеров, которые вы еще не изучили.

Эти учебные пособия предназначены для абсолютных или средних учеников ; мы планировали начать с самых базовых проектов до продвинутых. Мы ожидаем от учеников никаких предварительных условий , так как мы здесь, чтобы помочь вам с любого уровня.Каждый урок будет иметь теоретическое объяснение и симуляцию, сопровождаемую практическим уроком. Эти учебные пособия не будут включать в себя какие-либо платы для разработки, мы создадим наши собственные схемы с использованием доски для тестирования. Так что готовьтесь и уделяйте время каждую неделю, чтобы усовершенствовать вас с помощью микроконтроллеров.

Теперь давайте начнем с Простое введение в микроконтроллеры PIC и некоторых настроек программного обеспечения, чтобы мы могли перейти к следующему уроку. В конце проверьте Video для установки и настройки MPLABX, XC8, Proteus и быстрой распаковки программатора PICkit 3.

PIC Микроконтроллер Архитектура и приложения:

Микроконтроллер PIC был представлен Microchip Technologies в 1993 году. Первоначально эти PIC были разработаны как часть PDP (Программируемый процессор данных) Компьютеры и все периферийные устройства компьютера были связаны с использованием этого микроконтроллера PIC. Следовательно, PIC получил свое название как для контроллера периферийного интерфейса . Позже Microchip разработал множество микросхем серии PIC, которые можно использовать для любого небольшого применения, например, для освещения, вплоть до продвинутого.

Каждый микроконтроллер должен быть построен на некоторой архитектуре, наиболее известным типом архитектуры является архитектура Гарварда, наша PIC основана на этой архитектуре, поскольку она принадлежит к классическому семейству 8051. Давайте вкратце расскажем об архитектуре PIC в Гарварде.

Микроконтроллер PIC16F877A состоит из встроенного ЦП, портов ввода-вывода, организации памяти, аналого-цифрового преобразователя, таймеров / счетчиков, прерываний, последовательной связи, генератора и модуля CCP, которые собирают, делает ИС мощным микроконтроллером для начинающих. начать с.Общая блок-схема архитектуры PIC показана ниже

Harvard-architecture-of-PIC-microcontroller

CPU (центральный процессор):

Микроконтроллер имеет процессор для выполнения арифметических операций, логических решений и операций, связанных с памятью. Процессор должен координировать между ОЗУ и другими периферийными устройствами микроконтроллера.

Он состоит из АЛУ (Арифметическая логическая единица), с помощью которого он выполняет арифметические операции и логические решения.Также имеется MU (блок памяти) для хранения инструкций после их выполнения. Это MU определяет размер программы нашего MC. Он также состоит из CU (блок управления), который действует как коммуникационная шина между процессором и другими периферийными устройствами микроконтроллера. Это помогает при извлечении данных после их обработки в указанных регистрах.

Оперативная память (RAM):

Память с произвольным доступом — это та, которая определяет скорость нашего микроконтроллера.Оперативная память состоит из банков регистров, каждому из которых назначается определенная задача. В целом их можно разделить на два типа:

  • Регистр общего назначения (GPR)
  • Регистр специальных функций (SFR)

Как следует из названия, GPR используются для общих функций регистра , таких как сложение, вычитание и т. Д. Эти операции ограничены в пределах 8-бит. Все регистры по георадару доступны для записи и чтения. Они не имеют никаких функций самостоятельно, если это не определено программным обеспечением.

Принимая во внимание, что SFR используется для выполнения сложных специальных функций , которые также включают некоторую 16-битную обработку, их регистры могут быть прочитаны только (R), и мы не можем ничего записать (W) в них. Таким образом, эти регистры имеют предопределенные функции для выполнения, которые устанавливаются во время производства, и они просто отображают нам результат, используя который мы можем выполнять некоторые связанные операции.

memory-management-in-PIC-microcontroller

Постоянная память (ПЗУ):

Память только для чтения — это место, где хранится наша программа.Это решает максимальный размер нашей программы; следовательно, он также называется программной памятью . Когда MCU работает, программа, сохраненная в ПЗУ, выполняется согласно каждому циклу команд. Этот блок памяти может использоваться только при программировании PIC, во время выполнения он становится доступным только для чтения.

Электрически стираемое программируемое постоянное запоминающее устройство (ЭСППЗУ):

EEPROM — это другой тип блока памяти. В этом блоке памяти значения могут быть сохранены во время выполнения программы.Здесь хранятся только электрически стираемых значений, то есть эти значения будут сохранены в PIC, даже если IC выключена. Их можно использовать как небольшое пространство памяти для хранения выполненных значений; однако объем памяти будет уменьшаться в килобайтах.

Флэш-память :

Флэш-память

также является программируемой постоянной памятью (PROM), в которой мы можем читать, записывать и стирать программу тысячи раз.Как правило, микроконтроллер PIC использует этот тип ПЗУ.

портов ввода / вывода

  • Наш PIC16F877A состоит из пяти портов, а именно порта A, порта B, порта C, порта D и порта E.
  • Из всех пяти PORTS только порт A является 16-битным, а PORT E — 3-битным. Остальные ПОРТЫ 8-битные.
  • Выводы на этих PORTS могут использоваться как вход или выход, в зависимости от конфигурации регистра TRIS.
  • Помимо выполнения операций ввода-вывода, контакты могут также использоваться для специальных функций, таких как SPI, прерывание, ШИМ и т. Д.

Автобус:

Термин «шина» — это просто набор проводов, которые соединяют устройство ввода или вывода с ЦП и ОЗУ.

Шина данных используется для передачи или приема данных.

Адресная шина используется для передачи адреса памяти от периферийных устройств к ЦПУ. Контакты ввода / вывода используются для взаимодействия с внешними периферийными устройствами; UART и USART оба протокола последовательной связи используются для сопряжения последовательных устройств, таких как GSM, GPS, Bluetooth, IR и т. Д.

Address-bus-and-data-bus-in-PIC-microcontroller

Выбор микроконтроллера PIC для наших обучающих программ:

Микроконтроллеры PIC

от компании Microchip разделены на 4 больших семейства. Каждое семейство имеет множество компонентов, которые обеспечивают встроенные специальные функции:

  1. Первое семейство, PIC10 (10FXXX) — называется Low End.
  2. Второе семейство, PIC12 (PIC12FXXX) — называется Mid-Range.
  3. Третье семейство — PIC16 (16FXXX).
  4. Четвертое семейство — ПОС 17/18 (18FXXX)

Поскольку мы начинаем изучать PIC, давайте выберем IC, которая используется и доступна повсеместно.Эта микросхема принадлежит семейству 16F, номер детали микросхемы PIC16F877A. От первого урока до конца мы будем использовать ту же микросхему, что и , эта микросхема оснащена всеми расширенными функциями, такими как SPI, I2C, UART и т. Д. Но если вы не получите ничего из этого сейчас, это вполне нормально. , мы будем проходить через каждый учебник и, наконец, использовать все вышеупомянутые функции.

После того, как IC выбрана, очень важно прочитать спецификацию IC.Это должно стать первым шагом в любой концепции, которую мы собираемся попробовать. Теперь, так как мы выбрали этот PIC16F877A, давайте прочитаем спецификацию этой микросхемы в техническом описании.

Функция периферии, упоминает, что она имеет 3 таймера , два из которых 8-битные и один 16-битный прескалер. Эти таймеры используются для создания функций синхронизации в нашей программе. Их также можно использовать в качестве счетчиков. Это также показывает, что у него есть CCP (Capture Compare и PWM) , что помогает нам генерировать ШИМ-сигналы и считывать входящие частотные сигналы.Для связи с внешним устройством он имеет SPI, I2C, PSP и USART . В целях безопасности он оснащен с функцией автоматического отключения (BOR), , которая помогает сбросить программу в то время как.

Аналоговые функции, Указывает, что ИС имеет 10-битный 8-канальный АЦП . Это означает, что наша ИС может преобразовывать аналоговые значения в цифровые с разрешением 10 бит и имеет 8 аналоговых выводов для их считывания. У нас также есть два внутренних компаратора, которые можно использовать для непосредственного сравнения входного напряжения без фактического чтения их через программное обеспечение.

Специальные функции микроконтроллера, означает, что он имеет 100 000 циклов стирания / записи, означает, что вы можете программировать его около 100 000 раз. In-Circuit Serial Programming ™ (ICSP ™), помогает нам программировать IC напрямую, используя PICKIT3. Отладка может быть выполнена с помощью отладки в цепи (ICD ). Еще одной функцией безопасности является сторожевой таймер (WDT), , который является самонадежным таймером, который при необходимости сбрасывает всю программу.

На изображении ниже представлено выводов нашей платы PIC16F877A IC . Это изображение представляет каждый контакт с его именем и другими функциями. Это также можно найти в таблице данных. Держите этот образ под рукой, поскольку он поможет нам во время наших аппаратных работ.

pinouts-of-PIC16F877A-IC

Выбор программного обеспечения для наших учебных пособий:

Микроконтроллер

PIC может быть запрограммирован с помощью различных программ, доступных на рынке. Есть люди, которые до сих пор используют язык ассемблера для программирования микроконтроллеров PIC.Для наших руководств мы выбрали самое передовое программное обеспечение и компилятор, которые были разработаны самой Microchip.

Для программирования микроконтроллера PIC нам понадобится IDE (интегрированная среда разработки) , где происходит программирование. Компилятор , , где наша программа преобразуется в читаемую MCU форму, называемую HEX-файлами. IPE (интегрированная среда программирования) , которая используется для выгрузки нашего шестнадцатеричного файла в наши микроконтроллеры PIC.

IDE: MPLABX v3.35

IPE: MPLAB IPE v3.35

Компилятор: XC8

Microchip предоставил все эти три программы бесплатно. Их можно скачать прямо с их официальной страницы. Я также предоставил ссылку для вашего удобства. После загрузки установите их на свой компьютер. Если у вас возникли какие-либо проблемы, вы можете просмотреть видео , приведенное в конце.

Для целей моделирования мы использовали программное обеспечение PROTEUS 8 , предоставленное Labcenter.Это программное обеспечение может использоваться для моделирования нашего кода, сгенерированного с использованием MPLABX. Существует бесплатное демонстрационное программное обеспечение, которое можно загрузить с их официальной страницы по ссылке.

Готовимся с оборудованием:

Все наши учебники будут заканчиваться аппаратным обеспечением. Чтобы изучить PIC наилучшим из возможных способов, всегда рекомендуется тестировать наши коды и схемы на оборудовании, потому что надежность симуляции очень мала. Коды, которые работают на программном обеспечении для моделирования, могут работать не так, как вы ожидали, на вашем оборудовании.Следовательно, мы будем строить наши собственные схемы на платах Perf для вывода наших кодов.

Для выгрузки или загрузки нашего кода в PIC нам понадобится PICkit 3. Программист / отладчик PICkit 3 — это простой и недорогой внутрисхемный отладчик, который управляется компьютером, на котором работает MPLAB IDE (v8.20). или выше) программное обеспечение на платформе Windows. Программист / отладчик PICkit 3 является неотъемлемой частью набора инструментов разработчика. В дополнение к этому нам также потребуется другое оборудование, такое как плата Perf, паяльная станция, микросхемы PIC, кварцевые генераторы, конденсаторы и т. Д.Но мы добавим их в наш список по мере прохождения наших руководств.

Я привез свой PICkit 3 от Amazon, видео о том же распаковке можно найти в видео ниже. Ссылка для PICKIT3 также предоставляется; цена может быть немного высокой, но поверьте мне, стоит инвестировать.

PICkit-3-programmer-debugger

СЕЙЧАС СО ВСЕМ ГОТОВЫМ, ЧТО МЫ НАЧИНАЕМ РАБОТАТЬ С НАШЕГО СЛЕДУЮЩЕГО ОБУЧЕНИЯ

,Взаимодействие светодиодов
с микроконтроллером PIC: принципиальная схема и код

В наших предыдущих двух уроках мы обсуждали, как начать работу с PIC с использованием компиляторов MPLABX и XC8, мы также создали нашу первую программу мигания светодиодов с PIC и проверили ее с помощью моделирования. Теперь пришло время заняться оборудованием. В этом уроке мы построим небольшую схему на плате Perf для мигания светодиода с помощью PIC . Мы сбросим программу на наш микроконтроллер PIC и убедимся, что светодиод мигает.Для программирования микроконтроллера PIC мы будем использовать MPLAB IPE.

Необходимые материалы:

Как уже говорилось в нашем предыдущем уроке, нам понадобятся следующие материалы:

  • PicKit 3
  • PIC16F877A IC
  • 40 — Контактный держатель IC
  • Перфорированная доска
  • 20 МГц Crystal OSC
  • Женские и Мужские булавки Bergstick
  • 33pf Конденсатор — 2Nos, 100 мкФ и 10 мкФ.
  • 680 Ом, резистор 10 кОм и 560 Ом
  • светодиод любого цвета
  • 1Паяльник
  • IC 7805
  • 12В адаптер

Что происходит, когда мы «сжигаем» микроконтроллер !!

Это обычная практика, чтобы загрузить код в MCU и заставить его работать внутри MCU.

Но что в действительности происходит внутри MCU, как несколько строк C-программы попадают в кремниевый чип и исполняются?

Чтобы понять это, давайте взглянем на нашу программу

.

LED-blinking-with-PIC-microcontroller-program

Как мы видим, этот код написан на языке C и не имеет смысла для нашего MCU. Это где часть нашего компилятора входит; Компилятор — это тот, который преобразует этот код в машиночитаемую форму. Эта машиночитаемая форма называется HEX-кодом , каждый созданный нами проект будет иметь HEX-код, который будет находиться в следующем каталоге

.
 ** Ваше местоположение ** \ Blink \ Blink.X \ dist \ default \ production \ Blink.X.production.hex 

Если вам интересно узнать, как выглядит этот HEX-код, просто откройте его с помощью блокнота. Для нашей программы Blink HEX-код будет выглядеть следующим образом:

: 060000000A128A11FC2F18
: 100FAA008316031386018312031386018312031324
: 100FBA0086150D30F200AF30F100C130F000F00BB1
: 100FCA00E42FF10BE42FF20BE42F0000831203133A
: 100FDA0086110D30F200AF30F100C130F000F00B95
: 100FEA00F42FF10BF42FF20BF42F0000DB2F830107
: 060FFA000A128A11D52F36
: 02400E007A3FF7
: 00000001FF 

Есть способы о том, как прочитать это и как понять и обратить его обратно на язык ассемблера, но это полностью выходит за рамки этого руководства.Итак, чтобы просто выразить это в двух словах; HEX — это конечный программный результат нашего кодирования, и это то, что MPLAB IPE отправит для записи MCU.

Флэш-память:

HEX-код хранится в MCU в месте, называемом флэш-памятью . Флэш-память — это место, где наша программа будет храниться внутри MCU и выполняться оттуда. Как только мы скомпилируем программу в MPLABX, мы получим следующую информацию о типе памяти на консоли вывода

.

LED-blinking-with-PIC-microcontroller-config-bits

Поскольку мы только что скомпилировали небольшую светодиодную программу, сводная память показывает, что мы только что использовали 0.5% доступного пространства программы и 1,4% пространства данных.

Память микроконтроллера PIC16F877 в основном делится на 3 типа:

Память программ: Эта память содержит программу (которую мы написали) после ее записи. Напоминаем, что программный счетчик выполняет команды, хранящиеся в памяти программ, одну за другой. Так как мы написали очень маленькую программу, мы потратили всего 0,5% общего пространства. Это энергонезависимая память, означающая, что сохраненные данные не будут потеряны после отключения питания.

Память данных: Это тип оперативной памяти, который содержит специальные регистры, такие как SFR (регистр специальных функций), который включает сторожевой таймер, коричневый сброс и т. Д. И GPR (регистр общего назначения), который включает в себя TRIS и PORT и т. Д. Переменные которые хранятся в памяти данных во время программы, удаляются после выключения MCU. Любая переменная, объявленная в программе, будет находиться в памяти данных. Это также изменчивая память.

EEPROM данных (электрически стираемое программируемое постоянное запоминающее устройство) : память, которая позволяет хранить переменные в результате записи записанной программы.Например, если мы назначим переменную «a», чтобы сохранить в ней значение 5 и сохранить ее в EEPROM, эти данные не будут потеряны, даже если питание выключено. Это энергонезависимая память.

Программная память

и EEPROM являются энергонезависимой памятью и называются флэш-памятью или EEPROM .

ICSP (внутрисхемное последовательное программирование):

Мы будем программировать наш PIC16F877A, используя опцию ICSP, которая доступна в нашем MCU.

Теперь, что такое ICSP?

ICSP — это простой способ, который помогает нам программировать микроконтроллер даже после того, как он размещен внутри нашей доски проектов.Для программирования MCU не требуется отдельная плата программиста, все, что нам нужно, — это 6 подключений программатора PicKit3 к нашей плате следующим образом:

1

VPP (или MCLRn)

Для входа в режим программирования.

2

Vcc

Мощность Контакт 11 или 32

3

GND

заземление PIN 12 или 31

4

PGD — Данные

RB7. PIN40

5

PGC — Часы

RB6. PIN 39

6

PGM — LVP включить

RB3 / RB4. Не обязательно

ICSP подходит для всех пакетов PIC; все, что нам нужно, это вытащить эти пять контактов (6-й контакт PGM не является обязательным) из MCU в Pickit3, как показано на рисунке ниже.

ICSP-connections-for-Pickit3

Схема и оборудование:

Теперь у нас есть готовый код HEX, и мы также знаем, как подключить PicKit 3 к нашему PIC MCU с помощью ICSP. Итак, давайте пойдем дальше и припаяем схему с помощью следующих схем:

LED-blinking-with-PIC-microcontroller-circuit-diagram

В вышеупомянутой схеме я использовал 7805, чтобы отрегулировать выход 5V для моего микроконтроллера PIC. Этот регулятор будет с питанием от 12В настенного адаптера . КРАСНЫЙ Светодиод используется, чтобы указать, включен ли PIC.Разъем J1 используется для программирования ICSP. Контакты соединены, как описано в таблице выше.

Первый вывод MCLR должен поддерживаться на высоком уровне с помощью 10 КБ по умолчанию. Это предотвратит сброс MCU. Для сброса MCU вывод MCLR должен быть заземлен, что можно сделать с помощью переключателя SW1.

Светодиод подключен к выводу RB3 через резистор с сопротивлением 560 Ом (см. Калькулятор резистора светодиода). Если после загрузки нашей программы все в порядке, этот светодиод должен мигать в соответствии с программой .Вся схема построена на Perfboard путем пайки всех компонентов на нем, как вы можете видеть на рисунке вверху.

Запись кода с использованием MPLAB IPE:

Чтобы записать код, выполните следующие действия:

  1. Запустите MPLAB IPE.
  2. Подключите один конец PicKit 3 к компьютеру, а другой — к контактам ICSP на плате управления.
  3. Подключитесь к вашему устройству PIC, нажав кнопку подключения.
  4. Найдите файл Blink HEX и нажмите «Программа».

Если все идет по плану, вы должны получить сообщение об успехе на экране. Проверьте код и видео ниже для полной демонстрации и используйте раздел комментариев, если у вас есть какие-либо сомнения.

Спасибо !!!

Давайте встретимся в следующем уроке, где мы поиграем с большим количеством светодиодов и переключателем.

,
Понимание таймеров в микроконтроллере PIC со светодиодной последовательностью мигания

Это будет пятый урок в нашей серии PIC Tutorial , который поможет вам изучить и использовать таймеры в PIC16F877A . В наших предыдущих уроках мы начали с введения в PIC и MPLABX IDE, затем мы написали нашу первую программу PIC, чтобы мигать светодиод с помощью PIC, а затем создали последовательность мигания светодиода с помощью функции задержки в микроконтроллере PIC. Теперь давайте используем ту же последовательность мигания светодиодов, которую мы использовали в предыдущем учебном оборудовании, и вместе с этим мы узнаем, как использовать таймеры в нашей PIC MCU .Мы только что добавили еще одну кнопку в светодиодную панель для этого урока. Пройдите учебник, чтобы узнать больше.

Таймеры являются одной из важных рабочих лошадок для встроенного программиста. Каждое приложение, которое мы проектируем, будет каким-то образом включать приложение синхронизации, например, включать или выключать что-либо после определенного интервала времени. Хорошо, но зачем нам таймеры, когда у нас уже есть макросы задержки (__delay_ms ()), которые делают то же самое !!

Почему таймер, когда у нас есть задержка ()?

Макрос задержки называется задержкой «сброса».Поскольку во время выполнения функции задержки MCU выполняет дамп, просто создав задержку . Во время этого процесса MCU не может прослушивать свои значения АЦП или читать что-либо из своих регистров. Следовательно, не рекомендуется использовать функции задержки, за исключением приложений, таких как мигание светодиода, где задержка не должна быть точной или длительной.

Макросы задержки также имеют после коротких поступлений ,

  1. Значение задержки должно быть постоянным для макроса задержки; его нельзя изменить во время выполнения программы.Следовательно это остается определенным программистом.
  2. Задержка не будет точной по сравнению с использованием таймеров.
  3. Большие значения задержек не могут быть созданы с помощью макросов, например, задержка на полчаса не может быть создана с помощью макросов задержки. Максимальная задержка, которую можно использовать, основана на использовании кварцевого генератора.

PIC микроконтроллер Таймеры:

Физически, таймер — это регистр, значение которого постоянно увеличивается до 255, а затем он начинается заново: 0, 1, 2, 3, 4…255 …. 0, 1, 2, 3 …… и т. Д.

PIC MCU PIC16F877A имеет три модуля таймера . Они называются Timer0, Timer1 и Timer2. Таймер 0 и Таймер 2 — это 8-битные таймеры, а Таймер 1 — это 16-битный таймер. В этом уроке мы будем использовать таймер 0 для нашего приложения. Как только мы поймем Таймер 0, будет легко работать с Таймером 1 и Таймером 2.

Таймер / счетчик модуля Timer0 имеет следующие особенности:

  • 8-битный таймер / счетчик
  • для чтения и записи
  • 8-битный программируемый прескалер
  • Выбор внутренних или внешних часов
  • Прерывание при переполнении с FFh на 00h
  • Edge select для внешних часов

Чтобы начать использовать таймер, мы должны понимать некоторые из таких причудливых терминов, как 8-битный / 16-битный таймер, прескалер, прерывания от таймера и фокусы. Теперь давайте посмотрим, что на самом деле означает каждый из них. Как было сказано ранее, в нашем микроконтроллере PIC имеются как 8-битные, так и 16-битные таймеры, основное отличие между ними состоит в том, что 16-битный таймер имеет гораздо лучшее разрешение, чем 8-битный таймер.

Prescaler — это название части микроконтроллера, который делит тактовые импульсы генератора, прежде чем он достигнет логики, которая увеличивает состояние таймера. Диапазон ID прескалера составляет от 1 до 256, и значение Prescaler можно установить с помощью регистра OPTION (того же, который мы использовали для подтягивающих резисторов).Например, если значение prescaler равно 64, то для каждого 64 -го импульса таймер будет увеличиваться на 1.

Когда таймер увеличивается и достигает максимального значения 255, он запускает прерывание и снова инициализируется 0. Это прерывание называется прерыванием по таймеру. Это прерывание информирует MCU о том, что это конкретное время истекло.

Fosc означает Частота Генератора , это частота используемого Кристалла.Время, необходимое для регистра таймера, зависит от значения Prescaler и значения Fosc.

Программирование и рабочее объяснение:

В этом уроке мы установим две кнопки как два входа и 8 светодиодов как 8 выходов. Первая кнопка будет использоваться для установки временной задержки (500 мс для каждого нажатия), а вторая кнопка будет использоваться для запуска мигания последовательности таймера. Например, если первая кнопка нажата трижды (500 * 3 = 1500 мс), задержка будет установлена ​​на 1.5 секунд и при нажатии кнопки два каждый светодиод включается и выключается с заданной выдержкой времени. Посмотрите демонстрационное видео в конце этого урока.

Timers-in-PIC-microcontroller-with-LED-blinking-sequence-1

Теперь, с учетом этих основ, давайте посмотрим на нашу программу, приведенную в конце раздела Код .

Это нормально, если вы не получили программу, но если вы получили !! Дайте себе cookie и сбросьте программу, чтобы насладиться результатами. Для других я разбью программу на значимые части и объясню вам, что происходит в каждом блоке.

Как всегда, первые несколько строк кода — это настройки конфигурации и файлы заголовков, я не буду объяснять это, поскольку я уже делал это в моих предыдущих уроках.

Далее, давайте пропустим все строки и сразу перейдем к основной функции void, внутри которой у нас есть конфигурация PORT для Timer0.

пустая функция()
{
/ ***** Конфигурация порта для таймера ****** /
    OPTION_REG = 0b00000101; // Timer0 с внешним freq и 64 в качестве прескалярного // также включает подтягивания
    TMR0 = 100; // Загрузить значение времени для 0.0019968s; delayValue может быть только между 0-256
    TMR0IE = 1; // Включить бит прерывания таймера в регистре PIE1
    ЭДД = 1; // Включить глобальное прерывание
    PEIE = 1; // Включаем периферийное прерывание
    / *********** ______ *********** / 

Чтобы понять это, мы должны взглянуть на OPTION Register в нашей таблице данных PIC.

option_reg_register_in_PIC_microcontroller

Как обсуждалось в предыдущем руководстве, бит 7 используется для включения резистора со слабым подтягиванием для PORTB.Посмотрите на рисунок выше, бит 3 устанавливается в 0 для указания MCU, что следующий прескалер, который устанавливается, должен использоваться для таймера, а не для WatchDogTimer (WDT). Режим таймера выбирается сбросом бита 5 T0CS

(OPTION_REG <5>)

Теперь, битов 2-0 используется для установки значения предварительного масштабирования для таймера. Как показано в таблице выше, чтобы установить значение предварительного масштабирования 64, биты должны быть установлены как 101.

Далее, давайте посмотрим на регистры, связанные с Timer0

Timer0_in_PIC_microcontroller

Таймер начнет увеличиваться после установки и переполнится после достижения значения 256, чтобы разрешить прерывание таймера во время этой точки, регистр TMR0IE должен быть установлен на высокий уровень.Поскольку сам Таймер 0 является периферийным устройством, мы должны разрешить Периферийное Прерывание, сделав PEIE = 1 . Наконец, мы должны включить глобальное прерывание, чтобы MCU получал уведомление о прерывании во время любой операции, для этого нужно сделать GIE = ​​1.

Задержка = ((256-REG_val) * (Prescal * 4)) / Fosc

Приведенная выше формула используется для расчета значения задержки.

Где

REG_val = 100;

Prescal = 64

Fosc = 20000000

это по расчету дает,

Задержка = 0.0019968s

Следующий набор строк должен установить порты ввода / вывода.

        / ***** Конфигурация порта для ввода / вывода ****** /
    TRISB0 = 1; // Сообщаем MCU, что вывод 0 PORTB используется как вход для кнопки 1.
    TRISB1 = 1; // Проинструктируем MCU, что вывод 1 PORTB используется в качестве входа для кнопки 1.
    TRISD = 0x00; // Сообщаем MCU, что все выводы на порте D выводятся
    PORTD = 0x00; // Инициализируем все контакты на 0
    / *********** ______ *********** / 

Это то же самое, что и в нашем предыдущем уроке, так как мы используем то же оборудование.За исключением того, что мы добавили еще одну кнопку в качестве ввода. Это делается по линии TRISB1 = 1.

Далее, внутри бесконечного цикла и цикла у нас есть два блока кода. Один используется для получения ввода таймера от пользователя, а другой — для выполнения последовательности задержки на светодиодах. Я объяснил их, используя комментарии к каждой строке.

        в то время как (1)
        {
        count = 0; // Не запускаем таймер в основном цикле
        // ******* Получить номер задержки от пользователя **** //////
        if (RB0 == 0 && flag == 0) // Когда задан ввод
        {
            get_scnds + = 1; // get_scnds = get_scnds + 1 // Инкрементная переменная
            флаг = 1;
        }
        if (RB0 == 1) // Для предотвращения непрерывного увеличения
            флаг = 0;
        / *********** ______ *********** / 

Переменная с именем get_scnds увеличивается каждый раз, когда пользователь нажимает кнопку 1.Переменная флаг (определяется программным обеспечением) используется для удержания процесса приращения, пока пользователь не уберет палец с кнопки.

                // ******* Выполнить последовательность с задержкой **** //////
        while (RB1 == 0)
        {
                PORTD = 0b00000001 << i; // Левый дерьмовый светодиод
                if (hscnd == get_scnds) // Если достигнуто требуемое время
                {
                    I + = 1; // Перейти к следующему индикатору после определенной задержки
                    hscnd = 0;
                }
                флаг = 2;
        }
        if (flag == 2 && RB1 == 1) // Сброс таймера, если кнопка снова находится в высоком положении
        {
            get_scnds = 0; hscnd = 0; = 0;
            PORTD = 0; // выключаем все светодиоды
        }
        / *********** ______ *********** / 

Следующий блок вступает в действие, если нажата кнопка 2.Поскольку пользователь уже определил требуемую задержку с помощью кнопки 1, она была сохранена в переменной get_scnds. Мы используем переменную с именем hscnd , эта переменная контролируется ISR (подпрограммой обработки прерываний).

Процедура обслуживания прерывания - это прерывание, которое будет вызываться каждый раз, когда Timer0 переполняется. Давайте посмотрим, как он контролируется ISR в следующем блоке, как мы хотим увеличить задержку на полсекунды (0.5s) при каждом нажатии кнопки нам нужно увеличивать переменную hscnd на каждые полсекунды. Так как мы запрограммировали наш таймер на переполнение для каждых 0,0019968 с (~ 2 мс), то для подсчета полсекунды переменная отсчета должна быть 250, потому что 250 * 2 мс = 0,5 секунды. Таким образом, когда значение count равно 250 (250 * 2 мс = 0,5 секунды), это означает, что прошло полсекунды, поэтому мы увеличиваем hscnd на 1 и инициализируем счет в ноль.

void interrupt timer_isr ()
{
    if (TMR0IF == 1) // Флаг таймера сработал из-за переполнения таймера
    {
        TMR0 = 100; // Загрузить значение таймера
        TMR0IF = 0; // Очистить флаг прерывания по таймеру
        подсчитывать ++;
    }
    
    если (считать == 250)
    {
        hscnd + = 1; // hscnd будет увеличиваться на каждые полсекунды
        кол = 0;
    }
} 

Итак, мы используем это значение и сравниваем его с нашим hscnd и смещаем наш светодиод в зависимости от времени, определенного пользователем.Это также очень похоже на последний урок.

Вот так мы и поняли нашу программу.

Схема и симуляция протея:

Timers-in-PIC-microcontroller-with-LED-blinking-sequence-Circuit

Как обычно, позволяет сначала проверить вывод с помощью Proteus , я привел здесь файлы схемы Proteus.

Добавьте кнопку на нашу предыдущую светодиодную плату, и наше оборудование готово к работе. Это должно выглядеть примерно так:

PIC-perf-board-for-LED-blinking-squence-with-timers LED-perf-board-for-understanding-timers-in-PIC-microcontroller

Timers-in-PIC-microcontroller-with-LED-blinking-sequence-2

После того как соединение установлено, загрузите код и проверьте вывод.Если у вас есть какие-либо проблемы, пожалуйста, используйте раздел комментариев. Также проверьте Видео ниже, чтобы понять весь процесс.

,
Best 3 MPPT Цепи контроллера солнечной зарядки для эффективной зарядки аккумулятора

MPPT, как мы все знаем, относится к отслеживанию точки максимальной мощности, которая обычно связана с солнечными батареями для оптимизации их выходов с максимальной эффективностью. В этом посте мы изучим 3 лучших схемы контроллера MPPT для эффективного использования солнечной энергии и зарядки аккумулятора наиболее эффективным способом.

, где используется MPPT

Оптимизированный выходной сигнал от цепей MPPT в основном используется для зарядки батарей с максимальной эффективностью от имеющегося солнечного света.

Новые любители обычно находят эту концепцию трудной и путаются со многими параметрами, связанными с MPPT, такими как точка максимальной мощности, «колено» графика I / V и т. Д.

На самом деле нет ничего более сложного в этой концепции, потому что солнечная панель - это не что иное, как форма питания.

Оптимизация этого источника питания становится необходимой, потому что обычно солнечные панели не имеют тока, но имеют избыточное напряжение, эти ненормальные характеристики солнечной панели имеют тенденцию становиться несовместимыми со стандартными нагрузками, такими как батареи 6 В, 12 В, которые несут более высокое номинальное напряжение и более низкое номинальное напряжение по сравнению с к характеристикам панели, и, кроме того, постоянно меняющееся солнце делает устройство крайне несовместимым с его параметрами V и I.

И именно поэтому нам требуется промежуточное устройство, такое как MPPT, которое может «понимать» эти изменения и генерировать наиболее желательный выход из подключенной солнечной панели.

Вы, возможно, уже изучили эту простую схему MPPT на базе IC 555, которая была специально разработана и разработана мной и является отличным примером работающей схемы MPPT.

Почему MPPT

Основная идея всех MPPT состоит в том, чтобы сбрасывать или урезать избыточное напряжение с панели в соответствии со спецификациями нагрузки, убедившись, что вычтенная величина напряжения преобразуется в эквивалентную величину тока, таким образом балансируя I Величина x V на входе и выходе всегда до отметки.... мы не можем ожидать чего-то большего от этого полезного устройства, не так ли?

Вышеупомянутое автоматическое отслеживание и надлежащее преобразование параметров реализовано с использованием ступени ШИМ-трекера и ступени понижающего преобразователя или иногда ступени понижающего повышающего преобразователя, хотя одиночный понижающий преобразователь дает лучшие результаты и проще в реализации.

Конструкция № 1: MPPT с использованием PIC16F88 с 3-уровневой зарядкой

В этом посте мы изучаем схему MPPT, которая очень похожа на конструкцию IC 555, единственное отличие состоит в использовании микроконтроллера PIC16F88 и улучшенного 3-уровневого Зарядная цепь.

Пошаговая рабочая информация

Основную функцию различных ступеней можно понять с помощью следующего описания:

1) Вывод на панель отслеживается путем извлечения из нее пары информации через соответствующие потенциальные сети делителей.

2) Один операционный усилитель от IC2 сконфигурирован как повторитель напряжения, и он отслеживает мгновенное выходное напряжение от панели через делитель потенциала на своем выводе 3 и передает информацию на соответствующий чувствительный вывод PIC.

3) Второй операционный усилитель от IC2 отвечает за отслеживание и мониторинг переменного тока от панели и подает его на другой чувствительный вход PIC.

4) Эти два входа обрабатываются микроконтроллером для разработки соответственно настроенного ШИМ для каскада понижающего преобразователя, связанного с его выводом № 9.

5) ШИМ, выходящий из PIC, буферизируется Q2, Q3 для безопасного запуска P-mosfet. Соответствующий диод защищает затвор Mosfet от перенапряжений.

6) Мосфет переключается в соответствии с переключающими ШИМ и модулирует каскад понижающего преобразователя, образованный индуктором L1 и D2.

7) Вышеуказанные процедуры дают наиболее подходящий выходной сигнал от понижающего преобразователя, который имеет более низкое напряжение по сравнению с аккумулятором, но имеет большой ток.

8) Выходная мощность в баке постоянно настраивается и соответствующим образом корректируется IC со ссылкой на отправленную информацию от двух операционных усилителей, связанных с солнечной панелью.

9) В дополнение к вышеприведенному регулированию MPPT, PIC также запрограммирован на мониторинг зарядки батареи через 3 дискретных уровня, которые обычно указываются как режим объемного заполнения, режим поглощения и режим с плавающей запятой.

10) Микроконтроллер «следит» за ростом напряжения аккумулятора и корректирует ток торможения соответственно, поддерживая правильные уровни ампер во время 3-х уровней зарядки. Это делается в сочетании с управлением MPPT, это все равно, что обрабатывать две ситуации за раз, чтобы обеспечить наиболее благоприятные результаты для батареи.

11) На саму ПИК подается прецизионное регулируемое напряжение на ее выводе Vdd через микросхему TL499, здесь можно заменить любой другой подходящий стабилизатор напряжения для рендеринга.

12) В конструкции также можно увидеть термистор, который может быть необязательным, но может быть эффективно настроен для контроля температуры батареи и подачи информации в PIC, которая без особых усилий обрабатывает эту третью информацию для настройки выходного напряжения, гарантируя, что температура батареи никогда не поднимается выше небезопасных уровней.

13) Светодиодные индикаторы, связанные с PIC, указывают различные состояния зарядки аккумулятора, что позволяет пользователю получать актуальную информацию о состоянии зарядки аккумулятора в течение дня.

14) Предложенная схема MPPT, использующая PIC16F88 с 3-уровневой зарядкой, поддерживает зарядку аккумуляторной батареи 12 В, а также зарядку аккумуляторной батареи 24 В без каких-либо изменений в цепи, за исключением значений, указанных в скобках и настройки VR3, которую необходимо отрегулировать, чтобы разрешить вывод 14,4 В для батареи 12 В и 29 В для батареи 24 В.

Программный код можно загрузить здесь

Конструкция № 2: Контроллер батареи MPPT в режиме синхронного переключения

Вторая конструкция основана на устройстве bq24650, которое включает в себя усовершенствованный встроенный контроллер заряда батареи в режиме синхронного переключения MPPT.Он предлагает высокий уровень регулирования входного напряжения, который предотвращает зарядный ток для батареи каждый раз, когда входное напряжение падает ниже определенной величины. Узнать больше:

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

Принцип действия микросхемы BQ24650

bq24650 обещает обеспечить синхронный контроллер PWIVI с постоянной частотой с оптимальным уровнем точности со стабилизацией тока и напряжения, предварительной зарядкой, отключением заряда и проверкой уровня зарядки.

Микросхема заряжает батарею на 3 отдельных уровнях: предварительное кондиционирование, постоянный ток и постоянное напряжение.

Зарядка отключается, как только уровень усилителя приближается к 1/10 скорости быстрой зарядки. Таймер предварительной зарядки установлен на 30 минут.

bq2465O без ручного вмешательства перезапускает процедуру зарядки в том случае, если напряжение аккумулятора возвращается ниже установленного внутреннего предела или достигает минимального режима ожидания в режиме покоя, когда входное напряжение падает ниже напряжения аккумулятора.2 тонких варианта QFN.

Принципиальная схема

Лист данных bq24650

РЕГУЛИРОВАНИЕ НАПРЯЖЕНИЯ АККУМУЛЯТОРНОЙ БАТАРЕИ

В bq24650 используется чрезвычайно точный регулятор напряжения для определения напряжения зарядки. Зарядное напряжение устанавливается с помощью резисторного делителя между аккумулятором и землей, а средняя точка подключается к контакту VFB.

Напряжение на ДПД штифт зажимается до 2,1 V ссылки. Это эталонное значение используется в следующей формуле для определения желаемого уровня регулируемого напряжения:

В (бат) = 2.1 В x [1 + R2 / R1]

, где R2 подключен от VFB к батарее, а R1 подключен от VFB к GND. Li-Ion, LiFePO4, а также свинцово-кислотные аккумуляторы SMF идеально подходят для аккумуляторных батарей.

Большинство стандартных литий-ионных элементов теперь могут эффективно заряжаться до 4,2 В / элемент. Батарея LiFePO4 поддерживает процесс существенно более высоких циклов зарядки и разрядки, но недостатком является то, что плотность энергии не слишком хорошая. Распознанное напряжение ячейки 3.6В.

Профиль заряда двух ячеек Li-Ion и LiFePO4 - предварительное кондиционирование, постоянный ток и постоянное напряжение. Для эффективного срока службы заряда / разряда предел напряжения на конце заряда может быть сокращен до 4,1 В / элемент, однако его плотность энергии может стать намного ниже по сравнению с химической спецификацией на основе Li, свинцовая кислота продолжает быть очень предпочтительным аккумулятором из-за его снижения производственных затрат, а также быстрых циклов разрядки.

Порог общего напряжения от 2.3 В до 2,45 В. После того, как батарея полностью заряжена, поплавковый или струйный заряд становится обязательным, чтобы компенсировать саморазряд. Пороговое значение подзарядки составляет 100–200 мВ ниже точки постоянного напряжения.

РЕГУЛИРОВАНИЕ ВХОДНОГО НАПРЯЖЕНИЯ

Солнечные панели могут иметь эксклюзивный уровень на кривой VI или VP, широко известный как Максимальная точка питания (MPP), где полная фотоэлектрическая (PV) система полагается с оптимальной эффективностью и генерирует требуемый максимум выходная мощность.

Алгоритм постоянного напряжения является наиболее простым вариантом отслеживания максимальной мощности (MPPT). Bq2465O автоматически отключает зарядный усилитель, так что точка максимальной мощности включена для достижения максимальной эффективности.

Состояние включения

Микросхема bq2465O включает в себя компаратор «SLEEP» для определения среднего напряжения питания на выводе VCC, поскольку VCC может быть отключен как от батареи, так и от внешнего адаптера переменного / постоянного тока.

Если напряжение VCC является более значительным, чем напряжение SRN, и для процедур зарядки выполняются дополнительные критерии, bq2465O впоследствии начинает предпринимать попытку зарядки подключенной батареи (см. Раздел «Включение и отключение зарядки»).

Если напряжение SRN выше относительно VCC, символизируя, что батарея является источником, из которого получают энергию, bq2465O включен для режима SLEEP с низким током покоя (<15uA), чтобы предотвратить утечку тока из батареи ,

Если VCC ниже предела UVLO, IC отключается, после чего VREF LDO отключается.

ВКЛЮЧИТЬ И ОТКЛЮЧИТЬ ЗАРЯДКУ

Перед инициализацией процесса зарядки предлагаемой схемы контроллера заряда аккумулятора с синхронным переключением в режиме MPPT необходимо выполнить следующие соответствующие аспекты:

• Процесс зарядки включен (MPPSET> 175 мВ)

• Устройство не работает в режиме блокировки по низкому напряжению (UVLO), а VCC превышает предел VCCLOWV

• Микросхема не работает в режиме SLEEP (i.е. VCC> SRN)

• Напряжение VCC ниже предела переменного напряжения (VCC

• Промежуток времени 30 мсек выполняется после первого включения питания

• напряжения REGN LDO и VREF LDO фиксируются на заданном уровне соединения

• Термическое отключение (TSHUT) не инициализировано - неисправность TS не идентифицирована. Любая из следующих технических проблем может помешать продолжающейся зарядке батареи:

• Зарядка деактивирована (MPPSET <75 мВ)

• Адаптер вход отключен, провоцируя интегральную микросхему работать в режиме VCCLOWV или SLEEP

• Входное напряжение адаптера ниже 100 мВ над отметкой батареи

• Номинальное напряжение адаптера

• Напряжение REGN или VREF LDO не соответствует технические характеристики

• Определен предел теплоты микросхемы TSHUT • Напряжение TS выходит за пределы указанного диапазона, что может указывать на то, что температура аккумулятора очень высокая или, наоборот, намного ниже

Self-Triggered I n-встроенный ток зарядки зарядного устройства

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

Функция плавного пуска отличается тем, что усиливает усилитель стабилизации помех на восемь равномерно выполняемых рабочих этапов рядом с предварительно установленным уровнем зарядного тока. Все назначенные шаги продолжаются около 1,6 мс, в течение указанного периода времени 13 мс. Ни одна внешняя часть не предназначена для включения обсуждаемой операционной функции.

ЭКСПЛУАТАЦИЯ ПРЕОБРАЗОВАТЕЛЯ

Шинный преобразователь с синхронным понижением частоты использует предварительно определенный режим напряжения частоты со стратегией прямого управления.

Компенсационная конфигурация версии III позволяет системе включать керамические конденсаторы на выходной ступени преобразователя. Входной каскад компенсации внутренне связан между выходом обратной связи (FBO) и входом усилителя ошибки (EAI).

Ступень компенсации обратной связи установлена ​​между входом усилителя ошибки (EAI) и выходом усилителя ошибки (EAO). Ступень выходного фильтра LC должна быть определена для включения резонансной частоты около 12 кГц - 17 кГц для устройства, для которого резонансная частота fo сформулирована как:

fo = 1/2 π √LoCo

Встроенная пилообразная рампа позволяет сравнивать внутренний EAO

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *