Разъем для программатора распиновка

Работа с микроконтроллерами: прошивка программатором и чистый «Си»

В этой статье я расскажу о том, как программировать микроконтроллеры без использования Arduino. Мы будем использовать программатор AvrISP STK500 для программирования контроллера ATtiny84.

Нам понадобится

Подключаем питание

Arduino мы не используем, поэтому обо всем нам придется думать самостоятельно. И первое, с чем необходимо разобраться — питание. Мы будем использовать преобразователь L7805, обладающей следующими характеристиками:

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

Помимо самого преобразователя, мы видим еще 2 конденсатора — входной Сi и выходной Сo. Входной конденсатор необходим для того, чтобы сгладить пульсации на входе в случае удаленности L7805 от источника. В нашем случае длина соединительных проводов не будет превышать 15 см, поэтому входного конденсатора у нас не будет. Зато будет выходной, поскольку мы хотим «кормить» наш контроллер стабильным питанием.

Распиновка

Необходимо знать назначение ножек преобразователя. Это описано на 2-й странице даташита.

Схема

С учетом всего вышеописанного, получается схема для организации питания.

Программатор

В качестве программатора мы использовали AvrISP STK500 от Seeed Studio. Для его работы под Windows и Mac OS необходимы драйверы. Их можно скачать с официального сайта. Пользователям Linux устанавливать ничего не нужно — программатор будет сразу готов к работе.

Подключение к контроллеру

Распиновка разъема программатора такова:

Важно! Это распиновка разъема программатора, если смотреть на него сверху (отверстиями от себя). Не перепутайте!

Разъем программатора необходимо подключить к микроконтроллеру. Можно использовать как 10-пиновый разъём, так и 6-пиновый. Без разницы. Соединим проводами соответствующие пины, т.е:

10-пиновый ICSP ATtiny84
Reset 5 4
MOSI 1 7
MISO 9 8
SCK 7 9

Прошивка

Напишем код прошивки на чистом «C», которая заставит светодиод мигать. Использование ШИМ-сигналов и считывание аналоговых сигналов на чистом «C» не так тривиальна, и может являться темой отдельной статьи, поэтому остановимся пока на простейшем примере.

После скетчей Arduino, код малопонятен, правда? Ничего, сейчас я объясню, что да как. В первых двух строчках мы подключаем необходимые библиотеки, чтобы воспользоваться такими штуками, как DDRA , PORTA , _delay_ms .

Что же такое DDRA ? Это регистр микроконтроллера, управляющий направлением работы порта А. Он содержит в себе 8 бит. Если установить какой-то бит в 1, то пин с соответствующим номером станет выходом.

PORTA — тоже регистр, но он содержит в себе данные порта А. Если мы хотим на вывод номер 2 записать логическую единицу, то мы должны поместить 1 в соответсвующий бит регистра.

А _delay_ms — функция задержки. Исходя из этого можно составить таблицу соответствия:

Arduino C
Направление pinMode(led, OUTPUT); DDRA = 1
Значение digitalWrite(led, HIGH); PORTA = 1
Задержка delay(1000); _delay_ms(50);

Однако, самым важным различием кода является то, что в программе на С нет разделений функций setup и loop . За все это отвечает функция int main(void) . И она выполняется всего 1 раз! А мы хотим, чтобы наш светодиод моргал не один раз, а постоянно. Как раз для этого и используется бесконечный цикл while (1==1) .

Поэтому легко сделать вывод, что этот цикл и есть аналог функции loop() в Arduino. А то, что до него — аналог функции setup() .

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

Mac OS X

Первым делом необходимо скачать и установить CrossPack for AVR Development. Это даст нам все необходимые инструменты. CrossPack состоит из двух частей.

Первая нам нужна для написания кода и создания файла прошивки, а вторая — для заливки прошивки в контроллер.

Проект создается в три шага.

В результате будет создано следующее дерево файлов.

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

Пройдемся по строкам:

Это автосгенерированный make-файл, поэтому нам необходимо вручную его подправить. Править будем строку DEVICE у нас же микроконтроллер attiny84 и строку FUSES . А вот с ней все сложнее. Fuse-биты, или просто «фьюзы» — два (иногда три) особых байта, в которых содержится фундаментальая конфигурация работы контроллера. Очень важно правильно их задать.

Внимание! Задание неверных fuse-битов может привезти к тому, что микроконтроллер перестанет работать и вернуть его к нормальной жизни может быть либо очень сложно либо невозможно! Воспользеумся сайтом AVR Fuse Calcuator.

Сначала из выпадающего списка выберем нужный нам контроллер (ATtiny84).

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

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

Внесем изменения в Makefile.

Прошивка

Она происходит в 2 этапа.

Сначала необходимо перейти в папку firmware и выполнить команду make . Если ошибок нет, то результат выполнения команды будет таким:

Эта команда сделает из нашего исходника main.c файл, пригодный для заливки в контроллер — main.hex .

Второй этап — как раз заливка прошивки. Делается это с помощью команды make flash . Ее нормальный вывод выглядит следующим образом:

Все, прошивка контроллера завершена.

Windows

Здесь все проще.

Первым делом необходимо скачать и уствновить среду разработки для AVR — Atmel AVR Studio 4. А вторым — Atmel AVR Toolchain.

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

Затем указать имя, расположение и то, что мы хотим использовать С ( GCC ).

Третий шаг — настройка отладчика.

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

В результате общий вид среды разработки выглядит вот так:

Теперь необходимо подключиться к программатору. Делается это с помощью нажатия на кнопку con .

В качестве Platform выбираем STK500 , а в Port — Auto . Затем нажимаем Connect.

Если все правильно, то в открывшемся окне выбираем вкладку Main и нажимаем в ней на кнопку Read Signature .

Строка Reading signature from device .. 0x1E, 0x93, 0x0C .. OK! говорит о том, что все хорошо и сигнатура успешно прочиталась. Сигнатура — это своего рода позывной микроконтроллера, которым он сообщает собственную модель.

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

Теперь нажмем Build → Build . Это заставит программу скомпилироваться. Прошьем контроллер с помощью кнопки Write Flash Memory Using Current Settings — это заставит скомпилированную программу загрузиться в память микроконтроллера.

Заключение

Мы собрали простейшее устройство мигалку, но сделали это на низком уровне. С использованием программатора и «продвинутой» среды разработки, а не Arduino.

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

Источник

Разъемы для подключения программатора

Существует два варианта подключения программатора к микроконтроллеру:
1) непосредственно в панельке программатора
2) внутрисхемно

В первом случае микроконтроллеры программируются перед установкой в устройство, для перепрограммирования требуется их извлечение из устройства, установка в панельку программатора, извлечение из программатора, установка в устройство…. и т.д. и т.п. по замкнутому кругу. Такой метод возможен только при использовании DIP-корпусов. Помимо временных затрат, при таких манипуляциях можно сломать “ножку” микроконтроллера или, что еще хуже, ноготь :) .

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

Микросхемы, имеющие возможность внутрисхемного программирования, обычно поддерживают режим программирования по последовательному каналу. В этом режиме программирование осуществляется через последовательный интерфейс SPI. Для подключения программатора к устройству используются три линии интерфейса: SCK (тактовый сигнал), MOSI (вход данных) и MISO (выход данных), а также линия сброса – RESET, плюс и минус питания (VCC и GND). Программирование осуществляется путем посылки 4-байтных команд на вывод MOSI микроконтроллера. Результат выполнения команд чтения снимается с вывода MISO.

В таблице 1 приведены выводы микроконтроллеров, необходимые для внутрисхемного программирования (при программировании микросхемы некоторые программаторы могут генерировать тактовые импульсы, которые подаются на вывод XTAL 1).

Контроллер Pins (DIP) Vcc GND Reset SCK MOSI MISO XTAL 1
ATtiny12 8 8 4 1 7 5 6 2
ATtiny15 8 8 4 1 7 5 6 внутр
AT90S1200 20 20 10 1 19 17 18 5
AT90S2313 20 20 10 1 19 17 18 5
AT90S2323 8 8 4 1 7 5 6 2
AT90S2343 8 8 4 1 7 5 6 2
AT90S4433 28 7 8 1 19 17 18 9
AT90S8515 40 40 20 9 8 6 7 19
AT90S8535 40 10 11 9 8 6 7 13
ATmega8 28 7 8 1 19 17 18 9
ATmega16 40 10 11 9 8 6 7 13
ATmega32 40 10 11 9 8 6 7 13
ATmega161 40 40 20 9 8 6 7 19
ATmega162 40 40 20 9 8 6 7 19
ATmega163 40 10 11 9 8 6 7 13
ATmega323 40 10 11 9 8 6 7 13
ATmega8515 40 40 20 9 8 6 7 19

Наиболее распространены 4 типа разъемов, через которые микросхема подключается к программатору. Это IDC10 с разводкой Altera (ByteBlaster), IDC10 с разводкой Atmel (STK200/300), IDC6 с разводкой Atmel и штыревые разъемы PLS-6. Распиновка этих разъёмов приведена в таблице 2.

IDC10 (Atmel) IDC6 (Atmel) PLS-6 1 SCK MOSI MISO GND 2 GND Vcc Vcc Vcc 3 MISO NC SCK Reset 4 Vcc GND MOSI SCK 5 Reset Reset Reset MISO 6 ключ GND GND MOSI 7 NC SCK — — 8 XTAL 1 GND — — 9 MOSI MISO — — 10 GND GND — —

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

В распространенных программаторах применяются следующие разъемы:

Atmel10:
BM9010 — USB внутрисхемный программатор AVR
BM9009 — LPT Внутрисхемный программатор AVR
AVR / 89S совместимый с AVR910 (Prottoss)

Atmel6:
NM9211 — Программатор AT89S/AT90S фирмы ATMEL

ПС. в некоторых моделях программатора вывод 3 разъема Atmel10 подключаются к источнику тактирования. То есть в случае, если вы разрабатываете схему на внутреннем RC-генераторе, имеет смысл завести на Pin3 ножку Xtal1, чтобы если кто-то, по ошибке, установит фьюз на работу с кварцем (которого нет), микросхема, тем не менее, поддавалась бы программированию.

Все права защищены © AVR.RU 2007—2021.

Цитирование материалов сайта только с разрешения владельца.

Источник

Adblock
detector