Site Loader

ПРОГРАММИРОВАНИЕ PIC КОНТРОЛЛЕРОВ

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

 программатор PIC-контроллеров - принципиальная схема

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

ПРОГРАММИРОВАНИЕ PIC КОНТРОЛЛЕРОВ - фото платы

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

Как определить, на сколько вольт стабилитрон

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

Плата под ПРОГРАММИРОВАНИЕ PIC КОНТРОЛЛЕРОВ

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

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

программатор PIC-контроллеров самодельный

   Панельки решил не все паять, т.к. мне нужно было прошить только 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«.

выберите используемый вами COM-порт

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

4) Только для пользователей Windows NT, 2000 или XP. Нажмите «

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

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

6) «Настройки» >> «Опции» >> выберите вкладку «Программирование

» >> снимите «галочку» с пункта: «Проверка после программирования» и установите «галочку» на пункте «Проверка при программировании«. Нажмите «Ok«.

программа готова к работе с программатором

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

   Форум по МК

   Обсудить статью ПРОГРАММИРОВАНИЕ PIC КОНТРОЛЛЕРОВ


Программирование микроконтроллеров PIC. Часть 1. Необходимые инструменты и программы. Основы MPLAB

Итак, вы решили научиться программировать pic-контроллеры. Для начала поговорим о том, что вам для работы с этими контроллерами понадобится.

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

Программа для контроллера — это, как я уже сказал, набор машинных кодов, записанный в файле с расширением «hex» (здесь можно почитать про формат *.hex), который и нужно заливать в контроллер с помощью программатора. Никакого другого языка контроллер не понимает. Следовательно, нужна специальная программа, которая будет переводить текст программы, написанный на каком-либо языке программирования, в машинные коды. Наиболее удобными в этом плане являются интегрированные среды разработки (IDE — integrated development environment), поскольку они могут не только осуществлять перевод текста программы в машинный код, но и производить симуляцию её работы. Причём симуляцию можно проводить пошагово, при этом можно наблюдать состояние регистров или даже менять их состояние по своему желанию. Короче, интегрированные среды помимо, собственно, компиляции (перевода в машинные коды) предоставляют отличные возможности для отладки программы.

IDE, как и программаторов, существует много. Лично я пользуюсь MPLAB и вам рекомендую, по той простой причине, что MPLAB — это IDE от самого производителя PIC-контроллеров — фирмы Microchip, поэтому имеет отличную поддержку (в том числе на русском языке, что особенно приятно). С официального сайта Microchip можно скачать и сам этот пакет, и подробное описание по работе с ним. Если не нашли или ломает искать — ссылки для скачивания здесь, правда это уже не самая свежая версия.

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

MPLAB позволяет писать программы на двух языках: СИ и Ассемблер. Интернет просто ломится от разборок СИ-шников и ассемблерщиков, которые с пеной у рта доказывают друг другу, какой язык лучше. Я отношу себя к ассемблерщикам, поэтому, естественно, расскажу почему лучше именно Ассемблер.

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

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

Короче говоря, в случае с языком высокого уровня вы изучаете как какой-то дядя обозвал свои способы реализации необходимых вам функций и по каким правилам их надо записывать. В данном случае можно провести следующую аналогию: вы хотите поговорить с китайцем, но вам говорят: «Китайский слишком сложный язык, но есть один дядя в Болгарии, который 20 лет жил в Китае и отлично его выучил. А болгарский язык с русским очень похожи и русскому человеку он интуитивно понятен, так что выучите болгарский, а уж дядя переведёт.»

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

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

Что нужно сделать в MPLAB, чтобы получить желанную прошивку? Как я уже сказал — подробности читайте в руководстве к IDE MPLAB, оно на русском и там всё понятно (если не понятно — идём на форум), я же только кратко перечислю самое основное и дам некоторые рекомендации.

Итак, мы установили MPLAB, хотим написать в нём программу для контроллера и получить готовую прошивку.

Сначала нужно создать проект. Для каждого проекта рекомендую заводить отдельную папку, потому что, во-первых, в проект может входить несколько файлов, а, во-вторых, сам MPLAB создаст ещё несколько вспомогательных файлов (*.lst, *.err, *.cod, *.bkx). Если несколько проектов будут в одной папке, то легко можно запутаться какие файлы к какому проекту относятся. Короче, создаём для проекта новую папку, потом запускаем MPLAB и выбираем меню Project -> New Project…

В появившемся окошке, в проводнике справа, выбираем нашу папку, в левой части (в поле под надписью File Name) пишем название будущего проекта, например my1.pjt (не забываем указать расширение), и жмём ОК.

Появляется окно с названием Edit Project. Это менеджер проекта, в котором указываются параметры проекта (какие файлы и библиотеки нужно подключить к проекту, какой будет использоваться камень, будет ли использоваться симуляция и многое другое). Находим поле ввода с названием Development Mode. Справа от этого поля есть кнопочка Change… Нажимаем.

Открывается окошко с названием Development Mode, в котором мы видим кучу вкладок. На вкладке Tools ставим галочку рядом с MPLAB SIM Simulator (грех для отладки симулятором не пользоваться), в поле ввода Processor выбираем контроллер, с которым мы будем работать. На вкладке Clock указываем какая у нас будет частота генератора. Жмём ОК. На ошибку и предупреждение не обращаем внимания, это просто нам говорят, что пока не могут создать .hex (ну правильно, у нас пока и программы нет) и что при изменении настроек надо заново перекомпилировать проект (так мы ещё вообще ни разу не компилировали).

В поле ввода Language Tool Suite выбираем Microchip.

Нажимаем кнопку с названием Add Node… В появившемся окне, в проводнике справа выбираем папку проекта, в поле ввода слева пишем как будет называться файл с текстом программы на ассемблере, например my1.asm (не забываем указывать расширение), и жмём ОК. Всё, теперь мы подключили к проекту файл my1.asm (указали, что текст программы будет в этом файле).

На этом с Edit project заканчиваем, — нажимаем ОК.

Теперь нужно, собственно, создать файл с текстом программы (в менеджере проекта мы просто указали, что текст будет в таком-то файле, но фактически этот файл ещё не создан). Для этого идём в меню File и выбираем пункт New. Откроется окошко редактора с названием Untitled1. Выбираем меню File -> Save As…, в проводнике справа указываем папку проекта, в поле ввода File Name пишем название файла, которое мы указали в менеджере проекта, то есть в нашем примере это будет my1.asm. Если всё сделано правильно, то название окошка редактора поменяется с Untitled1 на \путь\my1.asm.

Вот и всё! Теперь осталось только набрать в окошке редактора текст программы, скомпилировать проект (меню Project->Build All) и, если в программе нет ошибок (что с первого раза бывает очень редко), то в папке проекта появится готовая прошивка (файл с расширением hex), которую можно заливать в контроллер.

  1. Часть 1. Необходимые инструменты и программы. Основы MPLAB
  2. Часть 2. Что такое микроконтроллер и как с ним работать
  3. Часть 3. Структура программы на ассемблере
  4. Часть 4. Разработка рабочей части программы. Алгоритмы
  5. Часть 5. Ассемблер. Организация циклов и ветвлений
  6. Часть 6. Как перевести контроллер в режим программирования и залить в него прошивку

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


Кликните на картинку для перехода на страницу описания.

text-x-csrcЗаготовки программ на Си.

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


catcatcat_pp_01

Управление светодиодом

(проект использует для программирования Serial Bootloader AN1310)


catcatcat_pp_02

Чтение состояния кнопок

(проект использует для программирования Serial Bootloader AN1310)

Чтение состояния кнопок 2 – простая функция удержания клавиши


catcatcat_pp_03

Измерение относительной влажности. Использование аналоговых датчиков фирмы honeywell (HIH-36xx, HIH-40xx)  (пример использует для программирования Serial Bootloader AN1310)


catcatcat_pp_04

Декодирование команд пульта дистанционного управления APA 1616 или использование модуля ССР для декодирования.


catcatcat_pp_07

Пример построения простого ШИМ на PIC-контроллерах с использование модулей CCP   (пример использует для программирования Serial Bootloader AN1310).


catcatcat_pp_05

Пример управления аналоговым сервоприводом на PIC-контроллерах с использование модулей CCP (пример использует для программирования Serial Bootloader AN1310).


catcatcat_pp_06

Измерение расстояния при помощи ультразвукового модуля HC-SR04


Catcatcat_dht-11_08DHT11 – Датчик влажности и температуры


Catcatcat_M41T56_01Часы реального времени  M41T56


Catcatcat_M41T56_01Среднее число интересный метод вычисление среднего.


PIC10Проекты на микроконтроллерах PIC10 – Емкостной сенсор, Датчик приближение, Датчик движения, Диммер для светодиодного освещения


stock_new-formula

В помощь конструктору – Мелкие программки в ME для упрощение расчетов. 


text-x-csrcОдин вариант функций для записи и чтения данных в EEPROM для 8-битных микроконтроллеров (которые имеют и перезаписываемую и память программ).


text-x-csrcВычисление CRC16


text-x-csrcеще будет..


Модуль CAPTURE/COMPARE/PWM – захват, сравнение, ШИМ

Формирование звука Сенсоры (измерения физических величин)

Цифровые датчики температуры

Аналоговые (модуль АЦП)

Измерение напряжения на потенциометре

Аналоговые датчики температуры

Измерение напряжения

Измерение емкости (модули CTMU, CPS)Емкостной сенсор прикосновения

Таймер TMR1

Передача данных (модули MSSP, EUSART)

Цифровые (работа с цифровыми портами ввода/вывода)


Пример минимального кода для загрузчика AN1310
Пример минимального кода для использования с программатором

Сравнение ШИМ

“Примеры построения кода программ для PIC-контроллеров”

I2C SPI UART LED индикаторы

011192Семисегментные индикаторы015819-18х8 знакосинтезирующие индикаторы LCD индикаторы013972illissi_lcd_11lcd1b

 

 

 

 


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

  • MCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМMCC PIC24 – модуль OUTPUT COMPARE – режиме ШИМ

    Во многих системах управления, для формирования управляющих сигналов требуется модуль ШИМ, он позволяет не только формировать импульсы заданной длительности, но и с применением обычного RC фильтра строить простые ЦАП. MCC …

  • Проект с использованием MCC часть 07Проект с использованием MCC часть 07

    Модуль PWM – широтно импульсная модуляция (ШИМ). ПИК контроллеры часто на борту имеют модули ШИМ. На их основе строятся многие узлы управления электро приводами. В нашем варианте мы будем его …

  • Проект с использованием MCC часть 05Проект с использованием MCC часть 05

    Эту часть назовем так как избавься от delay, там где а это реально не надо. Для это нам потребуется научиться использовать прерывания и работать с таймерами. Что такое таймер? Это …

  • MPLAB® Code ConfiguratorMPLAB® Code Configurator

    MPLAB ® Code конфигуратор (MCC) является свободно распространяемым плагином, это графическая среда программирования, которая генерирует бесшовный, легкий для понимания кода на Cи, чтобы вставить его в свой проект. Метки:MPLAB® Code …

  • REFERENCE CLOCK OUTPUT MODULEREFERENCE CLOCK OUTPUT MODULE

    REFERENCE CLOCK OUTPUT MODULE Модуль формирования опорного тактового сигнала Модуль опорного тактового сигнала обеспечивает возможность посылать сигнал синхронизации на тактовый опорный выходной контакт или контакты (CLKR) в зависимости от конфигурации выводов …

  • ESP8266  процедура получение данных даты и времени от серверов точного времени.ESP8266 процедура получение данных даты и времени от серверов точного времени.

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

  • LED модуль P10C4V12LED модуль P10C4V12

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

  • MPLAB X IDE – управление проектамиMPLAB X IDE – управление проектами

    Среда  MPLAB X IDE позволяет оперативно работать с несколькими проектами, например, если у вас в работе несколько проектов: Для того чтобы переключиться достаточно выбрать другой проект: Для выбора проекта существует …

  • Дисплей KD035C-3A подключение и управлениеДисплей KD035C-3A подключение и управление

    Дисплей KD035C-3A производиться компанией SHENZHEN STARTEK ELECTRONIC TECHNOLOGY CO.,LTD его характеристики Параметр Спецификация Единицы измерения Размер дисплея 70.08(H)*52.56(V) (3.5inch) mm Тип дисплея TFT active matrix Цветовая гамма 65K/262K colors Разрешение 320(RGB)*240 dots …

  • LATINO – открытый проект ch-светомузыкиLATINO – открытый проект ch-светомузыки

      Проект построенный на некоторых принципах ch-светомузыка. Проект ознакомительный предназначен, для самостоятельного построения простого и эффективного светосинтезатора. Вывод осуществляется на ВОУ собранной на драйверах HL1606. Для этого была применена светодиодная …



 

В записи нет меток.

Полезные программы для ПК — radiohlam.ru

Программирование и прошивка микроконтроллеров и микросхем памяти

MPLAB v5.70.40Популярная среда разработки для PIC контроллеров, прямая ссылка для скачивания с официального сайта
Размер: 13 Мбайтофициальный сайт программы: microchip.com
IC-Prog 1.05DПрограмма для прошивания контроллеров PIC, AVR и микросхем EEPROM
Размер: 482 Кбайтофициальный сайт программы: ic-prog.com
PonyProg2000 v.2.07cПрограмма для прошивания контроллеров PIC, AVR и микросхем EEPROM
Размер: 545 Кбайтофициальный сайт программы: lancos.com
Flash Loader DemonstratorБесплатная программа для прошивания контроллеров STM32 по USART интерфейсу с помощью встроенного фирменного bootloader-а.
Размер: 6,38 Мбайтофициальный сайт программы: st.com
I2C Programmer v.2.0Бесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора I2C EPROM. Скачать исходники (С++ Builder 6; 799 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 384 Кбайтофициальный сайт программы: radiohlam.ru
SPI Programmer v.2.0Бесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора SPI EPROM. Скачать исходники (С++ Builder 6; 918 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 430 Кбайтофициальный сайт программы: radiohlam.ru
DS2430 ProgrammerБесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора микросхем памяти DS2430. Скачать исходники (С++ Builder 6; 848 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 407 Кбайтофициальный сайт программы: radiohlam.ru
DS24B33 ProgrammerБесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора микросхем памяти DS24B33. Скачать исходники (С++ Builder 6; 828 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 406 Кбайтофициальный сайт программы: radiohlam.ru
DS2431 Programmer v.2.0Бесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора микросхем памяти DS2431. Скачать исходники (С++ Builder 6; 839 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 411 Кбайтофициальный сайт программы: radiohlam.ru

Проектирование печатных плат

Sprint Layout 6.0Программа для проектирования печатных плат, ссылка на демоверсию с официального сайта (там же можно скачать бесплатный viewer)
Размер: 6,2 Мбайтофициальный сайт программы: abacom-online.de
DipTrace 2.0.07Отличная программа для проектирования печатных плат (бесплатная версия), на официальном сайте также можно скачать библиотеки 3D-моделей
Размер: 16 Мбайтофициальный сайт программы: diptrace.com

Работа с COM-портом

RH_ComБесплатная программа для работы с COM-портом, ASCII и HEX режимы редактора. Скачать исходники (С++ Builder 6; 4,4 Мбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 583 Кбайтофициальный сайт программы: radiohlam.ru
RH_COM_testerБесплатная программа для тестирования COM-порта. Скачать исходники (С++ Builder 6; 4,4 Мбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 661 Кбайтофициальный сайт программы: radiohlam.ru
CP210xBaudRateAliasConfigПрограмма, позволяющая настроить USB-to-UART преобразователь на базе чипа cp2102 на нестандартные скорости обмена
Размер: 851 Кбайтофициальный сайт программы: silabs.com

Прочее

PIExpertSuite ссылка 1
PIExpertSuite ссылка 2
Пакет программ для проектирования импульсных блоков питания на микросхемах фирмы Power Integrations, прямые ссылки для скачивания с официального сайта
Размер: 27 Мбайтофициальный сайт программы: powerint.com
DiagramDesignerПростенькая, но удобная программка для рисования алгоритмов
Размер: 1,32 Мбайтофициальный сайт программы: meesoft.logicnet.dk
i2c_spi_1w_commonБесплатная программа, демонстрирующая общие возможности UART to I2C/SPI/1W шлюза. Скачать исходники (С++ Builder 6; 764 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 663 Кбайтофициальный сайт программы: radiohlam.ru
rh0004.dllБесплатная dll-ка для облегчения программирования под UART to I2C/SPI/1W шлюз. Скачать исходники (С++ Builder 6; 109 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 78 Кбайтофициальный сайт программы: radiohlam.ru
1W Key ReaderБесплатная программа, демонстрирующая возможности UART to I2C/SPI/1W шлюза по считыванию ключей-таблеток по однопроводной шине. Скачать исходники (С++ Builder 6; 662 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 497 Кбайтофициальный сайт программы: radiohlam.ru
USB ThermometerБесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве USB-термометра (совместно с DS18B20). В программу встроен http-сервер, что позволяет считывать температуру по сети с удалённого компьютера. Скачать исходники (С++ Builder 6; 704 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 515 Кбайтофициальный сайт программы: radiohlam.ru

Собственные разработки сайта radiohlam.ru

I2C Programmer v.2.0Бесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора I2C EPROM. Скачать исходники (С++ Builder 6; 799 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 384 Кбайтофициальный сайт программы: radiohlam.ru
SPI Programmer v.2.0Бесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора SPI EPROM. Скачать исходники (С++ Builder 6; 918 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 430 Кбайтофициальный сайт программы: radiohlam.ru
DS2430 ProgrammerБесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора микросхем памяти DS2430. Скачать исходники (С++ Builder 6; 848 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 407 Кбайтофициальный сайт программы: radiohlam.ru
DS24B33 ProgrammerБесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора микросхем памяти DS24B33. Скачать исходники (С++ Builder 6; 828 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 406 Кбайтофициальный сайт программы: radiohlam.ru
DS2431 Programmer v.2.0Бесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве программатора микросхем памяти DS2431. Скачать исходники (С++ Builder 6; 839 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 411 Кбайтофициальный сайт программы: radiohlam.ru
RH_ComБесплатная программа для работы с COM-портом, ASCII и HEX режимы редактора. Скачать исходники (С++ Builder 6; 4,4 Мбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 583 Кбайтофициальный сайт программы: radiohlam.ru
RH_COM_testerБесплатная программа для тестирования COM-порта. Скачать исходники (С++ Builder 6; 4,4 Мбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 661 Кбайтофициальный сайт программы: radiohlam.ru
i2c_spi_1w_commonБесплатная программа, демонстрирующая общие возможности UART to I2C/SPI/1W шлюза. Скачать исходники (С++ Builder 6; 764 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 663 Кбайтофициальный сайт программы: radiohlam.ru
rh0004.dllБесплатная dll-ка для облегчения программирования под UART to I2C/SPI/1W шлюз. Скачать исходники (С++ Builder 6; 109 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 78 Кбайтофициальный сайт программы: radiohlam.ru
1W Key ReaderБесплатная программа, демонстрирующая возможности UART to I2C/SPI/1W шлюза по считыванию ключей-таблеток по однопроводной шине. Скачать исходники (С++ Builder 6; 662 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 497 Кбайтофициальный сайт программы: radiohlam.ru
USB ThermometerБесплатная программа, демонстрирующая возможности работы UART to I2C/SPI/1W шлюза в качестве USB-термометра (совместно с DS18B20). В программу встроен http-сервер, что позволяет считывать температуру по сети с удалённого компьютера. Скачать исходники (С++ Builder 6; 704 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 515 Кбайтофициальный сайт программы: radiohlam.ru
parserБесплатный парсер файлов, содержащих данные трендов SCADA-системы Vijeo Citect от компании Schneider Electric. Скачать исходники (С++ Builder 6; 660 Кбайт).
Желающих допилить / перепилить / спросить / предложить / исправить / дополнить — жду на форуме, rhf-admin
Размер: 528 Кбайтофициальный сайт программы: radiohlam.ru

РадиоКот :: Начинающим программистам микроконтроллеров PIC

РадиоКот >Обучалка >Микроконтроллеры и ПЛИС >Несколько слов о PIC-контроллерах >

Начинающим программистам микроконтроллеров PIC

Автор: Владимир Д.
[email protected]

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

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

Примем тактовую частоту — Fтакт. = 4,096 МГц (стандартный кварц). Тогда время цикла составит t c = 1 / Fтакт. * 4 = 0,97656 мкс



INI_TMR				; инициализация  режима прерываний от  RTCC
		bsf STATUS,RP0	; выбираем  банк 1
		movlw b"00000100"
		movwf OPTION		; предделитель  для  RTCC   1 :  32
		bcf STATUS,RP0	;  банк 0
		movlw b"10100000"
		movwf INTCON		;  разрешено прерывание от RTCC
		movlw .96		;  загружаем  в  RTCC  предварительное число 96
		movwf TMR0

Получим время прерываний:
t i = t c * 32 * (256 — 96 = 160)
t i = 0,97656 * 32 * 160 = 5 000 мкс = 5 мс

Теперь, если в Вашу любую программу ввести бесконечный цикл (так называемый цикл ожи- дания прерывания), и окончание программы переводить на этот цикл, получим временную привязку к 5 мс.И после прерывания программа вернётся по адресу, указанном вектором прерываний (чаще это 04h).Для чего это можно использовать — смотри дальше.

Итак:



;
		org   0
		START		; начало выполнения программы после
;					включения питания
		org   04h		; а это адрес вектора прерывания, по которому
		main		; будет выполняться  основная  программа
;
START				; здесь обычно происходит обязательная  ини-
		INI_TMR		; циализация  портов, режимов, регистров и т.п.
		INI_PORTS
loop
		goto loop		; а это и есть  бесконечный цикл
;--------------------------------------------------

main
;               далее  идёт  тело  основной программы,
;		в которой обязательно надо создать программу обслуживания  прерываний от RTCC,
;            вызываемой   командой  CALL:

ServTMR
		btfsc INTCON,RTIF	;  проверяем  флаг срабатывания прерываний от RTCC  и
		call SET_TMR		;  если "да",то снова инициализируем  TMR0
		return		;  если "нет" -  возврат  в  место вызова  ServTMR в
					;  основной  программе main
;
SET_TMR		movlw .96
		movwf TMR0		; снова загружаем число 96
		bcf INTCON,RTIF		; сбрасываем флаг срабатывания
		retfie		; возврат  с разрешением прерываний  в ServTMR, а
					; затем в основную программу  main

Пример использования прерывания от RTCC для получения секундного импульса на одном из выходов , скажем, порта В — RB0 : Используем регистр Rsec, который должен быть ранее объявлен в в адресном поле рабочих регистров.



FORM_1S				; в каждом цикле,   а он  по прерыванию RTCC  длится
		incf Rsec,w		; 5 Мс,  увеличиваем регистр Rsec на 1 до  числа 200
		xorlw .200		; (5 мс * 200 = 1 сек)
		btfsc STATUS,z
		goto OUT_PORT		; при Rsec = 200  флаг  z = "1" и  переход на управление
					; выводом RB0 порта В
		return		; возврат в основную программу  main
;
OUT_PORT		btfss PORTB,0			; проверяем состояние вывода RB0
		goto OUT_ON		; если RB0 ="0", то  устанавливаем  в "1"
		bcf PORTB,0		; в противном случае - устанавливаем в "0"
		goto main		; возврат в основную программу
;
OUT_ON		bsf PORTB,0		; устанавливаем RB0 = "1"
		goto main

Таким образом на выходе RB0 порта В каждую секунду уровень сигнала будет изменяться то «0» то «1».

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

Рассмотрим примеры преобразований двоичного кода b2 в двоично — десятичный BCD и наоборот.

В 8 — bit регистре можно записать в двоичном коде число от 0 до 255 ( от b»00000000″ до b»11111111″ ). Преобразуем двоичное число в три разряда двоично — десятичного кода - «сотни», «десятки» и «единицы». Для этого будем использовать следующие регистры, которые должны быть заранее объявлены в адресном поле рабочих регистров :

Rbin — регистр хранения числа в двоичном коде b2
Rhan — регистр «сотни» кода BCD
Rdec — регистр «десятки» кода BCD
Rsim — регистр «единицы» кода BCD

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



CON_100		movlw .100		; вычитаем  100  из  Rbin  c  проверкой, что
		subwf Rbin,w		; результат  не  отрицательный. Флаг  "c" = 1 при
		btfss STATUS,c		; результате > или =  0, и  "c" = 0  при   


Обратное преобразование BCD - кода в b2. Используем те же регистры Rhan, Rdec, Rsim где находится число в BCD - коде, регистры RbinH - старший разряд и RbinL - младший разряд для чисел ( > 255) в коде b2 и вспомогательные регистры RM1 - "множимое" , RM2- "множитель".Для преобразования BCD в b2 нужно умножить "сотни" на 100, "десятки" на 10 и сложить всё вместе с "единицами" и с учётом переноса в старший разряд при необ- ходимости.Для умножения используем операцию сложения.



B2X_100		movlw .99		; преобразование  "сотен"
		movwf RM2		; множитель  =  кол - во сложений (100) минус  один
		movf Rhan,w
		movwf RM1		; множимое  =  "сотни"
loopX100	addwf RM1,w
 		btfsc STASTUS,c		; проверяем  перенос в  старший  разряд
		incf RbinH,f		; если есть перенос
		decfsz RM2,f		; контролируем  количество  сложений
		goto loopX100
		movwf RbinL		; результат  сложения  заносим  в  регистр  мл. разряда
;
B2X_10		movlw .9		; преобразование  "десятков"
		movwf RM2		; множитель  =  кол - во  сложений (10) минус один
		movf Rdec,w
		movwf RM1		; множимое = "десятки"
loopX10		addwf RM1,w		; здесь перенос можно не проверять, т.к. результат
		decfsz RM2,f		; всегда  


Конец преобразованиям и дальнейшее выполнение программы. В регистрах RbinL и RbinH получили 16 - bit число в коде b2.

Для выполнения арифметической операции деления по аналогии с умножением, рассмот- ренном выше, применяется операция вычитания. Допустим нам нужно произвести деление числа, находящегося в регистрах RHsum (старшие разряды) и RLsum (младшие разряды) - на делитель ( примем делитель не > 255) находящийся в регистре Rdel.

Результат будем заносить в регистры RHrez и RLrez (старшие и младшие разряды соот- ветственно) :


OP_DEL
		movf Rdel,w
		subwf Rlsum,w
		btfss STATUS,c		; проверяем  не отрицательный  ли  результат?
		goto DEF_carry		; если  "да", то  проводим  заём  из  ст. разряда
		incf RLrez,f		; подсчитываем  кол-во  вычитаний  с  учётом
		btfsc STATUS,c		; возможного  переноса  в  старший  разряд
		incf RHrez,f
		movwf RLsum		; восстанавливаем  остаток, что бы  не  потерять
		goto OP_DEL		; при  отрицательном  результате вычитания
;
DEF_carry
		movlw 0h
		xorwf RHsum,w		; всё  ли  заняли из старшего разряда  в младший?
		btfsc STATUS,z		; если  "да", т.е.  RHdel  =  0  и  в  OP_DEL  отри-
		goto OUT_ DEL		; цат. результат - конец  делению  и  выход
		decf RHsum,f		; если  "нет" - заём  из  старшего  разряда  и  про-
		incf RLrez,f		; должаем  дальше
		btfsc STATUS,c		; проверка  необходимости  переноса  в  ст.разряд
		incf RHrez,f
		goto OP_DEL

Как вам эта статья?

Заработало ли это устройство у вас?

Идеальная среда разработки для PIC — личный опыт / Habr

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

В среду железячников я попал в 2006 году на 4-м курсе учёбы в университете, когда пошёл на производственную практику в научно-технический центр, где, собственно, и работаю по сей день. В то время в нашей компании мейнстримом было использование Keil uVision2 для МК на базе C51 и ARM. Однако мне подсовывали простые задачи под PIC, вроде контроля и управления одним сигналом (кнопка вкл-выкл), и моей первой средой разработки были блокноты — бумажный и компьютерный, плюс книжки бумажные по PIC. Выглядела моя среда разработки примерно так:

Для компиляции файлов мне выдали экзешник компилятора и bat-файл, который использовался мной совершенно бездумно — даже не знаю, что за компилятор там был. В общем, суровые были времена…

Ах, если бы мне кто-то тогда подсказал, что есть такое чудо, как notepad++!

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

MPLAB IDE

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

В её состав входят:

  • CC18 и ещё какой-то компилятор, которые можно выбирать в настройках проекта;
  • хороший набор библиотечных функций;
  • подключаемые inc-файлы описания МК семейства PIC, заточенные под использование в ассемблере;
  • встроенный отладчик и программатор;
  • Но главное — поддержка языка Си — это был для меня глоток свежего воздуха!

Хотя, если присмотреться к этой среде разработки, её убогость и отсталость могут отпугнуть любого мало-мальски привыкшего к хорошим условиям программиста, но я тогда об этом не знал. Справку по встроенным библиотечным функциям надо открывать отдельно и искать, что, где и как называется. Для новичков — непосильная задача. Тем не менее, на тематических форумах люди до сих пор спрашивают, какой компилятор лучше использовать; кто-то так и продолжает использовать MPLAB IDE.
MikroC

Задачи для PIC мне подкидывали всё реже и реже, начали набирать обороты разработки с МК серии C51, ARM7 (не путать с ARMv7!), Cortex-M. Но иногда ко мне снова обращались за помощью в написании программ под PIC, а я в силу любопытства пробовал новые средства разработки.
К тому времени уже давно и активно программировал в Keil uVision3 — возвращаться к допотопному MBLAB IDE совершенно не хотелось. Так я познакомился с MikroC, который поставляется вместе с программаторами PICKit:

Набор плюшек почти такой же как в MBLAB IDE, но всё же побогаче:

  • свой собственный компилятор
  • встроенные библиотеки функций с удобным поиском и доступным описанием;
  • подключаемые h-файлы описания МК семейства PIC;
  • набор дополнительных внешних утилит
  • широкий спектр примеров с исходниками
  • встроенный отладчик и программатор;
  • встроенные вкладки открытых файлов;
  • навигация по функциям в файле

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

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

Однако история любит повторяться!

Через 3 года, в 2013 году, появилась задача разработать ПО по готовой КД, в которой был заложен PIC18F4680. Честно, я даже не знал, что среди PIC’ов бывают такие монстры, всегда имел дело только с мелочью!

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

Кстати, немного отвлекаясь от темы: только на этом проекте я в полной мере понял, что такое банки памяти в PIC, как они работают и какие ограничения накладывают на разработку ПО. К примеру, все банки у МК по 256 байт. И хоть убейся, но для PIC нельзя создать структуру, превыщающую по объёму эти 256 байт — ограничение всплыло наружу при реализации протокола обмена, ну да ладно, проехали…

К этому времени Keil uVision3 мне уже изрядно поднадоел, поскольку сложность проектов росла и мне не хватало имевшегося в Keil функционала. Где-то с 2011 года я освоил Eclipse, GCC, синтаксис makefile — и все свои проекты начал вести с использованием этих инструментов. К тому же, у меня уже был опыт применения связки Eclipse + SDCC для реализации проекта под C51 МК. После появления Keil uVision4 я его установил, протестировал пол-часика и снёс, ибо по удобству программирования он всё равно сильно отстаёт от Eclipse.

Eclipse + SDCC

В настоящее время Eclipse де-факто является стандартом в области разработки ПО для встраиваемых систем. Вот список IDE, основанных на Eclipse, от популярных брендов:
  • NXP LPCXpresso IDE
  • Freescale CodeWarrior
  • Xilinx Platform Studio
  • Texas Instruments CCS
  • Android Development Tools

Автоподстановка, всплывающие подсказки по автодополнению, макросы, затемнение неактивных участков кода, удобная навигация по коду и многое-многое другое, — я не буду всё перечислять, — многие разработчики встраиваемых систем совершенно не привыкли и не знают всех этих плюшек, значительно облегчающих жизнь:

Главной проблемой чистого Eclipse для разработки на C/C++ под МК является сложность вхождения в него железячных программистов, замена привычных инструментов, работающих после установки в 1-2 клика, на какие-то плагины, требующие настройки, или, что ещё хуже, на вручную написанные makefile — всё это требует значительных первоначальных усилий по чтению и изучению документации, поиску помощи и пособий для начинающих в интернете. Говорю как человек, имеющий опыт по переводу команды программистов-железячников на Eclipse.

Только для моей команды разработчиков

Коли прочитали эту статью — дайте знать, я хоть узнаю, как у нас читают профильные хабы на Хабрахабре


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

Также пришлось сделать ряд дополнительных телодвижений по настройке проектов под PIC — по умолчанию Eclipse понимает синтаксис GCC. Различные макросы и директивы, встроенные в другие компиляторы (будь то СС18 или SDCC), приходится разделять на этапе компиляции и на этапе индексации проекта. Чтобы при навигации в коде редактор не выдавал ложных ошибок на неизвестные директивы, к исходникам проекта подключается файл eclipse-syntax.h:

eclipse-syntax.h
#ifndef ECLIPSE_SYNTAX_H_
#define ECLIPSE_SYNTAX_H_

// keyword SDCC defined when compiling with SDCC compiler
#ifndef SDCC

	#ifdef __SDCC_PIC18F4680
		#error "SDCC not found, project compile will be with errors!"
	#endif

	// file not parsed through makefile - just for proper eclipse syntax
	#ifndef __CC18__
		#error "__CC18__ not found, use `-D__CC18__` in makefile for proper CC18 compilation!"
		#define near
		#define far
		#define rom
		#define ram
		#define _asm
		#define _endasm
		#define Nop()
		#define ClrWdt()
		#define Sleep()
		#define Reset()
		#define clrwdt
		#define nop

		#define __code
		#define __data
		#define __xdata

		#define __sfr
		#define __sbit

		#define __naked
		#define __wparam

		#define __bit char
		#define __at(num)

	#else	//	__CC18__ defined - compile stage!
	#endif	// __CC18__

	#define __inline

	#define __asm
	#define __endasm

	#define __interrupt(x)
	#define INTERRUPT(x)

	#define USING(x)

	#define CRITICAL

	#define CRITICAL_START
	#define CRITICAL_END

	#define _REENTRANT

#else	// if SDCC defined

	#define INTERRUPT(x) __shadowregs __interrupt (x)

	//#define USING(x) __using (x)
	#define USING(x)

	#define CRITICAL __critical

	#define CRITICAL_START __critical {
	#define CRITICAL_END }
#endif	// SDCC defined

#endif /* ECLIPSE_SYNTAX_H_ */


Кроме того, в SDCC у меня не получилось слинковать большой проект в готовый бинарник — потребовалось также настроить GPUtils, в состав которого входят gpasm, gpdasm, gplink и скрипты .lkr карт памяти МК PIC. Правда, из-за одного найденного мной бага в SDCC на этапе отладки кода я в итоге вернулся на CC18 компилятор и линковщик. Тем не менее, SDCC и GPUtils были полностью настроены — для страждущих привожу часть makefile, касающуюся опций запускаемых компиляторов и линковщиков CC18, SDCC, GPUtils:
Кусочки makefile
###########################################################
# project-specific compile options
###########################################################
# Project definitions
CHIP = 18F4680
DEFINES := -DPIC$(CHIP)
#DEFINES += -D__SDCC_PIC$(CHIP)	# use SDCC compiler
DEFINES += -D__CC18__	# use MPLAB CC18 compiler
#DEFINES += -DOPTIMIZE_BITFIELD_POINTER_GET	# SDCC memory optimize for bitfield structures
###########################################################
#  common part for all sdcc-based projects
###########################################################
	SDCC_BASE = c:/DevTools/SDCC
	CC		= "$(SDCC_BASE)/bin/sdcc.exe"
	LD		= "$(SDCC_BASE)/bin/sdcc.exe"
	ELF2HEX	= "$(SDCC_BASE)/bin/packihx.exe"
	HEX2BIN = "$(SDCC_BASE)/bin/makebin.exe"
	
###########################################################
#  common part for all MPLAB MCC18-based projects
###########################################################
	MPLAB_BASE	= c:/DevTools/CC18
	CC_MPLAB	= "$(MPLAB_BASE)/bin/mcc18.exe"
	AS_MPLAB	= $(MPLAB_BASE)/mpasm/mpasmwin.exe
	LD_MPLAB	= $(MPLAB_BASE)/bin/mplink.exe

###########################################################
# GPUtils used with SDCC for linking project
###########################################################
	GPUTILS_BASE = c:/DevTools/GNUPICutils
	GPASM	= "$(GPUTILS_BASE)/bin/gpasm.exe"
	GPDASM	= "$(GPUTILS_BASE)/bin/gpdasm.exe"
	GPLINK	= "$(GPUTILS_BASE)/bin/gplink.exe"

###########################################################
# C preprocessor flags for MPLAB MCC18 compiler
###########################################################
#optimization parameters (default = full optimization)
OPT_ENABLE_ALL	:= -O+	# Enable all optimizations (default)
OPT_DEBUG		:=-Ou- -Ot- -Ob- -Op- -Or- -Od- -Opa-
OPT 	:=$(OPT_ENABLE_ALL)
#OPT 	:=$(OPT_DEBUG)

CFLAGS_MPLAB := -p $(CHIP)
CFLAGS_MPLAB += -I $(MPLAB_INC_DIR)
CFLAGS_MPLAB += -nw=2066	# suppress Warning [2066] type qualifier mismatch in assignment
CFLAGS_MPLAB += -ml	# Large memory model
CFLAGS_MPLAB += -ls # large stack (can span multiple banks)
#CFLAGS_MPLAB += -scs # Enable default static locals
#CFLAGS_MPLAB += -sco # Enable default overlay locals (statically allocate activation records). Ignored if set --extended
CFLAGS_MPLAB += --extended	# generate extended mode code

COMPILE_MPLAB_STRING=$(CC_MPLAB) $(CFLAGS_MPLAB) $< -fo=$@ $(DEFINES) $(OPT)

AFLAGS_MPLAB := /y
AFLAGS_MPLAB += /rDEC				# set default radix HEX/DEC/OCT
AFLAGS_MPLAB += /l-				# disable listing file
#AFLAGS_MPLAB += /l$(OBJDIR_MPLAB)	# enable listing file
AFLAGS_MPLAB += /o	# specify path for object files
#AFLAGS_MPLAB += /o$(OBJDIR_MPLAB)	# specify path for object files
#AFLAGS_MPLAB += /q					# enable quiet mode 
AFLAGS_MPLAB += /d__LARGE__			# define symbol
AFLAGS_MPLAB += /p$(CHIP)			# set processor type

#ASSEMBLE_MPLAB_STRING=$(AS_MPLAB) $(AFLAGS_MPLAB) %<

# used linker script
LDFLAGS_MPLAB := $(CHIP)_g.lkr
# objects to compile
LDFLAGS_MPLAB += $(OBJS_MPLAB)
LDFLAGS_MPLAB += $(MPLAB_LIBS)
# specify chip for proper linking
LDFLAGS_MPLAB += /p$(CHIP)
# verbose mode operation
#LDFLAGS_MPLAB += /v
# generate report file for stack analysis
LDFLAGS_MPLAB += /g
# generate .LST file and no .COD file
LDFLAGS_MPLAB += /i
# do not invoke MP2COD (no .COD or .LST file)
LDFLAGS_MPLAB += /w
# link MPLAB libs
LDFLAGS_MPLAB += /l $(MPLAB_LIB_DIR)
# generate MAP file
LDFLAGS_MPLAB += /m $(EXEDIR)/$(PROJECT_NAME)_mplab.map
# set output file
LDFLAGS_MPLAB += /o $(EXEDIR)/$(PROJECT_NAME)_mplab.hex

###########################################################
# C preprocessor flags for SDCC v.3.3.0 compiler
###########################################################
# ----- processor selection -----
 CFLAGS := -m$(ARCH)
 CFLAGS += -p$(CHIP)
 
# ----- preprocessor options -----
 CFLAGS += $(INCS)
 CFLAGS += $(DEFINES)
 
# ----- verbose & dependancy generate -----
# CFLAGS += -M # generate dependencies
# CFLAGS += -E #
# CFLAGS += -C # dont discard comments
 
 CFLAGS += -c # dont link file (i.e. have multiple source files)
  
 CFLAGS += $(DEBUG)

# ----- common settings -----
#CFLAGS += --nostdinc # This will prevent the compiler from passing on the
					  # default include path to the preprocessor.
#CFLAGS += --nostdlib # This will prevent the compiler from passing on the
 					  # default library path to the linker.

#CFLAGS += --less-pedantic # Disable some of the more pedantic warnings.

 CFLAGS += --stack-auto # All functions in the source file will be compiled as reentrant.
						# It automatically implies --int-long-reent and --float-reent.
CFLAGS += --int-long-reent # Integer (16 bit) and long (32 bit) libraries have been compiled as reentrant.
CFLAGS += --float-reent # Floating point library is compiled as reentrant.

#CFLAGS += --no-peep
#CFLAGS += --funsigned-char # The default signedness for every type will be unsigned.
#CFLAGS += --cyclomatic # This option will cause the compiler to generate an information
 						# message for each function in the source file. The message contains
 						# the number of edges and nodes the compiler detected in the
 						# control flow graph of the function, and most importantly
						# the cyclomatic complexity.

# ----- optimization options -----
#CFLAGS += --nogcse # Will not do global subexpression elimination, this option may be used
 					# when the compiler creates undesirably large stack/data spaces to store
 					# compiler temporaries.
#CFLAGS += --noinvariant # Will not do loop invariant optimizations.
#CFLAGS += --noinduction # Will not do loop induction optimizations.
#CFLAGS += --nojtbound # Will not generate boundary condition check when switch statements
 						# are implemented using jumptables.
#CFLAGS += --noloopreverse # Will not do loop reversal optimization.
#CFLAGS += --nolabelopt # Will not optimize labels (makes the dumpfiles more readable).
 CFLAGS += --nooverlay # The compiler will not overlay parameters and local variables of any function.
 CFLAGS += --peep-asm # Pass the inline assembler code through the peep hole optimizer.
 #CFLAGS += --opt-code-speed # Optimize for code speed rather than size
 #CFLAGS += --opt-code-size # Optimize for code size rather than speed
 CFLAGS += --fomit-frame-pointer # Frame pointer will be omitted when the function uses
								 # no local variables.
 CFLAGS += --use-non-free #  Search / include non-free licensed libraries and header files

# ----- special options for pic16 port of SDCC -----
 CFLAGS += --pstack-model=large	# use stack model 'small' (default) or 'large'
# don't use extended instruction set - SDCCman, $4.6.20.1 Known Bugs
#CFLAGS += -y --extended 		# enable Extended Instruction Set/Literal Offset Addressing mode
#CFLAGS += --pno-banksel        # do not generate BANKSEL assembler directives
 CFLAGS += --obanksel=2         # set banksel optimization level (default=0 no)
 CFLAGS += --denable-peeps      # explicit enable of peepholes
 CFLAGS += --no-optimize-goto   # do NOT use (conditional) BRA instead of GOTO
 CFLAGS += --optimize-cmp       # try to optimize some compares
 CFLAGS += --optimize-df        # thoroughly analyze data flow (memory and time intensive!)
#CFLAGS += --preplace-udata-with=udata_shr # Place udata variables at another section: udata_acs, udata_ovr, udata_shr
#CFLAGS += --ivt-loc=           # Set address of interrupt vector table.
#CFLAGS += --nodefaultlibs      # do not link default libraries when linking
#CFLAGS += --use-crt=           # use <crt-o> run-time initialization module
#CFLAGS += --no-crt             # do not link any default run-time initialization module
#CFLAGS += --mplab-comp         # enable compatibility mode for MPLAB utilities (MPASM/MPLINK)
#CFLAGS += --asm=               # Use alternative assembler
#CFLAGS += --link=              # Use alternative linker
 CFLAGS += --debug-xtra         # show more debug info in assembly output
 CFLAGS += --debug-ralloc       # dump register allocator debug file *.d
 CFLAGS += --pcode-verbose      # dump pcode related info
 CFLAGS += --calltree           # dump call tree in .calltree file
#CFLAGS += --gstack             # trace stack pointer push/pop to overflow

###########################################################
# linker flags
###########################################################
#gputils (GNU PIC Utils) used to link objects and libs.
 GPLINK_FLAGS	= -c -m -w -r -I $(LIBDIR) -s $(GPUTILS_BASE)/lkr/$(CHIP)_g.lkr
 
#SDCC linker not used
 #LDFLAGS := -m$(ARCH)
 #LDFLAGS += $(DEBUG)
 #LDFLAGS += --profile

 #LDFLAGS += --code-size $(FLASH_SIZE) # Code Segment size
#LDFLAGS += --code-loc $(FLASH_LOC) # The start location of the code location, default value is 0

 #LDFLAGS += --iram-size $(IRAM_SIZE) # Internal Ram size

#LDFLAGS += --xram-loc $(XRAM_LOC) # The start location of the external ram, default value is 0
#LDFLAGS += --xram-size $(XRAM_SIZE) # External Ram size

#LDFLAGS += --stack-loc $(STACK_LOC) # By default the stack is placed after the data segment.
 									 # Using this option the stack can be placed anywhere in the
 									 # internal memory space of the 8051.

##############################################################################
# MPLAB CC18 compiler - linker 
$(HEX_MPLAB): $(OBJS_MPLAB) Makefile
	@echo "--- CC18 Linking objects to $(HEX_MPLAB) ..."
	@$(LD_MPLAB) $(LDFLAGS_MPLAB)

##############################################################################
# SDCC compiler - linker 
$(HEX): $(OBJS) Makefile
	@echo "--- SDCC Linking objects to $(HEX) ..."
	$(GPLINK) $(GPLINK_FLAGS) -o $(HEX) $(OBJS) $(LIBS)
	$(GPDASM) -p$(CHIP) $(HEX) > $(DASM)

Эпилог

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

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

  • CC18 для PIC
  • SDCC для C51
  • gnu-arm-embedded для ARM7 и Cortex-M
  • MinGW для x86

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

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

Дерзайте!

Программатор pic » RADIOSHEM.NET — Лаборатория Электроники

Программатор PIC контроллеров своими руками

 

 Данное устройство — так называемый JDM программатор, представляет собой наиболее простую конструкцию для прошивки контроллеров семейства PIC. Неоспоримые преимущества — простота, компактность, питание без внешнего источника данной классической схемы программатора сделали её очень популярной среди радиолюбителей, тем более что схеме уже лет 5, и за это время она зарекомендовала себя как простой и надёжный инструмент работы с микроконтроллерами. 

 

 

 

Принципиальная схема программатора для pic контроллеров:

 

 

 

 

  Питание на саму схему не требуется, ведь для этого служит COM порт компьютера, через который и осуществляется управление прошивкой микроконтроллера. Для низковольтного режима программирования вполне достаточно 5в, но могут быть не доступны все опции для изменения (фьюзы). Разъем подключения COM-9 порта смонтировал прямо на печатную плату программатора для PIC — получилось очень удобно.

 

 

Можно воткнуть плату без лишних шнуров прямо в порт. Программатор опробован на различных компьютерах и при программировании МК серий 12F,16F и 18F, показал высокое качество прошивки. Предложенная схема позволяет программировать микроконтроллеры PIC12F509, PIC16F84A, PIC16F628. 

 

 

 

 Для программирования используется WinPic800 — одна из лучших программ для программирования PIC контроллеров. Программа позволяет выполнять операции для микроконтроллеров семейства PIC: чтения, записи, стирания, проверки FLASH и EEPROM памяти и установку битов конфигураций. 

 

 

 

Различные типы микроконтроллеров PIC12C508, PIC12C509, PIC16C84 и микросхем памяти с интерфейсом I2C программируют, вставляя в разъём как показано на рисунке выше.

 

 
 СКАЧАТЬ 

alexxlab

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

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