Устройство на pic микроконтроллерах – Устройства на микроконтроллерах — Страница 2 — Меандр — занимательная электроника

Осваиваем простейший микроконтроллер PIC. Часть 1 / Habr

Выбор микроконтроллера обычно осуществляется под необходимые задачи. Для изучения хорошо подойдет популярный МК с минимальным набором периферии: 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в к питанию.


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

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

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

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

Бортовой компьютер для автомобиля (PIC18F258, C) 20.03.2013
Чесались руки сделать что-то для свежекупленного автомобиля, остановился на полезной вещи — бортовой компьютер. Автомобиль Nissan Almera N15…
Просмотров: 9466

Обман одометра (PIC12F629) 08.08.2008
Устройство собрано на МК PIC12F629 и предназначено для управления сигналом идущим от одометра. Сигнал можно отключать, включать тестовый…
Просмотров: 11001

Автомобильный охранный сигнализатор на микроконтроллере (PIC16F84A, asm) 08.08.2008
Это устройство отличается от подобных отсутствием времязадающих RC- цепей. Поскольку его основой служит микроконтроллер, оно…
Просмотров: 4010

Автомобильный цифровой спидометр (PIC16F84A, asm) 08.08.2008
Автомобильный цифровой спидометр предназначен для установки в автомобили со штатными аналоговыми спидометрами, управляемые…
Просмотров: 7378

COM to MIDI или преобразование скорости USART (PIC16F828A, asm) 08.03.2009
К сожалению, практически все переносные компьютеры не оборудованы приёмопередатчиком MPU-401. В связи с этим, подключать их обычным…
Просмотров: 3112

USB Bootloader (загрузчик) для микроконтроллеров PIC18 (asm, C++) 03.11.2010
USB PIC Bootloader — это USB загрузчик для серии микроконтроллеров PIC18 фирмы Microchip. Он позволяет загрузить программное обеспечение в…
Просмотров: 4146

Универсальный таймер на PIC контроллере (PIC16F84A, C) 09.08.2008
Универсальность описываемого в статье устройства в том, что оно способно не только включить и выключить в заданное время четыре…
Просмотров: 5080

АЦП с интерфейсом RS232 (PIC12F675, asm) 09.08.2008
Воспользовавшись восьмивыводным микроконтроллером PIC12F675 со встроенным АЦП, автор разработал простую приставку к компьютеру и…
Просмотров: 5051

Частотомер — цифровая шкала на LED (PIC16F84/PIC16CE625, asm) 26.02.2011
Описание опубликовано в журнале «Радио» № 1 за 2002 г., стр. 60…62, Частотомер — цифровая шкала на PIC16CE625, позднее было опубликовано…
Просмотров: 5753

Частотомер — цифровая шкала с LCD (PIC16F84/PIC16F628, asm) 26.02.2011
Описание опубликовано в журнале «Радио» № 7 за 2004 г., стр. 64, 65 Частотомер — цифровая шкала с ЖК индикатором и «Радиолюбитель»…
Просмотров: 5978

Пробник «Мечта электрика» (PIC12F675, C) 30.10.2010
Возможности : — измерение сопротивления 0 — 300 Ом. — звуковой сигнал при сопротивлении менее 20 Ом. — тест переходов полупроводников. -…
Просмотров: 6899

Частотомер и прибор для проверки конденсаторов, импульсных трансформаторов (PIC16F876A) 28.08.2010
В последнее время, с появлением электролитических конденсаторов предназначенных для работы на высоких частотах, стал популярен способ…
Просмотров: 11908

Кабельный пробник на микроконтроллере (PIC16F84A, asm) 28.08.2010
Устройство состоит из двух частей: передающей и приемной. Жилы кабеля с одной стороны подключают к контактам Х1—Х8 передатчика, с другой…
Просмотров: 3184

Сопряжение с компьютером цифрового мультиметра серии 830 (PIC12F629, asm, C++) 09.08.2008
Подключение малогабаритного мультиметра к персональному компьютеру позволяет проводить статистическую обработку результатов серии…
Просмотров: 4251

АЦП с интерфейсом RS232 (PIC12F675, asm) 09.08.2008
Воспользовавшись восьмивыводным микроконтроллером PIC12F675 со встроенным АЦП, автор разработал простую приставку к компьютеру и…
Просмотров: 5051

Микроконтроллерный определитель выводов транзисторов (PIC16F84A, asm) 09.08.2008
Принцип действия определителя транзисторов основан на том, что на любом из выводов микроконтроллера, настроенном как выходной, может…
Просмотров: 4281

Микроконтроллерный искатель проводки (PIC12F629, C) 09.08.2008
Работа устройств, способных обнаружить электрические провода в стене, основана на улавливании создаваемого ими электромагнитного…
Просмотров: 6807

Генератор на PIC16F84A и AD9850 (PIC16F84A, C) 09.08.2008
Описываемый в статье генератор содержит микроконтроллер, но использован он только для управления специализированной микросхемой —…
Просмотров: 7252

Паяльная станция на PIC-контроллере (PIC16F84A, asm) 09.08.2008
Профессиональные паяльные станции импортного производства обладают большим набором сервисных функций, но очень дороги и недоступны…
Просмотров: 6322

Прибор для контроля многожильных кабелей на НТ9200В (PIC16F84A) 09.08.2008
В современной технике связи, компьютерных сетях и дистанционных контрольно- измерительных приборах, системах телеуправления…
Просмотров: 5405

Приставка на PIC для проверки телефонных аппаратов (PIC16F84A, PIC16F628, asm) 09.08.2008
Мне иногда приходится заниматься ремонтом телефонных аппаратов. И я здорово надоел жене с просьбой перезвонить домой, чтобы проверить…
Просмотров: 2565

Микрофарадометр на PIC микроконтроллере (PIC16F876A, C) 09.08.2008
В радиолюбительской практике необходимость измерения больших значений электрической емкости очевидна. Многие современные…
Просмотров: 4091

Частотомер на PIC микроконтроллере (PIC16F84A, asm) 09.08.2008
Простой 4-разрядный частотомер на микроконтроллере Рис. 1. Схема частотомера на микроконтроллере PIC16F84 Рис. 2. Фото частотомера на…
Просмотров: 11305

Электронный резьборез с микроконтроллерным управлением (PIC16F84A, C) 09.08.2008
Принцип действия резьбонарезного устройства основан на быстром изменении направления вращения режущего инструмента в пределах…
Просмотров: 4453

Частотомер на PIC контроллере с LCD дисплеем (PIC18F252, C) 09.08.2008
Частотомер собран на достаточно распространённых микроконтроллерах фирмы MICROCHIP PIC18F252 с применением 2х16 (он был под рукой), хотя можно…
Просмотров: 6045

Электронный цифровой частотомер на PIC микроконтроллере (PIC16F873) 09.08.2008
Цифровой частотомер на PIC микроконтроллере, позволяет измерять частоту в диапазоне от 10Гц до 40 МГц, с точностью до 0.01кГц. Цифровой…
Просмотров: 3947

Стенд для тестирования ATX блоков питания, методом снятия кросс-нагрузочных характеристик (PIC16F84A, asm) 19.04.2008
Цель проекта — разработка аппаратной части и программного обеспечения стенда для автоматического тестирования АТХ блоков питания…
Просмотров: 6327

Частотомер, прибор для проверки конденсаторов, импульсных трансформаторов V3 (PIC16F876A) 19.12.2007
Это дальнейшее развитие Прибор для проверки конденсаторов, импульсных трансформаторов и измерения частоты. Основные отличия : -…
Просмотров: 5761

Применение семи сегментных LED модулей HT1611, HT1613, МТ10Т7-7 (asm) 24.12.2010
Практически любое микроконтроллерное устройство имеет те или иные устройства индикации. В простейшем случае это всего несколько…
Просмотров: 5211

Контроллер графического LCD WG32240 (PIC18F2520, C) 09.08.2008
В настоящее время промышленностью выпускается большое количество графических ЖКИ. Существуют как модели со встроенным контроллером,…
Просмотров: 3699

ИК пульт ДУ для Canon, Nikon, Minolta, Pentax, Olympus (PIC12F629, asm) 02.12.2010
Некоторые фотокамеры фирм Canon, Nikon, Minolta, Pentax, Olympus имеют функцию дистанционной съёмки с помощью инфракрасного пульта дистанционного…
Просмотров: 3662

Часы с коррекцией времени от GPS (PIC16F876, asm) 16.05.2008
Конструкции и принципиальные схемы электронных часов в настоящее время достаточно хорошо разработаны. Но точность индикации времени…
Просмотров: 4699

Калькулятор для спортивных соревнований с гандикапом (PIC16F88, asm) 21.04.2008
Разработанный авторами калькулятор предназначен для быстрого пересчета времени, затраченного участниками соревнований на…
Просмотров: 2368

Универсальная телефонная приставка (PIC16F84A) 01.03.2008
Сегодня практически во всех крупных городах телефонные номера переводятся на повременную оплату. Недалеко то время, когда поминутная…
Просмотров: 3911

Таймер на PIC16F628 (PIC16F628, asm) 01.03.2008
Проэкт представляет собой часы с таймером, который может быть запрограммирован на включение и на выключение. Я начал его делать так как…
Просмотров: 3861

Термостат для теплого пола (PIC16F84A, asm) 22.01.2008
Сегодня во многих квартирах имеются полы с электроподогревом. Они удобны и достаточно долговечны, но вот их терморегуляторы имеют ряд…
Просмотров: 4605

Дистанционный регулятор освещения (PIC16F629, C) 22.01.2008
Предлагаемый прибор — один из вариантов регулятора яркости ламп накаливания с расширенными за счет применения микроконтроллера…
Просмотров: 5151

Усовершенствованная «поющая ёлка» на PIC (PIC16F628, asm) 20.01.2008
Особенностью данной программы является возможность плавного изменения яркости светодиодов. Прототипом послужила «поющая…
Просмотров: 3810

Простые часы-будильник на PIC16F84 (PIC16F84, asm) 17.01.2008
Не так давно электронные часы строили на так называемых часовых микросхемах серии К176 и специализированных микросхемах серий К145…
Просмотров: 4987

Экономичный цифровой термометр (PIC16F628, asm) 16.01.2008
В последнее время конструирование цифровых термометров очень популярно. Применение микроконтроллеров (МК) и современных датчиков…
Просмотров: 4332

Часы-будильник с ЖК-индикатором (PIC16F84A) 15.01.2008
Особенности устройства: Два будильника. Сохранение времени установки будильников при выключении питания. Возможность отключения…
Просмотров: 3479

Таймер на PIC16F84 (PIC16F84A, asm) 07.01.2008
Таймер — одна из наиболее популярных радиолюбительских конструкций Вниманию читателей предлагается еще один вариант В отличие от…
Просмотров: 4441

Точные часы-будильник на микроконтроллере (PIC16F628A, asm) 04.01.2008
При создании этой конструкции основной упор был сделан на точности хода часов и удобстве управления.   — Реализовано 2 режима…
Просмотров: 4565

Часы с таймером на микроконтроллере (PIC16F628A, asm) 04.01.2008
Проэкт представляет собой часы с таймером, который может быть запрограммирован на включение и на выключение. Я начал его делать так как…
Просмотров: 4068

Автомат вечернего освещения (PIC12C508, C) 04.01.2008
Устройство, схема которого показана на рис. 1, ежедневно в установленное время включает и выключает свет. Разработал его таиландец Wrchit…
Просмотров: 2992

PIC для младенца (PIC12F629, asm) 07.12.2007
Назначение: Разработанное устройство предназначено для звуковой сигнализации намокания пеленок малыша. Как и памперсы, оно не…
Просмотров: 2627

Кодовый замок на PIC микроконтроллере (PIC16F84, asm) 09.08.2008
Устройство кодового замка для разнообразных применений. В частности, я использую замок дома. Внешнее исполнение может быть любым, в…
Просмотров: 3383

Охранное устройство с управлением ключами-таблетками iBUTTON (PIC16F84, asm) 09.08.2008
Предлагаемое устройство может выполнять функции охранной сигнализации или просто включать освещение при движении человека в…
Просмотров: 2894

Кодовый замок на PIC16F84 (PIC16F84) 09.08.2008
Схема этого устройства (разработчик — Jon Rck из США) размещена по адресу http://www.vermontficks.org/pic.htm К младшим разрядам портов А и В…
Просмотров: 3659

Охранная система MICROALARM (PIC16F84) 09.08.2008
Данное устройство предназначено для охраны квартир, дач, гаражей и т.д. Основой охранной системы является PIC-контроллер 16F84A. Постановку…
Просмотров: 2283

Электронный замок с ключом-таблеткой I-BUTTON (PIC16F627A (628A, 648A), asm) 09.08.2008
Здесь представлена схема электронного замка, в котором в качестве ключа используется устройство DS1990A(Touch Memory). Touch Memory типа DS1990A…
Просмотров: 4539

Охранное устройство с оповещением по телефонной линии (PIC16F628) 09.08.2008
Устройство предназначено для охраны помещения ( магазин , квартира ) с применением датчика движения и датчика открывания двери (…
Просмотров: 2980

Электронный замок с управлением от таблеток iBUTTON (PIC16F628A, C) 09.08.2008
Ниже представлена схема замка с использованием электронных ключей Touch Memory типа DS1990A. Устройство собрано на базе микроконтроллера…
Просмотров: 4742

Охранное устройство с управлением от таблеток iBUTTON (PIC16F628A) 09.08.2008
Ниже представлена схема охранного устройства с использованием электронных ключей Touch Memory типа DS1990A. Устройство собрано на базе…
Просмотров: 3480

GSM сигнализация (PIC16F628A) 09.08.2008
Данная страничка посвящена разработке экономичной GSM сигнализации с использованием телефона Siemens 35/45 серий и 8-разрядного…
Просмотров: 6837

Автомобильный охранный сигнализатор на микроконтроллере (PIC16F84A, asm) 08.08.2008
Это устройство отличается от подобных отсутствием времязадающих RC- цепей. Поскольку его основой служит микроконтроллер, оно…
Просмотров: 4010

Инвертор для однофазного асинхронного электродвигателя (PIC16F73, asm) 29.08.2010
Инвертор предназначен для управления скоростью и направлением вращения выходного вала однофазных асинхронных электродвигателей типа…
Просмотров: 6353

Блок питания с микроконтроллерным управлением (PIC16F628A, asm) 24.05.2008
Состоит из блока индикации и управления, измерительной части и блока защиты от КЗ. Блок индикации и управления. Индикатор — ЖКИ…
Просмотров: 11143

Стенд для тестирования ATX блоков питания, методом снятия кросс-нагрузочных характеристик (PIC16F84A, asm) 19.04.2008
Цель проекта — разработка аппаратной части и программного обеспечения стенда для автоматического тестирования АТХ блоков питания…
Просмотров: 6327

Зарядное устройство на PIC микроконтроллере (PIC12F675) 24.01.2008
Данное зарядное устройство (ЗУ) автоматизирует процесс зарядки аккумуляторов. Если аккумулятор не разряжен до напряжения 1 В, оно…
Просмотров: 7337

Регулируемый биполярный блок питания на микроконтроллере 0…15 В (PIC16F84A) 08.12.2007
Предлагаю вашему вниманию биполярный блок питания для повседневных нужд радиолюбителей, который имеет регулировку выходного…
Просмотров: 5904

COM to MIDI или преобразование скорости USART (PIC16F828A, asm) 08.03.2009
К сожалению, практически все переносные компьютеры не оборудованы приёмопередатчиком MPU-401. В связи с этим, подключать их обычным…
Просмотров: 3112

GTP USB Lite PIC программатор (PIC18F2550) 19.02.2011
Данный программатор с оригинальным названием GTP USB Lite разработан для прошивки PIC микроконтроллеров и микросхем памяти. Основной…
Просмотров: 11573

Устройство ввода вывода (PIC16F628A) 02.12.2010
Это устройство ввода вывода, применять можно в любых целях, где нужны кнопки и индикация. Устройство позволяет выводить на индикаторы…
Просмотров: 3054

Электронная записаня книжкa (PIC12F84, С) 02.12.2010
Новая элементная база позволяет создавать компактные и экономичные устройства, способные с помощью персонального компьютера…
Просмотров: 3146

Микроконтроллерная система управления токарным станком 16Б25ПСп (PIC16F876, C) 02.12.2010
Штатная система управления станком 16Б25ПСп разработана в 70-е годы и была реализована на тиристорно — транзисторной элементной базе. В…
Просмотров: 4781

ИК пульт ДУ для Canon, Nikon, Minolta, Pentax, Olympus (PIC12F629, asm) 02.12.2010
Некоторые фотокамеры фирм Canon, Nikon, Minolta, Pentax, Olympus имеют функцию дистанционной съёмки с помощью инфракрасного пульта дистанционного…
Просмотров: 3662

Инвертор для однофазного асинхронного электродвигателя (PIC16F73, asm) 29.08.2010
Инвертор предназначен для управления скоростью и направлением вращения выходного вала однофазных асинхронных электродвигателей типа…
Просмотров: 6353

Светодиодное табло «Волшебная палочка» (AT89C2051/PIC18C84, asm) 06.11.2010
За этим замысловатым названием кроется очень интересная конструкция на PIC-контроллере. Главное достоинство — это оригинальность идеи. В…
Просмотров: 4449

Устройство управления яркостью 8 светодиодов (PIC16F628, asm) 11.10.2010
По заданной программе изменяется яркость светодиодов. Изменение яркости осуществляется широтно-импульсной модуляцией (ШИМ). Так как…
Просмотров: 2732

Световое табло с круговой механической разверткой (PIC16F84A) 21.08.2008
Предлагаемое табло с помощью небольшого числа светодиодов создает относительно сложные графические изображения, для которых при…
Просмотров: 4970

Термометр на TC77 (PIC16F628, C) 11.10.2010
Такой термометр подходит для большинства потребностей измерения температуры в быту. Но не смотря на то, что он очень прост и дешев,…
Просмотров: 3873

Термометр на PIC (PIC16F628A) 29.10.2008
Ниже представлена схема простого термометра на PIC’е. Индикатор (в моём случае BA56-12SRWA) используется с общим анодом. Датчик температуры…
Просмотров: 10021

Аппаратно-программный комплекс многоточечного мониторинга температуры (PIC16F84A, asm) 19.04.2008
Цель проекта — разработка системы многоточечного мониторинга температуры, причем наблюдение за температурой должно быть доступным…
Просмотров: 3428

Цифровой термометр с выводом показаний на компьютер (PIC16F84A, asm) 19.04.2008
В качестве датчика температуры используется микросхема цифрового термометра DS18S20, который опрашивается контроллером на основе PIC16F84A….
Просмотров: 5199

Термометр с функцией таймера или управления термостатом (PIC16F84A, asm) 22.01.2008
Описания различных электронных цифровых термометров неоднократно публиковались на страницах журнала «Радио». Как правило, они…
Просмотров: 4481

Термореле с цифровым датчиком температуры (PIC16F84A) 18.11.2007
Термодатчики повсеместно используются в различных областях электроники. Это термометры, пожарные датчики сигнализации, мониторинг…
Просмотров: 3751

Радиолюбительские конструкции на PIC-микроконтроллерах. Книги 1 — 4+ПО

Дата публикации: .

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

Радиолюбительские конструкции на PIC-микроконтроллерах Книга 1. Автор:Заец Н.И.Радиолюбительские конструкции на PIC-микроконтроллерах Книга 1. Автор:Заец Н.И.

Издательство: Солон-пресс
Год издания: 2004
Страниц: 368
ISBN: 5-98003-078-6
Язык: русский
Формат: DJVU
Размер: 3,5 Мб

В книге представлено 20 описаний радиолюбительских устройств различно, назначения: часы, таймеры, автоматы, программатор и многие другие, выполненные на микроконтроллере PIC16F84A. Впервые книга с различными устройствами на PIC-микроконтроллере предназначается для радиолюбителей с любым уровнем подготовленности. Даже те, кто не знаком с программированием микроконтроллеров, смогут без труда повторить любое устройство. Радиолюбители, имеющие опыт работы с программированием, могут изменить программы под свои цели. Для этого в книге даны алгоритмы работы и исходные тексты программ с подробными комментариями.

Автор также делится опытом программирования и работы с ассемблером MPLAB и программатором PonyProg2000.


Радиолюбительские конструкции на PIC-микроконтроллерах. Книга 2Радиолюбительские конструкции на PIC-микроконтроллерах. Книга 2

Автор:Заец Н.И.
Издательство: Слон-пресс
Год издания: 2005
Страниц: 192
Язык: русский
Формат: DJVU
Размер: 2,4 Мб

В книге даны новые примеры применения PIC-микроконтроллеров в радиолюбительской практике. Программисты найдут в книге программы с использованием встроенного в микроконтроллер модуля — АЦП и программы с различными внешними устройствами — термодатчиками типа DS 18×20, LCD-дисплеями. Радиолюбители, которые желают повторить устройства, могут выбрать цифровой милливольтметр, для того чтобы защитить свой дом от перепадов напряжения, а трехфазный двигатель — от перегрузки. Термометр-часы, градусник и два терморегулятора будут полезными в любом доме. Ко всем программам даны алгоритмы работы и подробные комментарии.

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


Радиолюбительские конструкции на PIC-микроконтроллерах. Книга 2Радиолюбительские конструкции на PIC-микроконтроллерах. Книга 3

Автор:Заец Н.И.
Издательство: Солон-Пресс
Год издания: 2006
Страниц: 240
ISBN: 5-98003-250-9, 5-98003-238-Х
Язык: русский
Формат: dgvu
Размер: 3,1 Мб

Третья книга расширяет диапазон применения PIC-микроконтроллеров в радиолюбительской практике. В ней дан пример программы с использованием встроенного в микроконтроллер модуля USART и различных внешних устройств — LCD-дисплеев и ЖКИ, выполненных по COG-технологии. Радиолюбители, которые желают повторить устройства, могут выбрать: охрану подворья, шахматные часы, таймеры на 7 и 9 выходов, а также автомат кормления аквариумных рыб. Для родной школы можно изготовить простое устройство подачи звонков по расписанию.
В отдельную главу вынесены «трудные темы» взаимодействия микроконтроллеров с внешними устройствами: ЖК-дисплеями и термодатчиками типа DS 18×20. Ко всем программам даны алгоритмы работы и подробные комментарии. К книге прилагается компакт-диск, содержащий 48 исходных текстов программ ко всем устройствам четырех книг автора, («Электронные самоделки. Для быта, отдыха и здоровья» и «Радиолюбительские конструкции на РIС-микроконтроллерах» в трех книгах), вышедших в издательстве СОЛОН-Пресс, справочные материалы по микроконтроллерам на русском и английском языках, установочные программы для программаторов и ассемблера MPASM.
Книга предназначена для широкого круга радиолюбителей, а также может быть полезна студентам, изучающим программирование микроконтроллеров.


Радиолюбительские конструкции на PIC-микроконтроллерах. Книга 4Радиолюбительские конструкции на PIC-микроконтроллерах. Книга 4

Автор:Заец Н.И.
Издательство: МК-Пресс
Год издания: 2008
Страниц: 336
ISBN: 978-966-8806-42-1
Язык: русский
Формат: DJVU
Размер: 5.2 Мб

Данная книга — практическое пособие по освоению микроконтроллеров PICmicro компании Microchip и другой современной элементной базы, наподобие индикаторов, выполненных по COG-технологии. Рассмотрены алгоритмы работы, схемы и программы для различных полезных устройств: многофункциональных часов, отображающих текущее время и температуру воздуха; автомобильных часов, фиксирующих время в пути и сообщающих о поломке реле-регулятора; автомата включения освещения; цифрового устройства для блока питания с установкой защиты по току и напряжению; специализированных термометров и др. Для начинающих дана глава о наладке устройств на микроконтроллерах. Книга предназначена для широкого круга радиолюбителей, а также может быть полезна студентам, изучающим программирование микроконтроллеров.


Электронные самоделки. Для быта, отдыха и здоровьяЭлектронные самоделки. Для быта, отдыха и здоровья

Автор:Заец Н.И.
Издательство: Солон-Пресс
Год издания: 2004
Страниц: 304
ISBN: 5-98003-156-1
Язык: русский
Формат: DJVU
Размер: 3,8 Мб

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

По материалам книги можно изготовить измеритель пульса, автомобильный цифровой тахометр, частотомер на одной микросхеме и другие устройства на РIС-микроконтроллерах. В описании устройств на микроконтроллерах даются подробные алгоритмы работы и исходные тексты программ.

Устройства предназначены для изготовления широким кругом радиолюбителей.


Скачать: Радиолюбительские конструкции на PIC-микроконтроллерах. Книги 1 — 4 + ПО + Электронные самоделки

Осваиваем простейший микроконтроллер PIC. Часть 2 / Habr

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

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

Что бы узнать, какие биты в каких регистрах нам потребуются для конкретного модуля — придется снова заглянуть в документацию.
Для примера, взглянем на таблицу регистров, имеющих отношение к цифровым входам\выходам порта B:

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

Регистр TRISB отвечает за направление данных через порт. Каждый из 8 битов регистра привязан к соответсвующей ножке МК.
Присвоив нужному биту единицу — мы сделаем из него вход, а присвоив ноль — выход.
Именно в этом регистре мы меняли биты через переменные pin_Bx_direction.

В регистре OPTION_REG к порту относится только старший бит:

RBPU: PORTB Pull-up Enable bit
1 = PORTB pull-ups are disabled
0 = PORTB pull-ups are enabled by individual port latch values

Этот бит отвечает за подключение внутренней подтяжки, о которой было упоминание в первой части.
По таблице видно, что изначально подтяжка выключена, а значит при отсутствии внешней подтяжки необходимо включить внутреннюю самостоятельно:
OPTION_REG_NRBPU = 0

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

Прерывания


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

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

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

В выбранном нами МК 16f628a имеется 10 возможных источников прерываний:

  • внешний источник прерываний INT
  • изменение уровня сигнала на цифровых входах RB4:7
  • переполнение таймера TMR0
  • переполнение таймера TMR1
  • совпадение TMR2 и PR2
  • завершение записи в EEPROM
  • изменение выходного уровня компаратора
  • получение\завершение отправки данных через USART
  • прерывания от модуля CCP

Прерывание по каждому источнику можно как разрешить, так и запретить индивидуально изменяя соответствуюющие биты в регистрах INTCON и PIE1.
Для разрешения прерываний, управляемых регистром PIE1 необоходимо разрешить прерывания от перифирии битом PEIE в регистре INTCON.
После выбора необходимых источников прерываний необходимо глобально разрешить прерывания битом GIE в регистре INTCON.

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

В качестве примера использования прерываний перепишем нашу программу по миганию светодиодом.
Воспользуемся источником прерываний INT. В зависимости от состояния бита INTEDG в регистре OPTION прерывание будет генерироваться либо по переднему фронту сигнала (переход с низкого уровня к высокому), либо по заднему.
Для изменения уровня сигнала на INT неободимо перенести кнопку на соответсвующую ногу (pin 6).

include 16f628a -- target PICmicro
--
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 -- защита кода отключена
--
enable_digital_io() -- переключение всех входов\выходов на цифровой режим
--
alias led is pin_B5 -- светодиод подключен к RB5
pin_B5_direction = output -- настраиваем RB5 как цифровой выход
--
alias button is pin_B0 -- кнопка подключена к RB0
pin_B0_direction = input -- настраиваем RB0 как вход
var volatile bit led_blink = false -- объявляем переменную
-- настраиваем прерывание
INTCON_INTE = on -- разрешаем прерывание по изменению сигнала на INT
INTCON_INTF = off -- сбрасываем флаг прерывания по INT
OPTION_REG_INTEDG = 0 -- генерировать прерывания при переходе 1->0
INTCON_GIE = on -- включаем обработку прерываний
-- обработчик прерывания INT
procedure INT_ISR is
pragma
interrupt
if INTCON_INTF then -- проверяем флаг нужного нам прерывания
INTCON_INTF = off -- сбрасываем флаг прерывания
led_blink = !led_blink -- перключаем флаг светодиода
end if
end procedure
led = off -- выключаем светодиод
forever loop
led = off -- выключаем светодиод
_usec_delay(100000) -- ждем 0,1 сек
if led_blink then -- моргаем только при активном флаге
led = on -- ждем 0,1 сек
_usec_delay(100000) -- ждем 0,1 сек
end if
end loop

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

Таймеры


Основная работа таймеров — считать. По завершению счета они могут генерировать прерывание. А так как счет идет аппаратно, не забивая процессорное время ожиданием, таймеры удачно подходят на замену нашим паузам.
Каждый из трех таймеров имеет свои особенности, потому для выполнение определенных задач нужно уметь выбрать более подходящий.
TMR0

  • 8-битный таймер (считает от 0 до 255)
  • тактируется либо от системной частоты, либо от внешнего источника
  • может считать как передние, так и задние фронты тактируемого сигнала
  • 8-битный предделитель (может считать каждый второй, каждый 4… каждый 256 сигнал)
  • прерывание генирируется при переполнении (при переходе от 255 к 0)
  • таймер работает постоянно

Что нам это дает?
При тактировании от системной частоты (в нашем случае — 4 MHz/4 = 1 Mhz) таймер будет генерировать прерывания с постоянной частотой.
Не сложно посчитать, что без предделителя прерывания будут иметь частоту 3906,25 Гц. Для светодиода — многовато.
Предделитель может на порядок (двойчный, т.е. в 2 раза) уменьшить частоту восемь раз.
При предделителе 1:256 мы получим частоту в 15.3 Гц. Мигание светодиодом с такой частотой вполне различимо человеческим глазом.
При тактировании МК от внешнего кварца можно добиться другого диапазона частот.

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

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

TMR1

Основные отличия таймера от TMR0:
  • данный таймер 16-битный
  • таймер может тактироваться не только от внешнего источника, но и от дополнительного часового кварца
  • максимально доступный предделитель — 1:8
  • таймер может считать только передние фронты сигнала
  • таймер может использоваться модулем CCP
  • таймер можно отключать

Использовать TMR1 можно так же, как и TMR0: или для генерирования определенной частоты, или для подсчета импульсов.
TMR2

Данный 8-битный таймер имеет несколько иной принцип работы.
Тактироваться он может только от системной частоты. Предделитель может быть выставлен только на значения 1:1, 1:4 или 1:16.
Полученные импульсы таймер считает от нуля и до предварительно заданного значения PR2.
После совпадения TMR2 и PR2 подается сигнал на 4-битный постделитель, и только после переполнения постделителя генерируется прерывание.
Благодаря такой схеме можно корректировать конечную частоту прерываний с минимальным шагом.

Помимо постделителя, сигнал при совпадении PR2 может идти на модуль CCP в качестве базы тайминга ШИМ.
Как и TMR1, данный таймер можно отключить.

Пример использования

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

Описание каждого бита можно найти в документации на микроконтроллер.

include 16f628a -- target PICmicro
--
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 -- защита кода отключена
--
enable_digital_io() -- переключение всех входов\выходов на цифровой режим
--
alias led is pin_B5 -- светодиод подключен к RB5
pin_B5_direction = output -- настраиваем RB5 как цифровой выход
--
-- настраиваем таймер
T1CON_T1CKPS = 0b_11 -- предделитель, 2 бита
T1CON_TMR1CS = 0 -- тактирование от системной частоты
PIE1_TMR1IE = on -- разрешаем прерывание от TMR1
PIR1_TMR1IF = off -- сбрасываем флаг прерывания от TMR1
INTCON_PEIE = on -- разрешаем прерывания от периферии
T1CON_TMR1ON = on -- включаем таймер
INTCON_GIE = on -- включаем обработку прерываний

--
;таймер тактируется от Fosc/4 : 4MHz/4 = 1 Mhz
;предделитель установлен на 1:8 : 1Mhz/8 = 125 kHz
;таймер - 16 бит : 125 kHz/65536 = 1.9 Hz
;светодиод включится и выключится за 2 прерывания : итоговая частота моргания 0,95 Hz
--

-- обработчик прерывания TMR1

procedure TMR1_ISR is
pragma
interrupt
if PIR1_TMR1IF then -- проверяем флаг нужного нам прерывания
PIR1_TMR1IF = off -- сбрасываем флаг прерывания
led = !led -- переключаем состояние светодиода
end if
end procedure

forever loop
-- полностью свободный основной цикл
end loop


CCP


Модуль CCP (Capture/Compare/PWM) предназначен для измерения и формирования импульсных сигналов.
Capture

В режиме захвата модуль использует TMR1 в качестве измерителя времени. Как только на ножке CCP1 (pin 9) возникнет отслеживаемое событие, модуль сохранит текущее 16-битное значение TMR1 в регистры CCPR1H:CCPR1L.
Такими событиями могут быть:
  • каждый задний фронт сигнала
  • каждый передний фронт сигнала
  • каждый четвертый передний фронт
  • каждый 16 передний фронт

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

В режиме сравнения модуль рабоает в обратном направлении: как только значение в регистрах CCPR1H:CCPR1L совпадет с текущим значением TMR1, модуль может выставить 1 или 0 на ножке CCP1 (pin 9) или просто сгенерировать прерывание. Так же при совпадении модуль может обнулить TMR1.
Замеряя необходимые промежутки времени можно формировать импульсы определенной формы. Например, для управления положением сервомашинки требуется подавать на сигнальную линию импульсы высокого уровня длиной 700-2200 мкс с частотой 50 Hz. В зависимости от длины импульса серво установит свое положение либо в одно крайнее положение (700 мкс), либо в другое (2200 мкс), либо приблизительно по центру (1500 мкс).
PWM

В режиме ШИМ модуль самостоятельно формирует сигнал с частотой, генерируемой таймером TMR2, и заданной 10-битной скважностью.

Что такое ШИМ-сигнал?
Микроконтроллер может выдавать только цифровой сигнал — логические 1 и 0.
В ШИМ сигнале с постоянной частотой первую часть периода на выход подается 1, а вторую часть — 0. Меняя соотношение длительности обоих частей меняется скважность сигнала. Скважность ШИМ — это соотношение продолжительности импульса логической единицы и периода ШИМ. 10-битный ШИМ может обеспечить точность изменения скважности в 1/1024 длительности периода.

Как этим можно пользоваться?
Так как частота сигнала достаточно велика, то низкоскоростным нагрузкам будет казаться, что они получают напряжение, равное проценту скважности от максимума. Таким образом из ШИМ у нас выйдет обычный аналоговый выход с диапазоном напряжения от 0 до Vdd (в нашем случае — 5В).

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

Для работы с ШИМ имеется библиотека, потому нам не потребуется особых усилий по расчетам и настройке регистров.
Пример использования библиотеки:

-- настраиваем ШИМ
pin_CCP1_direction = output -- настраиваем pin 9 как выход
include pwm_hardware -- подключаем библиотеку, упрощающую работу с ШИМ
pwm_max_resolution(4) -- устанавливаем значение предделителя TMR2 для выбора нужной частоты (976 Hz)
pwm1_on() -- включаем ШИМvar bit fade_type = 1 -- переменная для направления изменения яркости
var byte i = 0 -- переменная для текущего уровня яркости

forever loop
-- меняем текущее значение
if fade_type then
i = i + 1
if i == 100 then
fade_type = 0
end if
else
i = i - 1
if i == 0 then
fade_type = 1
end if
end if
pwm1_set_percent_dutycycle(i) -- применяем новое значение яркости
_usec_delay(20000) -- делаем паузу, иначе процесс изменения яркости будет очень быстрым
end loop

Компараторы


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

В зависимости от настроек, компараторы могут работать в восьми режимах:

По схемам хорошо видно какие напряжения сравниваются в каждом режиме, стоит только пояснить что такое опорное напряжение Vref.

Источник опорного напряжения

Это еще один небольшой модуль, обычно требуется только для работы компараторов.
Единственная задача модуля — разделить напряжение питания до нужного значения.
Модуль представляет из себя простой делитель на 16 резисторах. Все, что он умеет — выделить пониженное до нужного значения напряжение из питания.
При питании 5В модуль может выдать напряжение от 0 до 3.6В.

EEPROM


В микроконтроллере 16f628a нам доступно 128 байт энергонезависимой памяти.

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

Для подключения библиотеки достаточно написать

include pic_data_eeprom

после чего нам становится доступным ряд процедур и функций:

data_eeprom_read([offset],[byte])         -- процедура читает байт с номером [offset] и
                                          -- заносит результат в переменную [byte]
data_eeprom_write([offset],[byte])        -- процедура записвает полученный байт [byte] на место [offset]
data_eeprom_read_word([offset],[word])    -- процедура считывает 2 байта: [offset] и [offset]+1 
data_eeprom_write_word([ofset],[word])    -- процедура записывает 2 байта подряд
data_eeprom_read_dword([offset],[dword])  -- процедура считывает 4 байта подряд
data_eeprom_write_dword([offset],[dword]) -- процедура записывает 4 байта подряд
[byte] = data_eeprom([offset])            -- чтение байта через функцию
[word] = data_eeprom_word([offset])       -- чтение двух байт через функцию
[dword] = data_eeprom_dword([offset])     -- чтение 4 байт через функцию

Единственное, о чем нужно помнить — о размере памяти. Записать dword по смещению 128 в данном случае не удастся.

USART


USART — последовательный порт ввода-вывода. Данный модуль предназначен для связи микроконтроллера с другими устройствами.
Для организации канала связи достаточно лишь соединить Rx каждого устройства с Tx другого.
При желании настроить режим работы модуля самостоятельно можно подробно изучить документацию на микроконтроллер, но нам снова понадобится лишь одна библиотека.
Единственное, что нам требуется указать — скорость передачи данных. Максимальная скорость зависит от тактового сигнала МК. При 4 MHz рекомендуемая скорость — 2400.
const serial_hw_baudrate = 2400 -- задаем скорость
include serial_hardware -- подключаем библиотеку
serial_hw_init() -- производим настройку модуля

После настройки можно начинать принимать и передавать байты.

serial_hw_write([byte])          -- процедура отправки байта [byte]
serial_hw_data = [byte]          -- отправка байта через псевдопеременную
serial_hw_read([byte]):[boolean] -- при наличии присланного байта заносит значение в
                                 -- переменную [byte] и возвращает true
                                 -- при отсуствии присланных данных возвращает false
serial_hw_data_available         -- при наличии принятых байт данная переменная возвращает true, иначе - false
[byte] = serial_hw_data          -- чтение байта через псевдопеременную, при отсутствии 
                                 -- принятых байт микроконтролер будет ожидать их прихода
                                 -- при использовании такого способа чтения необходимо проверять
                                 -- факт прихода данных

Для организации связи с компьютером можно использовать UART-COM и UART-USB адаптеры. Впрочем, никто не мешает собрать их самостоятельно по схемам:

Внешний кварц


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

Подключать внешний кварц нужно к ногам OSC1 и OSC2 (pin16 и pin 15):


Для распространенных кварцев резистор не нужен, ёмкость конденсаторов выбирается в зависимости от частоты кварца. Так же в зависимости от частоты выбирается режим, выставляемый в конфигурационном бите OSC:

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

Итоги


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

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

Радиолюбительские конструкции на PIC-микроконтроллерах в 4 книгах + CD

Радиолюбительские конструкции на PIC-микроконтроллерах в 4 книгах + CD
В четырех книгах представлены различные конструкции на микроконтроллерах, которые будут интересны не только опытным, но и начинающим радиолюбителям. Для удобства при повторении конструкций приведены рисунки печатных плат, даны исходные тексты программ и «прошивки» контроллеров.

К книгам приложены мануалы использованных микросхем и контроллеров, а так же программы MPLab, IC-Prog и PonyProg2000 на CD диске.

Список книг
Заец Н.И. — Радиолюбительские конструкции на PIC-микроконтроллерах. С алгоритмами работы программ и подробными комментариями к исходным текстам. — М.: СОЛОН-Пресс, 2003. — 368 с.: ил. — (Серия «СОЛОН — радиолюбителям», выпуск 22) ISBN 5-98003-078-6+CD

В книге представлено 20 описаний радиолюбительских устройств различного назначения: часы, таймеру, автоматы, программатор и многие другие, выполненные на микроконтроллере PIC16F84A. Впервые книга с различными устройствами на PIC-микроконтроллере предназначается для радиолюбителей с любым уровнем подготовленности. Даже те, кто не знаком с программированием микроконтроллеров, смогут без труда повторить любое устройство. Радиолюбители, имеющие опыт работы с программированием, могут изменить программы под свои цели. Для этого в книге даны алгоритмы работы и исходные тексты программ с подробными комментариями.
Автор также делится опытом программирования и работы с ассемблером MPLAB и программатором PonyProg2000.

Содержание:

Предисловие
Устройства с цифровой индикацией
Часы с тремя будильниками
Часы с будильником — шахматные часы
Регистратор событий
Автомобильный цифровой тахометр
Программатор
Универсальный таймер
Автомат включения освещения
Счетчик витков
Кабельный пробник
Радиоохрана
Электронный домоуправ
Устройства с индикацией точечными светодиодами
Два автомата суточного включения нагрузки
Часы-будильник
Будильник с установкой времени
Походный будильник
«Песочные» часы
Автомат управления размораживанием холодильника
Рекомендации
Приложения

1 Справочные данные на микроконтроллер PIC16F84A
2 Команды микроконтроллера
3 Макрокоманды ассемблера MPASM
4 Коды прошивок микроконтроллеров
5 PIC-микроконтроллеры в интернете
6 Сообщения MPASM


Литература
Заец Н.И. — Радиолюбительские конструкции на PIC-микроконтроллерах. С алгоритмами работы программ и подробными комментариями к исходным текстам. Книга 2. — М.: СОЛОН-Пресс, 2005. — 192 с.: ил. — (Серия «СОЛОН — радиолюбителям») ISBN 5-98003-238-Х+CD

В книге даны новые примеры применения PIC-микроконтроллеров в радиолюбительской практике. Программисты найдут в книге программы с использованием встроенного в микроконтроллер модуля АЦП и программы с различными внешними устройствами — термодатчиками типа DS 18×20, LCD-дисплеями. Радиолюбители, которые желают повторить устройства, могут выбрать цифровой милливольтметр, для того чтобы защитить свой дом от перепадов напряжения, а трехфазный двигатель от перегрузки. Термометр-часы, градусник и два терморегулятора будут полезными в любом доме. Ко всем программам даны алгоритмы работы и подробные комментарии.
Книга предназначена для широкого круга радиолюбителей, а также может быть полезна студентам, изучающим программирование микроконтроллеров.

Содержание:

К читателям
Устройства с использованием АЦП
Милливольтметр
Цифровой прибор для блока питания с установкой защиты
Автомат защиты от перепадов сетевого напряжения
Устройство защиты от перепадов сетевого напряжения
Устройство защиты без индикации
Устройство защиты трехфазных двигателей
Устройства, измеряющие температуру
Т ермометр-часы
Градусник
Два терморегулятора
Приложение
Коды прошивок микроконтроллеров
Литература


Заец Н.И. — Радиолюбительские конструкции на PIC-микроконтроллерах. Книга 3. — М.: СОЛОН-Пресс, 2006. — 240 с.: ил. — (Серия «СОЛОН — радиолюбителям») ISBN 5-98003-250-9 + Приложение +CD

Третья книга расширяет диапазон применения PIC-микроконтроллеров в радиолюбительской практике. В ней дан пример программы с использованием встроенного в микроконтроллер модуля USART и различных внешних устройств — LCD-дисплеев и ЖКИ, выполненных по COG-технологии. Радиолюбители, которые желают повторить устройства, могут выбрать: охрану подворья, шахматные часы, таймеры на 7 и 9 выходов, а также автомат кормления аквариумных рыб. Для родной школы можно изготовить простое устройство подачи звонков по расписанию.
В отдельную главу вынесены «трудные темы» взаимодействия микроконтроллеров с внешними устройствами: ЖК-дисплеями и термодатчиками типа DS 18×20. Ко всем программам даны алгоритмы работы и подробные комментарии.
К книге прилагается КОМПАКТ-ДИСК, содержащий 48 исходных текстов программ ко всем устройствам четырех книг автора, («Электронные самоделки. Для быта, отдыха и здоровья» и «Радиолюбительские конструкции на PIC-микроконтроллерах» в трех книгах), вышедших в издательстве СОЛОН-Пресс, справочные материалы по микроконтроллерам на русском и английском языках, установочные программы для программаторов и ассемблера MPASM.
Книга предназначена для широкого круга радиолюбителей, а также может быть полезна студентам, изучающим программирование микроконтроллеров.

Содержание:

К читателям
Содержание компакт-диска
Необходимые для дома устройства
Охрана подворьем восемь объектов
Таймер на семь выходов
Таймер на девять выходов
Автомат кормления аквариумных рыб
Устройство подачи звонков по расписанию
Шахматные часы-таймер
Взаимодействие микроконтроллеров с внешними устройствами
Управление термодатчиками типа DS 18×20
Управление жидкокристаллическими дисплеями
Проверка ЖКИ типа TIC9162
Литература


Заец Н.И. — Радиолюбительские конструкции на PIC-микроконтроллерах. Книга 4. — К.: «МК-Пресс», 2008. — 336 с.: ил. ISBN 978-966-8806-42-1+CD

Данная книга — практическое пособие по освоению микроконтроллеров PICmicro компании Microchip и другой современной элементной базы, наподобие индикаторов, выполненных по COG-технологии. Рассмотрены алгоритмы работы, схемы и программы для различных полезных устройств: многофункциональных часов, отображающих текущее время и температуру воздуха; автомобильных часов, фиксирующих время в пути и сообщающих о поломке реле-регулятора; автомата включения освещения; цифрового устройства для блока питания с установкой защиты по току и напряжению; специализированных термометров и др. Для начинающих дана глава о наладке устройств на микроконтроллерах. Книга предназначена для широкого круга радиолюбителей, а также может быть полезна студентам, изучающим программирование микроконтроллеров.

Содержание:

Глава 1 Многофункциональные часы
Принципиальная схема
Печатная плата
Общий вид
Работа с устройством
Калибровка термометра

Глава 2 Автомобильные часы, вольтметр, таймер
Принципиальная схема
Наладка устройства
Работа с устройством

Глава 3 Таймеры десятичного счета
Принципиальная схема
Печатная плата
Работа с таймером

Глава 4 Автомат включения освещения
Принципиальная схема
Работа с устройством

Глава 5 Два термометра с памятью
Принципиальная схема
Работа с устройством

Глава 6 Терморегулятор с гистерезисом
Принципиальная схема
Печатная плата
Работа с устройством

Глава 7 Термометр-градуснbк
Принципиальная схема
Работа с устройством

Глава 8 Усовершенствованное устройство для блока питания с установкой защиты
Принципиальная схема
Печатная плата
Наладка устройства
Работа с устройством

Глава 9 Контроллер трех насосов
Работа устройства

Глава 10 Наладка устройств на микроконтроллерах
Работа с программой PonyProg2000
Работа с программой IC-Prog
Устройство не работает
Устройство работает неправильно

Список литературы

Год издания: 2003-2008
Издательство: Солон-Пресс
Серия / Цикл: Радиолюбительские конструкции на PIC-микроконтроллерах.
Формат: pdf, CD
Язык: русский
Размер: 161 Mb

Скачать Радиолюбительские конструкции на PIC-микроконтроллерах

banner-turbobit-unlock