Как записать программу на микросхему

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

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

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

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

🔨 ПРОГРАММИРУЕМ МИКРОСХЕМУ 🔧 ЗАПИСЫВАЕМ в ISD1820 с Помощью Динамика

Программирование микроконтроллеров. Компоненты

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

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

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

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

Принципы программирования микроконтроллеров

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

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

Первый этап. Определение задач, которые должно выполнять микроконтроллер.

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

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

Второй этап. Создание или выбор структурной схемы устройства на основе заданного микроконтроллера.

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

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

Третий этап. Создание программы для прошивки, на основе выбранного языка программирования.

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

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

Языки программирования микроконтроллеров

Языки программирования микроконтроллеров делятся на две группы:

  • низкого уровня
  • высокого уровня

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

Читайте также:
Что такое программа пандион

К языкам высокого уровня можно отнести такие языки программирования микроконтроллеров, как PL/M, C/C++, Java, Pascal, Basic и другие. При работе с такими языками происходит увеличение производительности за счет замены одного оператора несколькими машинными командами. Языки программирования высокого уровня требуют больших затрат памяти, так как объем такой программы достаточно большой. Преимущество их использования, это возможность работы программы на различных микропроцессорах, при использовании программ-трансляторов.

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

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

Наиболее популярными средами программирования микроконтроллеров являются: FlowCode(практически единственная среда, позволяющая программировать сразу несколько видов микроконтроллеров PIC, AVR, ARM),AlgorithmBuilder (графическая среда программирования AVR микроконтроллеров),CodeVisionAVR, IAR Systems, CodeComposerStudio (CCS), Energia, Virtualbreadboard, FlashMagic, MPLAB, WinAVR, AtmelStudio.

Источник: alma-engineering.ru

Как скомпилировать и записать код на микросхему AVR в Linux / MacOSX / Windows?

Это краткое руководство для начинающих, которое направлено на то, чтобы показать, как установить инструменты, скомпилировать код с помощью avr-gcc и отправить его в микроконтроллер с помощью avrdude.

Тестер транзисторов / ESR-метр / генератор
Многофункциональный прибор для проверки транзисторов, диодов, тиристоров.

Оно также знакомит с основами автоматизации этой задачи, помещая все инструкции в Makefile. Файлы примера ( main.c, main.bin, main.hex, Makefile) упакованы в архив который можно скачать по ссылке в конце данной статьи.

1. Установка avr-gcc и инструментов

Для компиляции исходного кода вашей прошивки на C и/или C ++ вам понадобится компилятор gcc-avr, библиотека C avr-libc и avrdude. Что очень полезно, существуют полные и простые в установке пакеты для всех основных платформ.

Linux, Ubuntu

Ubuntu предоставляет пакеты, поэтому вы можете просто установить их с помощью этой команды:

$ sudo apt-get install gcc-avr avr-libc avrdude

Mac OSX

Загрузите AVR MacPack. В образе диска MacPack есть установщик, который все сделает за вас.

Windows

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

Блок питания 0. 30 В / 3A
Набор для сборки регулируемого блока питания.

2. Компиляция и запись кода

Теперь, когда у вас установлен компилятор, следующий шаг — скомпилировать простой исходный код в файл .BIN, затем сгенерировать файл Intel .HEX и, наконец, записать этот файл .HEX на микросхему AVR с помощью программатора для AVR.

Пример кода

Вот пример содержимого файла main.c. Код ничего не делает, кроме зацикливания в бесконечном цикле, но это для примера.

int main(void)

Компиляция

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

avr-gcc -Wall -g -Os -mmcu=attiny13 -o main.bin main.c

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

avr-size -C main.bin

AVR Memory Usage
—————-
Device: Unknown
Program: 40 bytes
(.text + .data + .bootloader)
Data: 0 bytes
(.data + .bss + .noinit)

Создание .HEX

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

Итак, следующий шаг — преобразование информационной формы .BIN в файл .HEX. Утилита GNU, которая делает это, называется avr-objcopy.

avr-objcopy -j .text -j .data -O ihex main.bin main.hex

Программирование

Утилита под названием avrdude может программировать микропроцессоры, используя содержимое файлов .HEX, указанных в командной строке.

С помощью приведенной ниже команды файл main.hex будет записан во флэш-память. Параметр -p attiny13 позволяет avrdude узнать, что мы работаем с микроконтроллером ATtiny13. Другими словами — эта опция определяет устройство.

Полный список поддерживаемых чипов можно найти здесь. Обратите внимание, что также допустимо использовать и полные имена (т. е. t13 равно attiny13).

avrdude -p attiny13 -c usbasp -U flash:w:main.hex:i -F -P usb

И вуаля! Чип запрограммирован.

3. Make и makefiles

Теперь мы можем автоматизировать этот процесс, создав Makefile и поместив туда наши команды. Структура Makefile очень проста, и дополнительную информацию о ней можно найти здесь . Утилита make автоматически считывает файл Makefile в папке, в которой вы ее запускаете. Взгляните на готовый пример:

Читайте также:
Что такое программа в фигурном катании

MCU=attiny13 F_CPU=1200000 CC=avr-gcc OBJCOPY=avr-objcopy CFLAGS=-std=c99 -Wall -g -Os -mmcu=$ -DF_CPU=$ -I. TARGET=main SRCS=main.c all: $ $ -o $.bin $ $ -j .text -j .data -O ihex $.bin $.hex flash: avrdude -p $ -c usbasp -U flash:w:$.hex:i -F -P usb clean: rm -f *.bin *.hex

Если вы запустите в терминале простую команду make , будет выполнена только метка «all». При запуске (sudo) make flash будет выполнена метка «flash» и так далее.

make

avr-gcc -std=c99 -Wall -g -Os -mmcu=attiny13 -DF_CPU=1200000 -I. -o main.bin main.c
avr-objcopy -j .text -j .data -O ihex main.bin main.hex

make flash

avrdude -p attiny13 -c usbasp -U flash:w:main.hex:i -F -P usb

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

avrdude: Device signature = 0x1e9007
avrdude: NOTE: «flash» memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file «main.hex»
avrdude: writing flash (40 bytes):

avrdude: 40 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex contains 40 bytes
avrdude: reading on-chip flash data:

avrdude: verifying …
avrdude: 40 bytes of flash verified

avrdude: safemode: Fuses OK (H:FF, E:FF, L:6A)

avrdude done. Thank you.

Резюме

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

  1. $ avr-gcc -Wall -g -Os -mmcu=attiny13 -o main.bin main.c
  2. $ avr-objcopy -j .text -j .data -O ihex main.bin main.hex
  3. $ avrdude -p attiny13 -c usbasp -U flash:w:main.hex:i -F -P usb

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

Скачать файлы примера (2,1 KiB, скачано: 410)

Источник: fornk.ru

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

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

Первые микроконтроллеры появились в 60-х годах. Автоматизированные системы до этого времени обычно строились на основе реле. Теперь программируемые логические контроллеры распространены повсеместно. Однако программирование микроконтроллеров — процесс нередко сложно воспринимаемый. Поэтому рассмотрим, как программировать контроллер на примере широко известной серии ПЛК (PLC — Peripheral Interface Controller) — продукта компании Microchip Technology Inc.

  • 1 Общий взгляд на устройства ПЛК
  • 2 Программирование микроконтроллеров PIC 12 / PIC 16
  • 2.1 Внутрисхемное программирование микроконтроллеров PIC
  • 2.2 Рекомендации относительно процедуры программирования
  • 2.3 Сигналы ICSP соответствующие контактам PIC 12Fxxx / 16Fxxx

Общий взгляд на устройства ПЛК

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

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

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

  • память,
  • входные порты,
  • выходные порты.

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

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

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

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

Эффективность программы на основе макросов столь же эффективна, как и запись программы на языке «C». Компилятор отвечает за создание соответствующих подстановок для генерации кода, который передаётся в память программы микропроцессора или микроконтроллера.

Программирование микроконтроллеров PIC 12 / PIC 16

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

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

Помимо рабочего напряжения, микроконтроллерам требуется ещё три сигнала:

  1. Программируемое напряжение (около 13В).
  2. Таймер программирования (ICSPCLK).
  3. Данные (ICSPDAT).

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

Читайте также:
Программы для работы с прошивками авто

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

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

Схема простого программатора микроконтроллеров PIC

Внутрисхемное программирование микроконтроллеров PIC

Разъём внутрисхемного программирования (ICSP) предоставляет возможность запрограммировать микроконтроллер непосредственно в рамках прикладной схемы.

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

Применение разъёма ICSP позволяет избежать рисков при перемещении микроконтроллера PIC между различными гнездами (например, в случае изгиба контактов или воздействия на микроконтроллер электростатических разрядов). Также работа с разъёмом ICSP обеспечивает экономию времени.

ICSP соединитель под цепи программирования

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

Основные условия программирования:

  • время переключения напряжения программирования «0 – 13В» составляет несколько микросекунд;
  • полный размах напряжения сигналов таймера и данных достигается в течение одной микросекунды;
  • вывод сигнала PGM остаётся низким всё время программирования.

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

Рекомендации относительно процедуры программирования

Не рекомендуется подключать активные цепи к линии внешнего (основного) сброса (MCLR – Microcontroller Line Reset). Если сигнал MCLR используется для сброса PIC, следует устанавливать резистор номинальным сопротивлением более 56 кОм между выводами MCLR и подачи напряжения питания.

Рекомендуется в цепь резистора включать конденсатор небольшой ёмкости — менее 100 пФ со смещением на землю (вывод GND).

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

Схема доработок программатора PIC

Этот вариант может иметь место, если схема содержит собственный стабилизатор напряжения питания и оснащается развязывающим конденсатором большой ёмкости. Модуль программатора, предназначенный под напряжение питания 3,3В, не в состоянии заряжать конденсатор достаточно быстро, а для программирования PIC требуется не менее 4,5В.

Между тем вариант изолирования можно исключить, если в схеме используется диод Шоттки. Чтобы удерживать вывод перевода микроконтроллера в режим программирования (PGM) на низком уровне, рекомендуется подключать этот вывод к земле через резистор номиналом от 2,2 кОм до 10 кОм.

Всегда рекомендуется таймер включения питания вносить в «слово» конфигурации. Задержка таймера более 40 мс даёт достаточно времени для стабилизации напряжения питания перед началом любой операции. Такой шаг позволяет избежать непреднамеренного выполнения программы до входа в режим программирования.

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

Для обеспечения повторного программирования микроконтроллера PIC в условиях напряжения питания ниже 4,5В, область памяти необходимо отключить от защиты. Это обусловлено применением «Chip Erase», единственного способа удаления кода или защиты данных, которого требуют практически все микроконтроллеры PIC с напряжением питания выше 4,5В.

Сигналы ICSP соответствующие контактам PIC 12Fxxx / 16Fxxx

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

Таблица контактных групп

Следующие схемы показывают, как подключать сигналы программирования к микроконтроллерам PIC 12Fxxx / 16Fxxx:

Схемы распиновки для отдельных чипов

Программирование микроконтроллеров + фирменные средства

Существует солидная группа фирменных программаторов для микроконтроллеров семейства PIC. Наиболее известные аппаратные средства:

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

На основе информации: Uolsinectis

КРАТКИЙ БРИФИНГ

Z-Сила — публикации материалов интересных полезных для социума. Новости технологий, исследований, экспериментов мирового масштаба. Социальная мульти-тематическая информация — СМИ .

Источник: zetsila.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru