Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

PIC16F877A - Отладочная плата

Статья адресована тем, кто знаком с электроникой и , может быть, с микроконтроллерами, но , так как и Я, не работал с конкретным видом микроконтроллеров. В ней я хочу изложить свой опыт освоения PIC-контроллера PIC16F877A. В основе изучения создание несложной схемы «Отладочной платы», как универсального электронного устройства, сравнимого с ПЛК для АСУ. В том смысле, что одно и то же устройство, по необходимости, становится различным изделием, в зависимости от программы. Рассмотрим создание нескольких устройств и освоение приемов программирования.  В дальнейшем «Отладочную плату» можно будет использовать для создания многих иных проектов. В статье будут рассмотрены вопросы :

  1. Программирование с использованием бесплатно предоставляемых производителем MicroCHIP программных средств MPLAB-X IDE и компилятора XC8.
  2. Освоение программирования портов ввода-вывода, 7-ми сегментных индикаторов, таймеров, прерываний, ADC- преобразователя.

«Отладочные платы», как изделие, появились по инициативе производителей электронной продукции, в частности - микроконтроллеров . Они позволяют быстро и легко осваивать использование продукции. Кроме того – они с успехом могут заменять «макетные платы», изготовление которых является неотъемлемой составной частью проектирования любого электронного устройства. Однако, пока микроконтроллер малоизвестен, производители, в рекламных целях, всячески снижают стоимость «отладочных плат», иногда даже присылают в подарок всем желающим. Но, как только приходит популярность, стоимость такой продукции становится «не по карману» многим желающим. Достаточно взглянуть на цены серий популярных отладочных комплектов : ARDUINO, EasyPIC, NUCLEO, DISCOVERY. При этом стоимость основного компонента – микроконтроллера сравнительно невысока. Для примера, стоимость PIC16F877A находится в районе 5$.  Цель данной статьи – показать как создать свою недорогую и оптимальную, без излишеств, отладочную плату. Монтажная схема и печатная плата не рассматривается в виду нецелесообразности определенного вида конструкции. Наиболее приемлемым можно считать вариант монтажа на «универсальной печатной плате». Например такой.

Универсальная печатная макетная плата

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

Вариант монтажа

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

Рисунок №1

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

Подробнее рассмотрим принципиальную схему. В основе устройства микроконтроллер PIC16F877A. Синхронизация тактирования работы производится кварцем 14 МГц, подключенного стандартно согласно документации к выводам 13 и 14. К портам А и B подключены выходные индикаторные светодиоды. К этим выводам (параллельно резистор-светодиод) можно подключить выходные ключи для увеличения нагрузочной способности. Ключи могут быть любого типа – от транзисторно-релейных – до оптопарно–симисторных . Поэтому на принципиальной схеме они не указаны (все-таки «отладочная» плата). Одним из лучших вариантов можно считать «твердотельное реле типа SSR-10DA или SSR-25DA». К портам D, C и E подключены семисегментные индикаторы типа KW2-561AGA с общими анодами, которые можно заменить величайшим количеством аналогов сдвоенных, четверных или одинарных индикаторов с общим анодом, управляемых отдельным подключением анодов. Аноды подключаются через ключи pnp- транзисторов. Также подключены 7 кнопок без фиксации. А, В и С – отдельно к порту С. Использованы дополнительные подтягивающие резисторы 15-24 ком. Использовать внутренние не рекомендую – некоторые экземпляры микроконтроллеров не вытягивают входы, как следствие – ложные срабатывания, особенно в условиях дополнительных помех. Еще четыре кнопки – 1-4 подключены к портам индикатора таким образом, что бы их состояние можно было бы определять одновременно со сканированием анодов индикаторов через единственный порт ввода – RD6. Тем самым экономится три ввода, в сравнении с отдельным подключением. На схеме так же отображен разъем для внутрисхемного программирования ICSP. Вывод MCLR/VPP подключен к +5В через диод, чтобы после программирования, при подаче напряжения питания, микроконтроллер переходил в рабочий режим. Следует помнить, так же, что, программатор должен «отпускать» выводы программирования PGD & PGC. Некоторые самодельные программаторы этого не делают, вследствие упрощения схемы. Имеются несколько незадействованных выводов, которые, при необходимости, можно подключить в схему для наращивания вводов-выводов.

Для начала программирования необходимо скачать и установить MPLAB X IDE

Таким же образом ищем XC8 Compilers. Так же скачиваем и стандартно устанавливаем в систему на компьютер.

Запустим среду программирования MPLAB X IDE. В меню выбираем «Создать новый проект». Выбираем «Стандартный проект» (см.рис) затем – «тип микроконтроллера»-PIC16F877A.

Шаг №1 Шаг №2 Шаг №3
Шаг №4-си Шаг №4-asm Шаг №5

После этого MPLABX предлагает выбрать тип программатора. В данном случае принципиального значения в выборе нет. Можно выбрать Simulator или PICKit. HEX-файл прошивки будет сгенерирован в любом случае. Следующий шаг – выбор компилятора. Выбираем XC8 – компилятор СИ, который был предварительно скачан (free-версия) и установлен. В следующем примере используем MPASM-компилятор, поставляемый бесплатно со всеми MPLAB. Заключительный шаг создания проекта – Выбор имени проекта («AUTOMATIC_LIGHTING_EFFECTS») и папки расположения проекта. Нажатие кнопки Finish заканчивает создание проекта. Теперь в проект необходимо добавить исходный файл программы. Нажимаем правую кнопку на разделе исходные файлы проекта. Затем New ->main.c даем имя файлу, жмем Finish.

Рассмотрим программу, превращающую «универсальное электронное устройство», каковым, несомненно и является отладочная плата, в устройство определенного назначения.   Одной из программ-прошивок, достаточно разнообразно использующей многие возможности аппаратного устройства платы, может быть программа «Автомат Световых Эффектов» . Ее исходный текст приведен ниже. По сообщениям MPLAB-X программа использует до 24% памяти программ и до 17%  памяти данных. Ещё она использует 96 байт EEPROM, что так же является далеко не полным использованием. Т.е. у микроконтроллера остается еще масса ресурсов для развития программы.

Рассмотрим основные модули программы. В начале программы указана конфигурация работы микроконтроллера (то что в avr называют fuses). Слово конфигурации записывается в скомпелированную прошивку, благодаря чему отпадает необходимость ручной настройки программатора. Для этого в данном компиляторе существуют директивы #pragma config

#pragma config FOSC = XT       // Oscillator Selection bits (XT oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF      // Power-up Timer Enable bit (PWRT disabled)
#pragma config BOREN = OFF      // Brown-out Reset Enable bit (BOR disabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit 
                                                                    // (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

В данной конфигурации выбран источник тактирования XT-кварц 4 Мгц, отключены WDT,BOR,LVP и защита памяти. В данном примере эти опции не нужны.

Благодаря использованию EEPROM программа запоминает какая «световая картина» была запущена на «Автомат Световых Эффектов» перед выключением.

...
Number_PRG = EEPROM_READ(ADR_Num_Prg);
...
EEPROM_WRITE(ADR_Num_Prg,Control_Number_PRG);
...

Еще в EEPROM запрограммировано семь различных «световых картин» и знакогенератор для семисегментного индикатора.

void Load_EEPROM_DATA(void)
{
 /*--- Segments Simbols ABCDEFGH ---*/
 /* 0x2100 --       0           1           2           3           4           5           6           7   */
 __EEPROM_DATA(0b00000011, 0b10011111, 0b00100101,  0b00001101, 0b10011001, 0b01001001, 0b01000001, 0b00011111);
...
/*------ Sveto-Programms --- Start_ADR_Programms = 0x2120 -----*/
 /* 0x2120 --   1-1/9       1-2/10      1-3/11      1-4/12      1-5/13      1-6/14      1-7/15      1-8/16 */
 __EEPROM_DATA(0b11111011, 0b11111101, 0b11111110,  0b01111111, 0b10111111, 0b11011111, 0b11101111, 0b11110111);
...
 }

 

Благодаря использованию EEPROM размер программы значительно компактнее, нежели все коды-сочетания пришлось бы программировать прямо в программе. Впрочем, PIC-контроллеры имеют возможность использовать свободную Flesh-память программ, даже если нет EEPROM. В данной программе для работы с EEPROM используются стандартные макросы XC8 – компилятора. Для загрузки знакогенератора - __EEPROM_DATA(8байт). Это «не исполняемый» макрос. Он обеспечивает загрузку данных не вовремя выполнения программы микроконтроллера, а во время программирования прошивки. Но в исходном тексте программы он обязательно должен вызываться в теле main(). EEPROM_READ(ADR) и EEPROM_WRITE(ADR,байт) - макросы выполняющие обмен данных во время выполнения программы микроконтроллера.

Кнопки A и С – функционируют как установка номера световой картины. При этом номер 8 – режим АВТО,  в котором все программы повторяются по очереди. Кнопка В – реверс. А кнопка №1 – СТОП, №2 – быстрое включение АВТО, №3 – резервная, №4 – запуск после нажатия СТОП. Используемые порты ввода-вывода инициируются в теле функции Init_Ports(). Названия всех определений регистров и битов находятся в файле pic16f877a.h компилятора, где их и можно посмотреть. А включать этот файл в тело программы – не обязательно. MPLAB-X сама указывает компилятору какой микроконтроллер был выбран на этапе создания проекта. О том как создавать проекты – смотрите далее. Функция Init_TMR0() настраивает таймер на работу по прерываниям. Благодаря чему обеспечивается запланированное свечение индикаторов и опрос кнопок.

/* processing interrupts */
void interrupt Handler_Interrupt(void)
{ 
if(INTCONbits.TMR0IF)
    {...}
 if(PIR1bits.ADIF)
    {
        ADC_Value = ADRESH<<8;
        ADC_Value += ADRESL;
        ADC_Delay = 100;
        PIR1bits.ADIF = 0;       /* clear interrupt flag ADC */
    }
}

 

Так же в обработчике прерываний обрабатываются прерывания ADC – преобразователя. Показания которого, определяемые переменным резистором R1 схемы, используются как задатчики темпа работы «Автомат Световых Эффектов». Собственно, это и есть все модули программы , рассмотренные вкратце. При внимательном рассмотрении исходного текста программы легко и быстро можно понять как запрограммировать ту или иную функцию микроконтроллера с помощью компилятора XC8-Free edition.

В следующем примере программы для «PIC16F877A - Отладочная плата», рассмотрим устройство «ЧАСЫ/ТАЙМЕР-ТЕРМОРЕГУЛЯТОР».

Список радиоэлементов

Обозначение Тип Номинал Количество ПримечаниеМагазинМой блокнот
MCU МК PIC 8-бит
PIC16F877
1 Поиск в магазине ОтронВ блокнот
VT1-VT5 Биполярный транзистор
КТ361Б
1 Поиск в магазине ОтронВ блокнот
VD1-VD5 Выпрямительный диод
1N4001
5 Поиск в магазине ОтронВ блокнот
VD6-VD14 СветодиодBL-B21399 Поиск в магазине ОтронВ блокнот
C1, C2 Конденсатор15 пФ2 Поиск в магазине ОтронВ блокнот
C3 Электролитический конденсатор220мкФ 25В1 Поиск в магазине ОтронВ блокнот
R1 Переменный резистор4.7 кОм1 Поиск в магазине ОтронВ блокнот
R2-R5 Резистор
15 кОм
4 Поиск в магазине ОтронВ блокнот
R6-R13 Резистор
200 Ом
8 Поиск в магазине ОтронВ блокнот
R14-R18 Резистор
1 кОм
5 Поиск в магазине ОтронВ блокнот
R19-R22 Резистор
3.9 кОм
4 Поиск в магазине ОтронВ блокнот
R23 Резистор
510 Ом
1 Поиск в магазине ОтронВ блокнот
R24 Резистор
270 Ом
1 Поиск в магазине ОтронВ блокнот
R25-R32 Резистор
360 Ом
8 Поиск в магазине ОтронВ блокнот
LCD LCD-дисплейKW2-561AGA2 ОАПоиск в магазине ОтронВ блокнот
LZ кварц4МГц1 Поиск в магазине ОтронВ блокнот
Добавить все

Скачать список элементов (PDF)

Прикрепленные файлы:

Теги:

Опубликована: 0 0
Я собрал 0 1
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 5 Проголосовало: 1 чел.

Комментарии (8) | Я собрал (0) | Подписаться

0
Публикатор #
На форуме автоматически создана тема для обсуждения статьи.
Ответить
+1
BARS_ #
И что же в ней отладочного? Обычная макета с МК и горсткой светодиодов. Даже без разъемов. Вот так выглядит отладочная плата.
Прикрепленный файл: 20130516_232905.jpg
Ответить
0

[Автор]
vra1973 #
Да .... КРУТО ! Сам сделал ? Или фотку скачал ? А по сути статьи комментарии?
Ответить
+1
BARS_ #
Это моя плата, которой я не первый год пользуюсь и не один десяток проектов на ней обкатал. (Первая тоже была на макетке, размером чуть больше этой и даже чуть более функциональная). Коммент и был по сути "статьи", точнее о ее бессмысленности.
Ответить
0

[Автор]
vra1973 #
Наверное - это статья "для начинающих". Если Вы думаете, что Вы - крутой спец - то эту статью Вам читать не надо.
Ответить
0
BARS_ #
Моя плата вроде как тоже для них =)
Ответить
+1
Стальной #
Bars дело говорит, это так, макетка-инвалидка
Ответить
0
lokis #
Вот ещё вариант макетки для PIC16F877 с разъёмами так необходимыми при макетировании и разъёмом программатора.
Отредактирован 24.10.2021 18:47
Прикрепленный файл: Макетка под PIC16F877A.jpg
Ответить
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Автомобильный GPS-трекер с GSM/GPRS и дистанционным управлением 200 Вт усилитель класса D на IRS2092
вверх