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

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

Компания Microchip распространяет MPLAB - бесплатную интегрированную среду редактирования и отладки программ, которая записывает бинарные файлы в микроконтроллеры PIC через программаторы.

Взаимодействие MPLAB и Matlab/Simulink позволяет разрабатывать программы для PIC-контроллеров в среде Simulink - графического моделирования и анализа динамических систем. В этой работе рассматриваются средства программирования PIC контроллеров: MPLAB, Matlab/Simulink и программатор PIC-KIT3 в следующих разделах.

Характеристики миниатюрного PIC контроллера PIC12F629
Интегрированная среда разработки MPLAB IDE
Подключение Matlab/Simulink к MPLAB
Подключение программатора PIC-KIT3

Характеристики миниатюрного PIC-контроллера

Семейство РIС12ххх содержит контроллеры в миниатюрном 8–выводном корпусе со встроенным тактовым генератором. Контроллеры имеют RISC–архитектуру и обеспечивают выполнение большинства команд процессора за один машинный цикл.

Для примера, ниже даны характеристики недорогого компактного 8-разрядного контроллера PIC12F629 с многофункциональными портами, малым потреблением и широким диапазоном питания .

Архитектура: RISC
Напряжение питания VDD: от 2,0В до 5,5В (< 6,5В)
Потребление:
- <1,0 мА @ 5,5В, 4МГц
- 20 мкА (тип) @ 32 кГц, 2,0В
- <1,0 мкА (тип) в режиме SLEEP@2,0В
Рассеиваемая мощность: 0,8Вт
Многофункциональные каналы ввода/вывода: 6/5
Максимальный выходной ток портов GPIO: 125мА
Ток через программируемые внутренние подтягивающие резисторы портов: ≥50 (250) ≤400 мкА @ 5,0В
Разрядность контроллера: 8
Тактовая частота от внешнего генератора: 20 МГц
Длительность машинного цикла: 200 нс
Тактовая частота от внутреннего RC генератора: 4 МГц ±1%
Длительность машинного цикла: 1мкс
FLASH память программ: 1К
Число циклов стирание/запись: ≥1000
ОЗУ память данных: 64
EEPROM память данных: 128
Число циклов стирание/запись: ≥10K (-40оС ≤TA≤ +125 оС)
Аппаратные регистры специального назначения: 16
Список команд: 35 инструкций, все команды выполняются за один машинный цикл,
кроме команд перехода, выполняемых за 2 цикла
Аппаратный стек: 8 уровней
Таймер/счетчик ТМR0: 8-разрядный с предделителем
Таймер/счетчик ТМR1: 16-разрядный с предделителем

Дополнительные особенности:
Сброс по включению питания (POR)
Таймер сброса (PWRTтаймер ожидания запуска генератора (OST
Сброс по снижению напряжения питания (BOD)
Сторожевой таймер WDT
Мультиплексируемый вывод -MCLR
Система прерываний по изменению уровня сигнала на входах
Индивидуально программируемые для каждого входа подтягивающие резисторы
Программируемая защита входа
Режим пониженного энергопотребления SLEEP
Выбор режима работы тактового генератора
Внутрисхемное программирование ICSP с использованием двух выводов
Четыре пользовательские ID ячейки

Предельная рабочая температура для Е исполнения (расширенный диапазон) от -40оС до +125 оС;
Температура хранения от -65оС до +150 оС.

КМОП технология контроллера обеспечивает полностью статический режим работы, при котором остановка тактового генератора не приводит к потере логических состояний внутренних узлов.
Микроконтроллер PIC12F629 имеет 6-разрядный порт ввода/вывода GPIO. Один вывод GP3 порта GPIO работает только на вход, остальные выводы можно сконфигурировать для работы как на вход так и на выход. Каждый вывод GPIO имеет индивидуальный бит разрешения прерываний по изменению уровня сигнала на входах и бит включения внутреннего подтягивающего резистора.

Интегрированная среда разработки MPLAB IDE

MPLAB IDE - бесплатная интегрированная среда разработки ПО для микроконтроллеров PIC включает средства для создания, редактирования, отладки, трансляции и компоновки программ, записи машинного кода в микроконтроллеры через программаторы.

Бесплатные версии MPLAB (включая MPLAB 8.92) хранятся на сайте компании Microchip в разделе «DOWNLOAD ARCHIVE».

Создание проекта

Пример создания проекта программ PIC контроллера в среде MPLAB включает следующие шаги .

1. Вызов менеджера проекта.

2. Выбор типа PIC микроконтроллера.


3. Выбор компилятора, например, Microchip MPASM для ассемблера.


4. Выбор пути к каталогу проекта (клавиша Browse...) и ввод имени проекта.

5. Подключение файлов к проекту в окне Project Wizard → Step Four можно не выполнять. Это можно сделать позднее, внутри активного проекта. Клавиша Next открывает следующее окно.

6. Завершение создания проекта (клавиша Finish).

В результате создания проекта FirstPrMPLAB интерфейс MPLAB принимает вид, показанный на Рис. 1.


Рис. 1 . Интерфейс среды MPLAB v8.92 и шаблон проекта.

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

Создание программы в MPLAB можно выполнить в следующей последовательности.

1. Открыть редактор программ: меню → File → New. Изначально программе присвоено имя Untitled.

2. Набрать или скопировать программу, например, на ассемблере.


Рис. 2 . Пример простейшей программы (на ассемблере) вывода сигналов через порты контроллера GP0, GP1, GP2, GP4, GP5 на максимальной частоте.

Запись ‘1’ в разряде регистра TRISIO переводит соответствующий выходной буфер в 3-е состояние, в этом случае порт GP может работать только на вход. Установка нуля в TRISIO настраивает работу порта GP на выход.

Примечание. По спецификации PIC12F629 порт GP3 микроконтроллера работает только на вход (соответствующий бит регистра TRISIO не сбрасывается – всегда находится в ‘1’).

Регистры TRISIO и GPIO находятся в разных банках области памяти. Переключение банков выполняется 5-м битом регистра STATUS.

Любая программа на ассемблере начинается директивой org и заканчивается директивой end. Переход goto Metka обеспечивает циклическое выполнение программы.

В программе (Рис. 2) используются следующие обозначения.

Директива LIST - назначение типа контроллера
Директива __CONFIG - установка значений битов конфигурации контроллера
Директива equ - присвоение числового значения
Директива org 0 - начало выполнения программы с адреса 0
Команда bsf - устанавливает бит указанного регистра в 1
Команда bсf - сбрасывает бит указанного регистра в 0
Команда movlw - записывает константу в регистр W
Команда movwf - копирует содержимое регистра W в указанный регистр
Команда goto - обеспечивает переход без условия на строку с меткой
Директива end - конец программы

Установка требуемой конфигурации микроконтроллера
Конфигурация микроконтроллера PIC12F629 зависит от настроек слова конфигурации (2007h), которые можно задать в программе через директиву __CONFIG.

Непосредственно или через окно MPLAB: меню → Configure → Configuration Bits:

Где:

Бит 2-0 - FOSC2:FOSC0. Выбор тактового генератора
111 - Внешний RC генератор. Подключается к выводу GP5. GP4 работает как CLKOUT
110 - Внешний RC генератор. Подключается к выводу GP5. GP4 работает как ввод/вывод
101 - Внутренний RC генератор 4МГц. GP5 работает как ввод/вывод. GP4 - как CLKOUT
100 - Внутренний RC генератор 4МГц. GP5 и GP4 работают как ввод/вывод
011 - EC генератор. GP4 работает как ввод/вывод. GP5 - как CLKIN
010 - HC генератор. Резонатор подключается к GP4 и GP5
001 - XT генератор. Резонатор подключается к GP4 и GP5
000 - LP генератор. Резонатор подключается к GP4 и GP5

Бит 3 - WDTE: настройка сторожевого таймера (Watchdog Timer)
1 - WDTE включен
0 - WDTE выключен

Сторожевой таймер предохраняет микроконтроллер от зависания – перезапускает программу через определенный интервал времени если таймер не был сброшен. Период таймера устанавливается в регистре OPTION_REG. Обнуление сторожевого таймера вызывается командой CLRWDT.

Бит 4 - PWRTE: Разрешение работы таймера включения питания:
1 - PWRT выключен
0 - PWRT включен

Таймер задерживает микроконтроллер в состоянии сброса при подаче питания VDD.

Бит 5 - MCLR: Выбор режима работы вывода GP3/-MCLR
1 - работает как -MCLR
0 - работает как порт ввода-вывода GP3

Бит 6 - BODEN: Разрешение сброса по снижению напряжения питания (как правило < 2.0В)
1 - разрешен сброс BOR
0 - запрещен сброс BOR автоматически включается таймер

При разрешении сброса BOR автоматически включается таймер PWRT

Бит 7 - .CP: Бит защиты памяти программ от чтения программатором
1 Защита выключена
0 Защита включена

При выключения защиты вся память программ стирается

Бит 8 - .CPD: Бит защиты EPROM памяти данных
1 Защита выключена
0 Защита включена

После выключения защиты вся информация будет стерта

Бит 11-9 - Не используются: Читается как ‘1’.

Бит 13-12 - BG1:BG0. Биты калибровки сброса по снижению питания
00 - нижний предел калибровки
11 - верхний предел калибровки


Добавление программы к проекту

Пример добавления программы к проекту показан на (Рис. 3).


Рис. 3 . Добавление программы FirstPrMPLAB.asm к проекту FirstPrMPLAB.mcp

Компиляция

Чтобы создать бинарный файл с расширением hex для прошивки микроконтроллера необходимо откомпилировать проект. Запуск компиляции выполняется командой меню → Project → Build All. Результаты компиляции можно увидеть в окне Output (Рис. 1). Если в программе нет ошибок, то компилятор выдаёт сообщение об успешной компиляции: BUILD SUCCEEDED, загрузочный HEX файл можно найти в рабочем каталоге:

Отладка программы

Отладку программы в среде MPLAB IDE можно выполнить при помощи аппаратного эмулятора MPLAB REAL ICE или программного симулятора MPLAB SIM. Запуск последнего выполняется как показано на Рис. 4.


Рис. 4 . Подключение к симулятору MPLAB SIM для отладки программы.

После запуска отладчика в окне Output (Рис. 1) появляется закладка MPLAB SIM, куда MPLAB выводит текущую информацию отладчика. Команды отладчика (Рис. 5) после запуска становятся активными.


Рис. 5 . Команды отладчика.

Команды отладчика:

Run - Непрерывное выполнение программы до точки останова (Breakpoint) если таковая установлена.
Halt - Остановка программы на текущем шаге выполнения.
Animate - Анимация непрерывного выполнения программы.
Step Into - Выполнение по шагам (вызовы Call выполняются за один шаг).
Step Over - Выполнение по шагам включая команды вызовов Call.
Reset - Начальная установка программы. Переход указателя на первую команду.
Breakpoints - Отображение списка точек останова. Обработка списка.

При выполнении программы по шагам текущий шаг выделяется стрелкой (Рис. 6). Непрерывное выполнение программы останавливается командой Halt или достижением программой точки останова. Точка останова устанавливается/снимается в строке программы двойным щелчком.
Пример программы на ассемблере, которая с максимальной скоростью меняет состояние портов контроллера показан на Рис. 6 (справа). Программа передаёт в регистр портов GPIO данные b’10101010’ и b’01010101’. Поскольку в регистре GPIO передачу данных в порты контроллера выполняют не все разряды, а только 0,1,2,4 и 5, то состояние регистра GPIO (Рис. 6, слева) отличается значениями: b’00100010’ и b’00010101’.


Рис. 6 . Состояние регистров специального назначения контроллера на момент выполнения программы (слева) и выполняемая по шагам программа (справа).

В процессе отладки можно наблюдать за состоянием регистров, переменных, памяти в соответствующих окнах, открываемых в разделе View основного меню. В процессе отладки можно вносить изменения в код программы, содержимое регистров, памяти, изменять значения переменных. После изменения кода необходимо перекомпилировать программу. Изменение содержимого регистров, памяти и значения переменных (окна раздела View: Special Function Register, File Register, EEPROM, Watch) не требует перекомпиляции.

Входные сигналы портов модели микроконтоллера можно задать в разделе Debugger → Stimulus. Устанавливаемые состояния сигналов портов привязываются к времени (тактам) отладки.

Иногда результаты выполнения программы в режиме отладки не соответствуют выполнению этой же программы в реальном контроллере, так, например, отладчик программы (Рис. 6) без инструкций movlw 0x07 и movwf cmcon показывает, что выходы GP0 и GP1 регистра GPIO не изменяются - находятся в нулевом состоянии, содержимое регистра GPIO попеременно равно 0x14 и 0х20. Однако, контроллер, выполняющий программу без указанных инструкций, показывает на осциллографе циклическую работу всех пяти выходов: 0x15 и 0х22, включая GP0 и GP1 (см. Рис. 7).

Осциллограммы контроллера, выполняющего циклы программы Рис. 6 (Metka… goto Metka) показаны на Рис. 7.


Рис. 7 . Осциллограммы выхода GP0 (слева) и GP1 (справа) микроконтроллера PIC12F629, работающего от внутреннего 4МГц RC генератора. Программа (Рис. 6) формирует сигналы максимальной частоты на всех выходах контроллера. За период сигналов 5.3 мкс выполняется 5 команд (6 машинных циклов), амплитуда GP0 сигнала на осциллограмме равна 4.6В, измеренное программатором питание контроллера 4.75В.

Прошивка микроконтроллера

Для записи программы в микроконтроллер (прошивки контроллера) необходимо микроконтроллер подключить к интегрированной среде MPLAB IDE через программатор. Организация подключения показана ниже в разделе «Подключение программатора PIC-KIT3».

Примечание. В контроллер PIC12F629 записана заводская калибровочная константа настройки частоты внутреннего тактового генератора. При необходимости её можно прочитать и восстановить средствами MPLAB с использованием программатора.

Команды для работы с программатором и изменения его настроек находятся в меню MPLAB Programmer. Тип программатора в MPLAB выбирается в разделе: меню → Programmer → Select Programmer.


Рис. 8 . Выбор программатора для подключения к среде MPLAB.

Прошивка микроконтроллера через программатор запускается командой: меню → Programmer → Program. Сообщение об успешной прошивке показано на Рис. 9.


Рис. 9 . Запуск прошивки микроконтроллера и вид сообщения об успешной прошивке.

Примечание: Во время прошивки микроконтроллера у программатора PIC-KIT3 мигает желтый светодиод.

Подключение MATLAB/SIMULINK к MPLAB

В системе моделирования динамических систем Simulink (приложение к Matlab) на языке графического программирования можно разрабатывать программы для семейства PIC контроллеров имеющих АЦП/ЦАП, счетчики, таймеры, ШИМ, DMA, интерфейсы UART, SPI, CAN, I2C и др.

Пример Simulink программы PIC контроллера показан на Рис. 10.


Рис. 10 . Пример программы на языке графического программирования для PIC контроллера выполненной в среде моделирования динамических систем Simulink.

Взаимодействие средств разработки и компиляции программ для PIC контроллеров в Simulink показано на Рис. 11 .


Рис. 11 . Структура средств построения адекватной модели PIC контроллера на языке графического программирования.

Для построения среды разработки необходимы следующие компоненты Matlab:

Simulink
Real-Time Workshop Embedded Coder
Real-Time Workshop

И Cи компилятор компании Microchip:

C30 для контроллеров PIC24, dsPIC30 и PIC33
или C32 для контроллеров серии PIC32

Установка компонентов Matlab

На сайте имеются Simulink библиотеки (dsPIC Toolbox) для PIC контроллеров и версий Matlab c R2006a по R2012a:

Для скачивания библиотеки необходимо зарегистрироваться. Программы поддерживают работу 100 микроконтроллеров из серий PIC 16MC, 24F, 30F, 32MC, 33F, 56GP, 64MC, 128MC, 128GP.
Бесплатные версии работают с Simulink моделями PIC контроллеров имеющих до 7 портов ввода-вывода.

Для установки dsPIC Toolbox - библиотеки блоков PIC контроллеров для Matlab/Simulink необходимо :

Скачать dsPIC Toolbox для требуемой версии Matlab.
Распаковать zip файл в папке, в которой будут установлены Simulink блоки.
Запустить Matlab.
Настроить текущий каталог Matlab на папку с распакованным файлом.
Открыть и запустить файл install_dsPIC_R2012a.m, например, кнопкой меню или клавишей клавиатуры.

Библиотеки dsPIC и примеры Simulink моделей устанавливаются в текущую папку Matlab (Рис. 12). Установленные блоки для моделирования PIC контроллеров доступны в разделе Embedded Target for Microchip dsPIC библиотеки Simulink (Рис. 13).


Рис. 12 . Содержимое текущего каталога после выполнения install_dsPIC_R2012a.m.


Рис. 13 . Блоки, установленной библиотеки «Embedded Target for Microchip dsPIC».

Для совместной компиляции Simulink модели средствами Matlab и MPLAB необходимо прописать в переменной окружения path Matlab с высшим приоритетом путь к каталогу MPLAB с файлами MplabOpenModel.m, MplabGetBuildinfo.m и getHardwareConfigs.m:

>>

Установка Си компилятора MPLAB

Компиляторы MPLAB находятся на сайте Microchip (Download Archive → MPLAB C Compiler for PIC24 and dsPIC DSCs). Для установки демонстрационной версии компилятора С30 необходимо его скачать по ссылке PIC24/dsPIC v3.25 (Рис. 14) и запустить принятый файл mplabc30-v3.25-comboUpgrade.exe.


Рис. 14 . Версии Си компилятора (слева) и режимы его установки (справа).

Примечание. Работа выполнена с версией v3.25 компилятора С30 для PIC24/dsPIC. Проверка показала, что следующая версия v3.30 не поддерживает совместную компиляцию моделей Matlab R2012a (dsPIC Toolbox) без ошибок.

Установочный exe файл создаёт в разделе c:\Program Files (x86)\Microchip\ новый каталог mplabc30 с файлами:


Рис. 15 . Каталоги компилятора C30 MPLAB.

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

1. Создайте рабочий каталог и скопируйте в него *.mdl примеры из раздела example (см. Рис. 12).
2. Загрузите Matlab. Настройте его на рабочий каталог.
3. Включите в переменную окружения path Matlab с высшим приоритетом путь к MPLAB - каталогу c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\:

>> path("c:\Program Files (x86)\Microchip\MPLAB IDE\Tools\MATLAB\",path)
Примечание: Использование команды >>path без аргументов приводит к отображению списка путей переменной path в окне команд (Command Window). Удалить путь из переменной path можно командой rmpath, например:

>>rmpath(" c:\Program Files\Microchip\MPLAB IDE\Tools\MATLAB\")
4. Создайте Simulink модель для PIC контроллера, используя блоки библиотеки «Embedded Target for Microchip dsPIC» (Рис. 13), или загрузите готовую модель, например, Servo_ADC.mdl.

Тип контроллера, для которого разрабатывается Simulink модель, выбирается из списка в блоке Master > PIC (Рис. 16, Рис. 10), который должен быть включен в состав модели.


Рис. 16 . Выбор типа контроллера в блоке Master модели.

5. Проверьте настройки конфигурации модели: Меню → Simulation → Configuration Parameters . В строке ввода System target file раздела Code Generation должен быть указан компилятор S-функций dspic.tlc (Рис. 17). Выбор dspic.tlc настраивает все остальные параметры конфигурации модели, включая шаг и метод интегрирования.


Рис. 17 . Выбор компилятора S-функций dspic.tlc для моделей PIC-контроллеров в разделе «основное меню → Simulation → Configuration Parameters → Code Generation».

6. Откомпилируйте модель tmp_Servo_ADC.mdl. Запуск компилятора показан на Рис. 18.


Рис. 18 . Запуск компилятора Simulink модели.

В результате успешной компиляции (сообщение: ### Successful completion of build procedure for model: Servo_ADC) в текущем каталоге создаются HEX файл для прошивки PIC контроллера и MCP проект среды MPLAB (Рис. 19).


Рис. 19 . Результаты компиляции модели.

Запуск модели в Matlab/Simulink выполняется в окне модели кнопкой, условное время моделирования устанавливается в строке:


Управление компиляцией Simulink моделей из среды MPLAB

Управление компиляцией Simulink модели можно выполнять командами раздела Matlab/Simulink среды MPLAB, например, в следующем порядке.

1. Разработайте модель PIC контроллера в Matlab/Simulink. Сохраните модель.
2. Запустите MPLAB.
3. Выберите MPLAB меню → Tools → Matlab/Simulink и новый раздел появится в составе меню.


4. В разделе Matlab/Simulink откройте Simulink модель, например, Servo_ADC, командой «Matlab/Simulink → Specify Simulink Model Name → Open → File name → Servo_ADC.mdl → Open». Команда Open запускает Matlab и открывает модель.

5. Откомпилируйте модель и создайте MCP проект командами Generate Codes или Generate Codes and Import Files. Перевод MDL модели в MCP проект выполняется TLC компилятором Matlab.
В результате создаётся проект MPLAB:

Со скриптами модели на языке Си.

6. Откройте проект: меню → Project → Open → Servo_ADC.mcp (Рис. 20).


Рис. 20 . Структура MCP проекта Simulink модели Servo_ADC.mdl в среде MPLAB.
Проект Simulink модели готов для редактирования, отладки и компиляции в машинные коды контроллера средствами MPLAB.

Подключение программатора PIC-KIT3

Узнать какие программаторы записывают бинарный код в конкретный микроконтроллер можно в разделе меню → Configure → Select Device среды MPLAB 8.92. Например, программатор PIC-KIT3 не поддерживает контроллер PIC12C508A (Рис. 21, левый рисунок), но работает с контроллером PIC12F629 (Рис. 21, правый рисунок).


Рис. 21 . Перечень программаторов для прошивки микроконтроллера.

Информацию об установленном драйвере программатора PIC-KIT3 можно запросить у менеджера устройств ОС Windows (Рис. 22).


Рис. 22 . Информация об установленном драйвере программатора PIC-KIT3.

Схема подключения микроконтроллера PIC12F629 к программатору PIC-KIT3 показана на Рис. 23.


Рис. 23 . Схема подключения микроконтроллера PIC12F629 к программатору PIC-KIT3.

Вывод PGM программатора для прошивки контроллеров PIC12F629 не используется. Наличие вывода PGM для разных типов PIC контроллеров показано на Рис. 24. Вывод PGM рекомендуется «притягивать» к общему проводу (GND), через резистор, номиналом 1К .


Рис. 24 . Выводы PGM PIC контроллеров.

Индикация светодиодов программатора Olimex PIC-KIT3 показана в ниже:

Желтый - Красный - Состояние программатора
Вкл - Выкл - Подключен к USB линии
Вкл - Вкл - Взаимодействие с MPLAB
Мигает - Включен постоянно - Прошивка микроконтроллера

Не следует подключать питание микроконтроллера VDD (Рис. 23) к программатору, если контроллер запитывается от своего источника питания.

При питании микроконтроллера от программатора на линии VDD необходимо установить рабочее напряжение, например, 5В программой MPLAB (Menu → Programmer → Settings → Power), как показано на Рис. 25.

Примечание. При отсутствии напряжения на линии VDD MPLAB IDE выдает сообщение об ошибке: PK3Err0045: You must connect to a target device to use


Рис. 25 . Установка напряжения VDD на программаторе PIC-KIT3 программой MPLAB IDE v8.92.

Если программатор не может установить требуемое напряжение, например, 5В при его питании от USB, в которой напряжение меньше 5В, MPLAB IDE выдает сообщение об ошибке: PK3Err0035: Failed to get Device ID. В этом случае, сначала необходимо измерить напряжение программатора - считать его в закладке меню → Programmer → Settings → Status, а затем установить напряжение (не больше измеренного) в закладке меню → Programmer → Settings → Power.


Рис. 26 . Измерение (слева) и установка (справа) VDD напряжения программатора PIC-KIT3 программой MPLAB IDE v8.92.

Пример MPLAB сообщения успешного подключения микроконтроллера к программатору по команде меню → Programmer → Reconnect показан на Рис. 27.


Рис. 27 . Сообщение MPLAB об успешном подключении микроконтроллера к программатору.

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


Рис. 28 . Подключение микроконтроллера в составе электронного устройства к программатору.

Заключение

Малоразрядные PIC-контроллеры имеют широкий диапазон питания, низкое потребление и малые габариты. Они программируются на языках низкого уровня. Разработка программ на языке графического программирования Simulink с использованием многочисленных библиотек значительно сокращает время разработки и отладки в сравнении с программированием на уровне ассемблера. Разработанные для PIC-контроллеров Simulink структуры можно использовать и для компьютерного моделирования динамических систем с участием контроллеров. Однако, из-за избыточности кода такой подход применим только для семейств PIC контроллеров с достаточными ресурсами.
Simulink Добавить метки Недавно решил собрать устройство на микроконтроллере фирмы PIC, но по не известным причинам у меня отказал программатор Extra-PIC . Скорее всего, сгорела микросхема МАХ232 , такое уже было один раз. Недолго думая, нашел в Интернете простенькую схему программатора, заточенного под IC-Prog и работающую через СОМ порт.
Плату необходимо отзеркалить при печати. Иначе панельки придется паять со стороны дорожек.


Далее просверлил отверстия и начал паять детали. Самой большой проблемой были стабилитроны. Стабилитроны стал искать на плате от ЭЛТ-монитора. Подписаны на плате они как ZD (Zener Diode). Естественно маркировка у них непонятная и неизвестно где и как искать. Чтобы определить, на сколько вольт стабилитрон можно собрать простую схемку.


Вольтметр достаточно точно покажет, на сколько вольт стабилитрон. Таким нехитрым способом нашел приблизительные по номиналу стабилитроны. Вместо 5,6В установил 6,2В, вместо 12,6В поставил 2 стабилитрона последовательно 6,2+6,2=12,4В .


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

Немного про красные пятачкИ у панелек. Эти ноги вообще не паяются у панелек. Полностью готовый девайс выглядит так:


Панельки решил не все паять, т.к. мне нужно было прошить только PIC16F628А . После того как спаял нужно настроить программу. Прошивать мы будем IC-Prog. Скачиваем программу , распаковываем из архива, все файлы должны быть обязательно в одной папке!

1) Если вы пользуетесь Windows NT, 2000 или XP, то правой кнопкой щёлкните на файле icprog.exe. "Свойства " >> вкладка "Совместимость " >> Установите "галочку" на "Запустить программу в режиме совместимости с: " >>
выберите "Windows 2000".

2) Запускаем программу. Если она уже на русском - ничего не нужно, переходите к шагу 3 .

Если программа на английском, то жмите "Settings " >> "Options " >> вкладку "Language " >> установите язык "Russian " и нажмите "Ok".
Согласитесь с утверждением "You need to restart IC-Prog now " (нажмите "Ok "). Оболочка программатора перезапустится.

3) Теперь нужно настроить программатор. Кликайте "Настройки " >> "Программатор ". Проверьте установки, выберите используемый вами COM-порт, нажмите "Ok ".


Для очень "быстрых" компьютеров возможно потребуется увеличить параметр "Задержка Ввода/Вывода". Увеличение этого параметра увеличивает надёжность программирования, однако, увеличивается и время, затрачиваемое на программирование микросхемы.

4) Только для пользователей Windows NT, 2000 или XP. Нажмите "Настройки " >> "Опции " >> выберите вкладку "Общие " >> установите "галочку" на пункте "Вкл. NT/2000/XP драйвер " >> Нажмите "Ok " >> если драйвер до этого не был устновлен на вашей системе, в появившемся окне "Confirm " нажмите "Ok" . Драйвер установится, и оболочка программатора перезапустится.

5) Нажмите снова "Настройки " >> "Опции " >> выберите вкладку "I2C " >> установите "галочки" на пунктах: "Включить MCLR как VCC " и "Включить запись блоками ". Нажмите "Ok ".

6) "Настройки " >> "Опции " >> выберите вкладку "Программирование " >> снимите "галочку" с пункта: "Проверка после программирования " и установите "галочку" на пункте "Проверка при программировании ". Нажмите "Ok ".


Готово, теперь программа полностью готова к работе с программатором. Подключаем наш программатор к СОМ порту, выбираем наш микроконтроллер в программе, открываем прошивку и программируем любые МК серии PIC. Удачи всем в работе с программатором и контроллерами!

15 ноября 2009 в 14:56

Программирование микроконтроллеров PIC16/PIC18 на языке C. Статья вторая. Базовые сведения о платформе. Первая программа

  • Программирование микроконтроллеров

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

Как я говорил ранее, пока что объяснять буду на базе МК PIC16F628A .
Обязательно качаем документацию на него. Рекомендую для поиска - alldatasheet.com
DataSheet - главный документ при разработке на базе МК.
Рекомендую распечатывать основные таблицы и разделы для удобства пользования.

Открываем ДШ.

Наиболее важные сведения о кристалле:
- максимальная рабочая частота - 20МГц;
- 2048х14 бит флеш-ПЗУ;
- 224 байта статической ОЗУ;
- 128 байт энергонезависимой ПЗУ;
- 16 доступных выводов;
- модуль приемо-передатчика;
- 3 таймера.

Данный кристалл - представитель так называемого среднего (Mid-range) семейства МК PIC.

Вкратце расскажу о том, что обязательно нужно понимать .

Память данных устройства разделена на 4 банка .
Банки содержат регистры специального назначения(SFR) и регистры общего назначения(GPR).
SFR - используются для управления устройством и его модулями.
Регистры обшего назначения представлены в виде статической ОЗУ, где мы можем хранить свои переменные.
Специальные регистры занимают по 32 начальные позиции в каждом банке.
В ДШ на страницах 18-21 показаны все регистры специального назначения. Распечатайте их - пригодится и не раз.

Это довольно таки объемная тема, и пропускать ее никак нельзя.
А с другой стороны нудноватая и неинтересная.
Пробуйте переосилить себя и прочитать об организации памяти и регистрах специального назначения в ДШ и у Шпака(упоминал в первой статье).

Порты ввода/вывода .

У данного устройства два порта: PORTA и PORTB.
Каждый вывод порта может использоваться непосредственно как простой вывод либо как вывод прочих модулей МК.
В самом начале ДШ вы должны были заметить что каждый вывод помимо основного названия, к примеру RB1, содержит еще и другое наименование RX и DT.
Вот здесь RX и есть второстепенная функция вывода - как вход приемо-передатчика.
Но пока мы не будем трогать периферийные модули устройства.

Каждый вывод порта может функционировать как вход или как выход.
Например, если нам нужно зажечь светодиод то вывод, к которому он подключен мы конфигурируем как выход, и выставляем на нем соответствующий уровень.
А вот если нам нужно подключить кнопку к порту и считывать факт нажатия, то здесь уже необходимо конфигурировать этот вывод как вход.
Конфигурация вход/выход осуществляется с помощью регистров TRIS .
Если в соответствующий бит регистра TRIS записать 1 то этот вывод станет входом, если 0 - выходом(видимо в связи с схожестью 1 и Input, а 0 и Output)
К примеру:

TRISA = 0; // Все выводы порта А - выходы
TRISB = 0xff; // Все выводы порта B - входы
TRISA5 = 1; // 5 вывод порта А - вход. Кстати не у всех компиляторов можно обращаться к каждому выводу непосредственно

Имена регистров можно посмотреть в папке «Папка HT-PICC\include» для соответствующего контроллера.

Для установления определенного уровня на выводе используем регистр PORT.
К примеру:

PORTA = 0; // Все выводы порта А с низким уровнем
PORTB = 0xff; // Все выводы порта B с высоким уровнем
RB5 = 1; // На пятом выводе порта B высокий уровень

Так. Достигаем момента когда неоходимо сделать отступление собственно по языку C.
Наверное напишу здесь небольшой пример. Скомпилируем. Запустим в Proteus, а о базовом языке C напишу в следующей статье.

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

Для начала подключим файл заголовков.


Мы не выбираем конкретную модель, а указываем pic.h. Если открыть его то увидим скрипт выбора конкретного файла исходя из выбранного устройства при создании проекта.
void main(void)
{
while(1);
}

Пишем в ее начале:
TRISA = 0; // Порт А - все выводы выходы
PORTA = 0; // с логическим нулем
TRISB = 0; // Порт B - все выводы выходы
PORTB = 0; // С логическим нулем

Пойдем в «Папка HT-PICC\samples\delay».
Скопируем оттуда delay.c и delay.h и вставим их в папку проекта.

Добавим строку в начале:
#include «delay.c»
Мы будем использовать функцию DelayMs(x) для создания паузы между переключениями светодиода.

Допустим светодиод подключен к RB0.
Для его переключения будет использоваться логическое исключающее «ИЛИ»:


В итоге код принимает вид:
#include #include "delay.c"

Void main(void)
{
TRISA = 0;
PORTA = 0;
TRISB = 0;
PORTB = 0;

While(1)
{
DelayMs(250); // Сделаем паузу в полсекунды
DelayMs(250);
RB0 ^= 1; // инвертируем вывод
}
}

Прошивка готова.
Теперь настроим конфигурационные биты.
Жмем Configure -> Configuration bits .
Снимаем галку «Configuration Bits set in code» , так как в коде мы ничего не выставляли.

Видим несколько пунктов.
Выставляем как на скрине.
Oscillator - HS - в качестве тактового генератора будет использоваться высокочастотный кварцевый резонатор.
WatchDog Timer - Off, если включить, то микроконтроллер будет периодически сбрасываться во избежание каких-либо зависаний. Нам такая возможность пока не нужна.
Power Up Timer - Enabled, МК будет находится в состоянии сброса, пока напряжение питания не достигнет необходимого порогового уровня.
Brown Out Detect - On, сброс МК, если произошло падение питающего напряжения ниже определенного уровня.
Low Voltage Program - Disabled, запрещаем использовать низковольтное внутрисхемное программирование МК. Здесь уже зависит от Вашего программатора.
Data EE Read Protect - Off, разрешаем чтение данных и EEPROM памяти МК.
Code Protect - Off, отключаем защиту кода в МК. Если выставить On - то невозможно будет считать программу из МК. Нам пока такая возможность не нужна.

Еще раз жмем F10.
Закрываем.

Прогоним программу в Proteus.
Запускаем Proteus ISIS.
Находясь в разделе Component mode жмем Pick from libraries и, пользуясь поиском, добавляем на форму компоненты:
- PIC16F628A;
- LED-RED;
- RES;

Два раза кликаем на каждом из них и выставляем параметры.
Для МК - выбираем файл прошивки *.hex из папки нашего проекта, и выставляем частоту 4МГц.
Для LED-RED выбираем Model type - Digital.
Для резистора выбираем сопротивление в 300 Ом.
Добавляем на форму Ground в разделе Terminals mode и соединияем как на скрине.

Жмем Play - светодиод должен мигать.

В следующей статье плотно пройдусь по языку C.
Вслед за ней будет статья по периферии контроллера и примеры кода для нее.
И за ней планирую рассказать о USB и PIC 18.
Вот такой план пока:-)

Когда делаются схемы, необходимо, чтобы кто-то или что-то контролировало выполнение необходимых действий. Для человека это довольно проблематично, так как приходится использовать значительное количество различных элементов, позволяющих контролировать их работу (транзисторы, резисторы, тиристоры, диоды, конденсаторы и прочие). Но все сложные и большие схемы можно контролировать с помощью контроллеров (микроконтроллеров). Что они собой представляют, будет рассказано на примере семейств РІС. Итак, для чайников? Какая их схема и где они используются.

Что собой представляет PIC-микроконтроллер

PIC-контроллер (или микроконтроллер) является средством автоматизации выполнения определённых действий с помощью заранее подготовленной программы. Особенностью представителей этой линейки продукции является легкость в программировании и доступность всех необходимых функций для работы. Обрисовывая его конструкцию, следует заметить, что в его составе присутствует только один кристалл кремния (это характерная особенность всех микроконтроллеров). Кроме него, PIC-контроллер имеет определённое количество ножек. Часть из них могут использоваться как логические входы, часть как выходы, остальные имеют двустороннее применение. Ножки могут быть или цифровыми, или аналоговыми.

Для работы подавляющего большинства РІС-контроллеров необходимо стабильное напряжение - 5В. Этого хватает, чтобы он мог работать в своём обычном режиме и выполнять поставленную перед ним программу. напрямую от компьютера невозможно. Для этой цели используется программатор.

Семейства контроллеров

PIC-контроллер не существует в единичном экземпляре. Компания производитель выпускает значительный ассортимент микроконтроллеров, каждый из которых имеет свои характеристики, возможности и потенциальные цели применения. Количество самих семейств довольно велико и зависит от классифицирующего признака, который берётся как основной. Поэтому стоит сообщить только об основной классификации, в которой есть всего три семейства: 8-, 16- и 32-битные. Они в свою очередь делятся на другие, но поскольку сами семейства не являются темой статьи, то о них и не будет вестись разговор.

Где применяется

Благодаря своей универсальности PIC-контроллер может быть применён практически где угодно. Сами микроконтроллеры можно встретить в холодильниках, телевизорах, стиральных машинках. Но линейка продукции РІС имеет ту особенность, что схемы на PIC-контроллерах популярны среди радиолюбителей и робототехников-самоучек. С их помощью можно легко настроить работу узла или всего приспособления. Способствует такой популярности разумная цена, легкость программирования и значительное количество учебного материала.

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

Программное обеспечение для работы с PIC-контроллером

Минимальное необходимое программное обеспечение - это блокнот. Но всё же в силу свободного распространения можно воспользоваться и предлагаемым от компании-производителя программным средством MPLAB. Точнее, линейкой программных средств (среды разработки, компиляторы) MPLAB. Благодаря политике компании он распространяется бесплатно, но имеет определённые ограничения. Так, при краткосрочной демонстрационной версии можно попробовать со всеми возможностями, но после её окончания функционал программы будет урезан. В полноценной программе присутствует значительный инструментарий, который позволяет легко создавать программы, удобно искать различные проблемные участки и проводить оптимизацию кода. В зависимости от версии может быть прекращена функция оптимизации кода или уменьшено количество контроллеров, поддерживаемых программой. Ради правды стоит сказать, что компания оставляет поддержку исключительно самым популярным представителям.

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

Создание программы для PIC-контроллера

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

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

Программирование с помощью программатора

Но как перенести разработанную программу в сам микроконтроллер? Как происходит программирование микроконтроллеров? Специально для этой цели существуют специальные устройства - программаторы. Они посылают микроконтроллеру сигналы, которые изменяют ячейки в памяти в соответствии с программой. Для начала процесса перенесения данных необходимо вставить микроконтроллер в программатор, а его, в свою очередь, подключить к компьютеру. Затем с помощью программного обеспечения следует запустить прошивку. Обычно программирование PIC-контроллеров продолжается от тридцати секунд до двух минут.

Виды программаторов

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

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

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

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

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

Схематические особенности

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

Часть 1 Оглавление

Введение

1 . Готовим инструменты

2 . Что такое микроконтроллер и как он работает

3 . Система команд PIC16F84A

4 . Что такое программа и правила ее составления. Пример создания

программы автоколебательного мультивибратора. Директивы.

5 . Интегрированная среда проектирования MPLAB IDE и работа в ней

7 . Пример создания программы (начало)

8 . Пример создания программы (продолжение)

9 . Работа в симуляторе. Отладка программы

10 . Как отследить выполнение программы

11 . Прерывания. Стек. Пример разработки программы с уходом в прерывания

12 . Организация вычисляемого перехода. Работа с EEPROM памятью данных

13 . Флаги. Работа с флагами. Как работает цифровой компаратор. Перенос и заем

14 . Пример задействования флага С в трехбайтном суммирующем устройстве.

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

15 . Введение в принцип построения подпрограммы динамической индикации.

Косвенная адресация

16 . Преобразование двоичных чисел в двоично-десятичные. Окончательное

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

17 . Принцип счета. Работа с таймером TMR0.

Принцип установки групп команд счета в текст программы

…………………………………………………………………

…………………………………………………………………

Введение

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

(поймете позднее)

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

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

Нужно было выбрать: либо "сложить лапки" и перейти в категорию постепенно "вымирающих" (дисквалифицирующихся),

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

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

Информационный "бардак" в этом "секторе" оказался настолько впечатляющим, что "волосы встали дыбом".

А куда деваться? "Отступать-то некуда, позади Москва".

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

Чего я натерпелся, знает только один Господь Бог: помощи никакой и пришлось рассчитывать только на свои силы.

После всех этих "мытарств", возник закономерный вопрос: "Это что же такое получается? Неужели каждый, кто вознамерится "посягнуть" на эти "железяки", должен обязательно "разбивать свой нос в кровь", водя им по "батарее"?

Неужели нельзя без этого обойтись или, по крайней мере, сделать этот процесс не столь болезненным?

Прикинул...

А ведь, ей Богу, можно!

Правда, придется "вспахать поле не паханное", но по совокупности причин, смысл в этом есть.

То, что Вы прочитаете в "Самоучителе...", есть итог указанного выше болезненного процесса, преподнесенный "на блюдечке с голубой каемочкой".

Принцип преподнесения информации - максимальная степень "разжеванности", так как "Самоучитель..." предназначен именно для начинающих.

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

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

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

Я вовсе не говорю, что это просто. Поработать придется, но и пугаться совсем не стоит, так

как "не так страшен черт, как его малюют".

Еще одна беда - недооценка огромного значения знания и умения применения на практике стратегии и тактики "мозгового штурма".

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

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

В своей работе я исхожу из того, что мозги являются не только логической "машиной", но и "вместилищем личности".

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

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

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

Для того чтобы понять огромный вред такого подхода к обучению, вспомните про Афганистан или Чечню и про участь тех необстрелянных и психологически неподготовленных ребят, которых "бросили в эту мясорубку".

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

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

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

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

В программировании, агрессивность есть достоинство, а не недостаток.

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

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

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

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

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

1. Готовим инструменты

Микроконтроллеры (и вообще все процессоры) изначально понимают только машинные коды, то есть некую совокупность нулей и единиц.

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

Так как, среди электронщиков, таких людей большинство, то на мой взгляд, все они согласятся с такой аксиомой: машинные коды полезны в "малых дозах".

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

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

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

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

Внутри м/контроллера находится "набор" модулей, каждый из которых многофункционален. Манипулируя весьма не слабыми возможностями этого "набора", можно реализовать миллионы разновидностей устройств.

Естественно, всем этим "хозяйством" нужно как-то "рулить". Эта "рулежка" и есть то, что называется программированием.

Если речь идет о больших "массивах" машинных кодов, то программирования напрямую (в машинных кодах) и врагу не пожелаешь: удовольствия никакого, да, чего доброго, и в "психушку" попасть можно (есть исключения - люди с выдающимися способностями и гении). Для того, чтобы обычные люди могли, без особого "напряга", заниматься составлением программ, придуманы различные языки программирования.

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

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

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

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

Что, первым делом, нужно сделать, например, русскому, который попал в Англию и собирается там жить?

Выучить английский язык.

При "въезде" в программирование, нужно сделать то же самое (задача даже существенно проще).

"Проматерь" всех языков программирования - ассемблер .

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

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

Минимальный "джентльменский" набор ассемблера для ПИКов составляет 35 команд. Реально же, наиболее часто, используются от 10 до 20 команд.

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

А выучить ассемблер очень даже стоит по причине того, что он, может быть, и не очень

"удобоварим", но именно на этом языке пишутся самые компактные по объему, быстрые и надежные программы, и по этой причине, серьезные программисты, работают

преимущественно в ассемблере.

Предупреждение: на этом этапе в ассемблер не лезть! Всему свое время. Пока достаточно общего представления (пусть "в мозгах уляжется").

Программы для ПИКов составляются преимущественно в ассемблере.

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

Об интегрированной среде разработки (проектирования): Она выполняет целый комплекс задач.

В ее специализированном текстовом редакторе, составляется текст программы.

Текст программы нельзя записывать в ПИК, так как он "понимает" только машинные коды. Следовательно, нужно преобразовать текст программы, с языка ассемблер, в машинные коды.

То есть, необходимо так называемое ассемблирование (компилирование) исходного текста программы, которое производится все в той же интегрированной среде разработки.

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

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

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

Ее возможности ими далеко не исчерпываются.

Интегрированная среда разработки для ПИКов называется MPLAB .

Эта программа (вернее набор программ) создана производителем ПИКов, то есть фирмой

Microchip Technology Inc.

В России, представителем этой фирмы является ООО "Микро-Чип" , которое имеет в Интернете свой сайт технической поддержки на русском языке http://www.microchip.ru (кстати, на этом сайте, в разделе "Начинающим", есть ссылка на мой сайт).

Лично я пользуюсь версией MPLAB 5.70.40 , что и Вам советую.

Это "старый, добрый конь, который борозды не испортит" и возможностей у него "выше крыши".

Главный недостаток этой версии - медленно работает (считает), но для начинающих, "реактивной" скорости и не нужно.

Главное ее преимущество - надежность работы.

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

В дальнейшем , я буду ориентироваться на версию 5.70.40 .

Примечание: дистрибутив MPLAB версии 5.70.40 (и еще 2 версии) имеется на компактдиске. Закачивать дистрибутив MPLAB нужно в папку с английским названием (папка мои документы или рабочий стол не подойдут), иначе будете иметь проблемы.

Лучше всего организовать ее в папке Program Files диска С .

Программа MPLAB является интегрированной средой разработки для ПИКов и содержит все необходимое как для написания и редактирования программы, так и для создания HEX-файлов, а также и для отладки программы.

Таким образом, необходимость в наличии отдельного текстового редактора для написания программы, отдельной программы - ассемблера для создания HEX-файла и отдельного отладчика программы (симулятора) отпадает, так как в MPLAB все это есть (и даже более того).

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

Следующий шаг - сборка программатора , так как HEX-файл программы, созданный в MPLAB , необходимо "превратить" в машинные коды, которые и будут записываться в ПИК (так называемая "прошивка").

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

Информацию по сборке программатора PonyProg Вы найдете в " Приложении № 1" .

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

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

Это вовсе не есть факт, но такое может быть.

Самое лучшее решение - применение для этих целей компьютера с тактовой частотой до 500мГц и операционной системы Windows95/98 .

Лично я сделал так: купил практически "за так" "древнюю старушку", обманул BIOS, пристегнув к родному винчестеру, "помощником", дополнительный винчестер на 8Гб, поставил Windows98 и включил "форсаж".

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

В моей "старушке" стоит почти на 2Гб подобного рода программ, в том числе и довольно-таки "навороченных", и ничего, прекрасно работает.

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

HEX - калькулятор: файл CALC32.rar прилагается (папка " Программы " ). Конвертер систем исчисления: файл BCONV32 прилагается (папка " Программы " ).

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

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

Конвертер систем исчисления Петра Высочанского: файл Hex-Dec_Bin.exe прилагается

(папка " Программы" )

При открытии, программа конвертера устанавливает английскую раскладку клавиатуры (то, что нужно).

Итак, все что необходимо для занятия программированием PIC контроллеров имеется. Пока, это не более чем красивые и интригующие "штучки" не вполне понятного предназначения.

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

Переходите к следующему разделу.

" Самоучитель по программированию PIC контроллеров для начинающих" http://ikarab.narod.ru E-mail: [email protected]

2. Что такое микроконтроллер, и как он работает

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

Это позволяет создавать очень простые (в схемотехническом отношении) и компактные устройства, выполняющие, тем не менее, достаточно сложные функции.

Иногда даже диву даешься: эта маленькая "штучка" заменяет целую "груду старого железа" (К555 и т.д.).

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

И в самом деле, компьютер в карман не положишь и от батареек его не запитаешь. Поэтому, во многих случаях, микроконтроллерам просто нет альтернативы. "Сердцем" микроконтроллера является арифметико - логическое устройство (АЛУ).

Проще всего его представить в виде банального калькулятора, кнопками которого управляет программа, написанная на языке ассемблер (то есть, программист).

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

И в самом деле, если нужно, например, сложить числа А и В , то в тексте программы сначала задаются константы А и В , а затем дается команда "сложить".

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

Если Вы туда "полезете", то "с ума сойдете", а микроконтроллер, по своей сути, есть тот же самый компьютер, но только простой.

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

Микроконтроллер можно представить себе как некий универсальный "набор" многофункциональных модулей (блоков), "рычаги управления" которыми находятся в руках программиста.

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

Вот здесь-то уже нужно знать, как "отче наше", каждую деталь и не жалеть на это "узнавание" времени.

Только таким образом пустую "болванку" (незапрограммированый ПИК) можно "заставить" выполнять какие-то "осмысленные" действия, результат большей части которых можно проверить в симуляторе MPLAB (об этом - позднее), даже не записывая программу в ПИК. Итак, необходим переход к "модульному" мышлению.

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

Давайте с ними разберемся и "разложим все по полочкам".

В качестве примера я буду использовать один из самых распространенных PIC контроллеров

PIC16F84A.

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

Энергонезависимая память.

Начнем с энергонезависимой памяти (память программ и память данных ). Информация, заложенная в энергонезависимую память, сохраняется при выключении питания, и поэтому именно в нее записывается программа.

То " место" энергонезависимой памяти, куда записывается программа, называется памятью программ .

Объем памяти программ может быть различен. Для PIC16F84A , он составляет 1024 слова . Это означает, что он предназначен для работы с программами, объем которых не превышает