Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

прошивка с помощью Arduino [Амперка / Вики]

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

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

Начинаем с простого скетча

Собирать мы будем устройство с потенциометром и светодиодом. В зависимости от угла поворота потенциометра будет изменяться яркость светодиода. Подключаем к Arduino ледующим образом: светодиод подключаем к цифровому пину №6 (поскольку на нем есть возможность генерации ШИМ-сигнала, за счет которого будет регулироваться яркость светодиода), а потенциометр — к аналоговому пину №0. Скетч содержит следующий код:

pwm-adc.ino
// Номер пина для светодиода
int ledPin = 6;   
 
// Номер аналогового пина   
int analogPin = A0;   
 
// В эту переменную считываем значение с аналогового входа
int val = 0;         
 
void setup()
{
  // Настраиваем пин светодиода на выход
  pinMode(ledPin, OUTPUT);   
}
 
 
 
void loop()
{
  // Считываем значение
  val = analogRead(analogPin);   
 
  // val содержит значение из диапазона 0.
.1023, а диапазон значений для analogWrite // 0..255. Для этого делим значение на 4 analogWrite(ledPin, val / 4); }

Скетчи на ATtiny84

Итак, у нас Arduino Uno. Как же нам запрограммировать нашу «тиньку»? Для этого используется такое устройство, как программатор. Он необходим, чтобы залить прошивку в контроллер. Мы можем превратить нашу Arduino в программатор. Это элементарно делается путём заливки скетча ArduinoISP.

Делаем программатор и собираем схему

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

ArduinoISP.ino
// This sketch turns the Arduino into a AVRISP
// using the following arduino pins:
//
// pin name:    not-mega:         mega(1280 and 2560)
// slave reset: 10:               53 
// MOSI:        11:               51 
// MISO:        12:               50 
// SCK:         13:               52 
//
// Put an LED (with resistor) on the following pins:
// 9: Heartbeat   - shows the programmer is running
// 8: Error       - Lights up if something goes wrong (use red if that makes sense)

// 7: Programming - In communication with the slave

Сначала подключим светодиоды таким образом, как описано в комментарии, не забывая резисторы. После сборки схемы и подачи питания, светодиод, подключенный к пину 9 «Heartbeat» будет моргать, обозначая нормальное функционирование. Если этого не произошло, то ищите ошибки в подключении.

Теперь надо подключить пины 10-13 к ATtiny. Чтобы узнать распиновку последней, обратимся к даташиту, который можно скачать с сайта Atmel, производителя этих контроллеров. На второй странице расположена картинка, описывающая распиновку. Основываясь на даташите и комментарии из скетча, можем составить следующую таблицу подключения:

Arduino UNO ATtiny84
Reset 10 4
MOSI 11 7
MISO 12 8
SCK 13 9

Теперь подключим светодиод и переменный резистор. Резистор необходимо подключить в пину №6 (PA7), поскольку этот пин может быть входом для аналого-цифрового преобразователя, а светодиод — к любому другому, например, к 10 (PA3).

О нумерации пинов

Стоит немного рассказать о различии нумерации пинов в Arduino и при использовании «чистого» кода C. В Ардуино пины нумеруются последовательно и исключаются системные (питание, земля и т. д.), а в реальности всё немного иначе. Все выводы контроллера можно охарактеризовать двумя парметрами: номер порта (порт А, порт В и т.д.) и номер вывода (1..8).

На сайте Arduino можно найти карту пинов. Она выглядит следующим образом:

Для используемой нами ATtiny84 нумерация будет аналогична. В библиотеке Arduino-tiny, о которой речь пойдёт далее, можно найти следующую таблицу соответствия:

// ATMEL ATTINY84 / ARDUINO
//
//                           +-\/-+
//                     VCC  1|    |14  GND
//             (D  0)  PB0  2|    |13  AREF (D 10)
//             (D  1)  PB1  3|    |12  PA1  (D  9) 
//                     PB3  4|    |11  PA2  (D  8) 
//  PWM  INT0  (D  2)  PB2  5|    |10  PA3  (D  7) 
//  PWM        (D  3)  PA7  6|    |9   PA4  (D  6) 
//  PWM        (D  4)  PA6  7|    |8   PA5  (D  5)        PWM
//                           +----+

В соответсвии с назначением каждой ножки контроллера, аналоговые пины (те, у которых есть вход АЦП) нумеруются в скетче по каналу АЦП. Напримем, пин сфизическим номером 11 может быть входом для второго канала АЦП (ADC2), поэтому в скетче он будет называться A2.

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

Учим среду разработки

Первым делом необходимо скачать библиотеку arduino-tiny, содержащую в себе все необходимое. Далее заходим в настройки Arduino и смотрим расположение папки со скетчами. Переходим в эту папку и создаем там новую с названием «hardware». А в ней еще одну, «tiny». Копируем содержимое скачанного ранее архива в эту папку. И последнее действие — переименовываем файл «Prospective Boards.txt» в «boards.txt». Теперь перезагружем среду разработки и идем в меню «Сервис → Плата». Можно видеть, то добавилось много новых пунктов.

Программируем ATtiny84

Выбираем в качестве нужного устройства «Сервис → Плата → ATtiny84 @ 8 MHz (internal oscillator; BOD disabled)» поскольку у нас нету внешнего кварца, который задает частоту работы контроллера. В качестве программатора выберем — «Сервис → Программатор → Arduino as ISP».

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

attiny.ino
// Номер пина для светодиода
int ledPin = 2;   
 
// Номер аналогового пина   
int analogPin = A2;   
 
// В эту переменную считываем значение с аналогового входа
int val = 0;         
 
void setup()
{ 
  // Настраиваем пин светодиода на выход
  pinMode(ledPin, OUTPUT);   
}
 
void loop()
{ 
  // Считываем значение
  val = analogRead(analogPin);   
 
  // val содержит значение из диапазона 0..1023, а диапазон значений для analogWrite
  // 0..255. Для этого делим val на 4
  analogWrite(ledPin, val/4);  
}

Результат

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

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

заливаем собственную прошивку в фонарик / Лайв им. SinuX / iXBT Live

Наверняка у многих имеются фонари фирмы Convoy, они давно зарекомендовали себя как недорогие и качественные источники света. Но мало кто знает, что с помощью программатора за $3 и клипсы за $3 можно залить в некоторые фонари кастомную прошивку, которая будет иметь больше функций или будет удобнее в использовании. Сразу оговорюсь, что в статье речь пойдет о прошивке фонарей с драйверами на базе микроконтроллера Attiny13a, такие драйвера стоят во всех конвоях S серии (кроме нового S9), а так же в Convoy M1, M2, C8. Многие другие производители так же ставят в свои фонари драйвера с Attiny, к ним данный мануал тоже применим, но следует уделять внимание фьюзам и используемым портам Attiny.

Краткий ликбез

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

  • Кнопка выключения — у «тактических» EDC фонариков типа Конвоев обычно располагается в хвосте
  • Аккумулятор — обычно это Li-ion банка
  • Драйвер — самая важная часть фонаря, его мозги
  • Светодиод — говорит сам за себя

Драйвер и светодиод

 

Из всего этого безобразия нас, как вы уже поняли, интересует в первую очередь драйвер. Он отвечает за работу фонаря в различных режимах яркости, запоминание последнего включенного режима и прочую логику. В одноаккумуляторных фонарях чаще всего встречаются ШИМ-драйвера. В качестве силового ключа в таких драйверах обычно используется либо полевой транзистор, либо куча линейных регуляторов AMC7135. Например, так выглядит довольно популярный драйвер Nanjg 105D:

Микроконтроллер Attiny13a содержит в себе прошивку, которая определяет логику работы фонаря. Далее я покажу, как можно залить в этот микроконтроллер другую прошивку, чтобы расширить функционал фонаря.

Предыстория

Сейчас на рынке представлено поистине огромное количество карманных EDC фонариков, и, что характерно, каждый производитель норовит изобрести свою собственную прошивку с собственным уникальным™ управлением. Из всех существующих решений мне больше всего нравилась прошивка, с которой до недавних пор поставлялись фонари Convoy с драйвером Nanjg 105D. Она имела 2 группы режимов (1 группа: Мин-Средний-Макс, 2 группа: Мин-Средний-Макс-Строб-SOS). Смена групп в ней осуществлялась интуитивно просто: включаем минимальный режим, спустя пару секунд фонарь моргнёт — кликаем кнопкой, и группа режимов переключена. С недавних пор Convoy начал поставлять свои фонари с новой прошивкой biscotti. Она имеет больше возможностей (12 групп режимов, возможность включения-отключения памяти последнего режима, запоминание режима в выключенном состоянии (т.н. off-time memory)), но у нее есть несколько жирных минусов, которые лично для меня перечеркивают все достоинства:

  • Сложное управление. Чтобы сменить группу режимов нужно помнить наизусть шаманскую последовательность кликов кнопкой
  • Off-time memory не работает при использовании светящихся кнопок (например, таких)
  • Много бесполезных групп режимов, отличающихся лишь порядком следования

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

Встречайте Quasar v1.0

Взяв за основу прошивку luxdrv 0.3b от DrJones, я сваял собственную с блекджеком и лунапарками. Я постарался сделать ее максимально похожей на стоковую прошивку Nanjg 105D и более масштабируемой. Что может мой Quasar:

  • 2 группы режимов: (Минимальный — Средний — Максимальный — Турбо) и (Минимальный — Средний — Максимальный — Турбо — Строб — Полицейский строб — SOS)
  • Строб злой (частота вспышек около 12Гц)
  • Новый режим — полицейский строб — делает прерывистые серии по 5 вспышек, режим может быть полезен велосипедистам, т.к. повышает заметность
  • Переключение групп осуществляется как в заводской прошивке: включаем первый режим, ждем пару секунд, кликаем сразу после того, как фонарь моргнет
  • Путем модификации исходников можно добавить до 16 групп, в каждой группе можно задать до 8 режимов
  • Используется традиционная on-time память, можно использовать светящиеся кнопки без потери функциональности
  • При разряде аккумулятора ниже 3В фонарь начинает сбрасывать яркость, но полностью не отключается — используйте аккумуляторы с защитой, если боитесь их убить.
  • Удобная фича для проверки текущего уровня аккумулятора: в любом режиме делаем 10-20 быстрых полу-нажатий  кнопкой до тех пор, пока фонарь не перестанет включаться. После этого фонарь сделает от 1 до 4 вспышек, каждая вспышка означает уровень заряда соответственно < 25%, < 50%, < 75% и < 100%.

Исходники, скомпилированный бинарник с двумя группами режимов и проект для Atmel Studio вы можете найти на моем гитхабе. Помните, что исходники распространяются под лицензией CC-BY-NC-SA, и прошивку вы используете на свой страх и риск без каких-либо гарантий.

Принадлежности

Для заливки кастомной прошивки нам понадобятся:

  • SOIC клипса Купить
  • Любой клон Arduino Nano 3.0 для использования в качестве программатора Купить
  • Arduino у меня уже была, поэтому я решил завести отдельный самостоятельный девайс для прошивки фонарей и купил USBISP программатор Купить
  • Dupont провода для подключения клипсы к программатору Купить

 

Подготовка программатора

 

Для прошивки драйвера подойдет обычная Arduino Nano 3. 0 с залитым скетчем ArduinoISP, но я решил завести отдельный программатор, поэтому купил USBISP. Он имеет форм-фактор флешки в алюминиевом корпусе:

Из коробки этот программатор определяется на компе как HID устройство и работает только с китайским кривым софтом, чтобы использовать его с avrdude можно перепрошить его в USBASP. Для этого нам, как ни странно, понадобится другой рабочий программатор. Здесь нам поможет Arduino Nano, подключаем её к компьютеру, открываем Arduino IDE и открываем стандартный скетч ArduinoISP:

Раскомменчиваем строку #define USE_OLD_STYLE_WIRING:

И заливаем скетч в Nano. Теперь у нас есть AVRISP программатор, которым можно перепрошить наш USBISP в USBASP. Для этого нам в первую очередь понадобится avrdude, он лежит в папке установки Arduino IDE по пути \hardware\tools\avr\bin. Для удобства советую добавить полный путь к avrdude.exe в переменную окружения PATH.

Теперь нам необходимо открыть USBISP и перевести его в режим программирования, установив перемычку UP:

Вот так:

Заодно убеждаемся, что на плате распаян Atmega88 или 88p, как в моем случае:

Другие перемычки, несмотря на советы в инете, трогать не нужно, все прекрасно прошивается и с ними.

Теперь внимательно смотрим на распиновку USBISP программатора, нанесенную на его алюминиевом корпусе, и подключаем его к Arduino Nano:

  • VCC и GND к VCC и GND сответственно
  • MOSI к D11
  • MISO к D12
  • SCK к D13
  • RESET к D10

У меня не оказалось Female-Female проводов, поэтому я заюзал мини-макетку:

Следующий шаг — скачиваем прошивку usbasp.atmega88-modify.hex, подключаем Arduino к компу, запускаем консоль и переходим в папку с сохраненной прошивкой. Для начала выставим фьюзы командой:

avrdude -p -m88 -c avrisp -b 19200 -U lfuse:w:0xff:m -U hfuse:w:0xdd:m

Затем заливаем прошивку командой:

avrdude -p m88p -c avrisp -b 19200 -U flash:w:usbasp.atmega88-modify.hex

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

Теперь у нас есть полноценный компактный USBASP программатор в удобном металлическом корпусе.

SOIC клипса

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

Подключаем контакты клипсы к программатору в соответствии с распиновкой микроконтроллера:

Для большей надежности я припаял провода к клипсе и затянул все это термоусадкой:

Заливаем прошивку в фонарь

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

Крепим клипсу, соблюдая ориентацию. Ориентир в данном случае — кругляш на корпусе микросхемы, он обозначает первый её пин (RESET в нашем случае):

Смотрим, чтобы все пины клипсы утопились в корпус. Подключаем программатор к компу, теперь дело осталось за малым — нужно залить прошивку) Для этого идем на гитхаб, качаем бинарник quasar.hex, запускаем консоль, переходим в папку с бинарником и выполняем команду:

avrdude -p t13 -c usbasp -u -Uflash:w:quasar.hex:a -Ulfuse:w:0x75:m -Uhfuse:w:0xFF:m

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

Просто, да? А вот нифига, с вероятностью 90% вместо загрузки прошивки вы увидите это:

Причина чаще всего кроется в том, что у новых моделей драйверов замкнуты пины 5 и 6 (MISO и MOSI), что делает невозможным программирование. Поэтому если avrdude жалуется на target doesn’t answer, то первым делом вооружаемся скальпелем и внимательно смотрим на плату. Нужно перерезать дорожку, как показано на картинке:

После этого прошивка обычно заливается без проблем. Если нет — внимательно посмотрите на микроконтроллер, возможно у вас вовсе не Attiny13a, по крайней мере мне попадались драйвера с Fasttech с PIC контроллерами.

Модификация прошивки

Скомпилированная прошивка на гитхабе посути является чуть более продвинутым аналогом оригинальной прошивки, поэтому куда интереснее собрать собственную версию прошивки со своими группами и режимами. Сейчас я расскажу, как это сделать. Первым делом качаем и устанавливаем Atmel Studio с официального сайта. Потом скачиваем все файлы проекта (кто умеет в git — могут просто клонировать всю репу) и открываем Quasar.atsln через установленную студию:

Перечислю наиболее интересные места в коде:

#define LOCKTIME 50

Задает время, через которое текущий режим будет сохранен. Значение 50 соответствует 1 секунде, соответственно поставив 100 можно получить интервал ожидания в 2 секунды

#define BATTMON 125

Задает критический уровень напряжения на аккумуляторе, при достижении которого фонарь начнет сбрасывать яркость. У стандартного Nanjg 105D величина 125 соответствует примерно 2.9 вольтам, но все зависит от величин резисторов делителя напряжения на плате. Если удалить эту строку целиком — фонарь не будет следить за напряжением аккумулятора.

#define STROBE        254
#define PSTROBE       253
#define SOS           252

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

#define BATTCHECK

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

#define MEM_LAST

Задает запоминание последнего режима. Возможны следующие значения: MEM_LAST — фонарь включается в последнем включенном режиме, MEM_FIRST — фонарь всегда включается в первом режиме, MEM_NEXT — фонарь всегда включается в следующем режиме.

#define MODES_COUNT     7
#define GROUPS_COUNT    2

Задают количество режимов в группе и количество групп соответственно. Тесно связаны со следующим массивом groups:

PROGMEM const byte groups[GROUPS_COUNT][MODES_COUNT] = {{ 6, 32, 128, 255, 0, 0, 0 },
                                                        { 6, 32, 128, 255, STROBE, PSTROBE, SOS }};

Здесь перечислены сами группы режимов работы. Числа 6, 32, 128, 255 — значения яркости, STROBE, PSTROBE, SOS — обозначения специальных режимов. Нулевые значения яркости игнорируются, поэтому в разных группах можно задавать разные количества режимов (в данном случае в первой группе 4 режима, во второй — 7).

Например, если вы хотите оставить один единственный режим работы со 100% яркостью, то сделать это можно так:

#define MODES_COUNT     1
#define GROUPS_COUNT    1
PROGMEM const byte groups[GROUPS_COUNT][MODES_COUNT] = {{ 255 }};

Если вам нужны 3 группы режимов без мигалок и с обратным следованием (от максимального к минимальному), то можно сделать так:

#define MODES_COUNT     4
#define GROUPS_COUNT    3
PROGMEM const byte groups[GROUPS_COUNT][MODES_COUNT] = {{ 255, 0, 0, 0 },
                                                        { 255, 64, 6, 0 },
                                                        { 255, 128, 32, 6 }};

При таком раскладе в первой группе всего один режим со 100% яркостью, во второй — 3 режима, в третьей — 4 режима с более плавным уменьшением яркости. Легко и просто, правда? Остается лишь скомпилировать исходник в hex файл с помощью студии, для этого выбираем «Release» в диспетчере конфигураций и жмем «Запуск без отладки»:

Если нигде в коде не накосячили, то в папке проекта появится директория Release, а в ней — hex файл, который остается залить в драйвер описанным в предыдущем разделе способом.

На этом все, надеюсь сей мануал будет кому-нибудь полезен. Если у кого возникнут вопросы — милости прошу в комменты)

Arduino ISP программатор для ATtiny, Минимальная Arduino

Arduino это просто, быстро, а самое главное удобно для реализации идей. Но когда всё отлажено и схема, и код настает момент, когда избыточность плат просто не нужна. Идею то можно реализовать значительно дешевле и компактнее. Без горы проводов. Для того чтобы избавиться от ненужных примочек в готовом устройстве предлагаем прошить ваш код непосредственно в микроконтроллер. Ниже описан пример, где в качестве программатора используется Arduino Nano, а прошивать будем микроконтроллер ATtiny13 на котором, кстати, собран набор RDC1-0004, Управление вентиляцией.

Распакуйте архив attiny13.zip. В папке со скетчами создайте папку «hardware». Размещение папки со скетчами можно узнать, выбрав «Файл – Настройки».

Из распакованного архива скопируйте папку «attiny13» в папку «hardware». Должно получиться примерно так: «C:\Users\имя пользователя\Documents\Arduino\hardware\attiny13».

Перезапустите Arduino IDE.

Если сделали все правильно, в списке плат появиться строка «ATtiny13(ATtiny13a)».

В списке Frequency можно выбрать нужную частоту работы микроконтроллера.

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

Внимание! Если для ATtiny13 будет выбрана частота менее 1,2 МГц, пример ArduinoISP нужно изменить.

Строку

#define SPI_CLOCK (1000000/6)

нужно заменить на

#define SPI_CLOCK (128000/6)

Подключите Arduino Nano к ПК. В Arduino IDE выберите плату Arduino Nano, процессор ATmega328, нужный COM-порт.

Выберите «Скетч – Загрузка». Начнется загрузка программы.

Дождитесь окончания загрузки. Программатор готов.

Подключите программируемый микроконтроллер к Ардуино, как показано на рисунке.

Теперь в Arduino IDE выберите программируемый микроконтроллер, нужную частоту, COM-порт остается без изменений. Выберите используемый программатор, в нашем случае «Arduino as ISP».

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

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

Если для вашего проекта вы выбрали другой контроллер из семейства ATtiny, тогда загружайте и распаковывайте в папку hardware дополнительные файлы описания.

tiny.zip

tiny Chip_Dip.zip

Схема подключения для ATtiny в корпусе DIP14:

022-Тестовая прошивка для AVR микроконтроллеров (проверка работоспособности портов).

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

Чтобы проверить микроконтроллер необходимо загрузить прошивку и посмотреть, что происходит на ножках. «Смотреть» можно или мультиметром, или простым пробником – светодиод последовательно с резистором 300 Ом – 1 кОм. Без резистора проверять не стоит – можно спалить порт ввода-вывода. Уровни сигналов на ножках меняются с «1» через «Z»-состояние в «0» и обратно. «Z» состояние введено в последовательность для контроля работоспособности порта в режиме входа.

Тестовая прошивка для микроконтроллера ATMega48/88/168.
Алгоритм работы прошивки ATMega48/88/168 показан на картинке (микроконтроллер установлен на макетной плате ATMega48/88/168, описанной ранее).

Микроконтроллер работает от внутреннего генератора, поэтому нет необходимости во внешнем кварце. Ножки 9 и 10 (подключение внешнего кварца) не задействованы, на случай если там окажется внешний кварц. Также не задействованы ножки 1 (сброс) и 21(опорное напряжение для АЦП). Проверить работоспособность можно двумя способами (смотри рисунок) – смотреть изменение уровня сигналов относительно земли (GND) или относительно ножки питания (VCC).
022-M48.HEX V1.0 [277 bytes] – Тестовая прошивка для ATMega48/88/168

Фьюзы для тестовой прошивки ATMega48/88/168

Как прошить микроконтроллер >

Тестовая прошивка для микроконтроллера ATTiny2313.
Алгоритм работы прошивки ATTiny2313 показан на картинке (микроконтроллер установлен на макетной плате ATTiny2313, описанной ранее).

Микроконтроллер работает от внутреннего генератора, поэтому нет необходимости во внешнем. Ножки 4 и 5 (подключение внешнего кварца) не задействованы на случай если там окажется внешний кварц. Также не задействована ножка 1 (сброс). Проверить работоспособность можно двумя способами – смотреть изменение уровня сигналов относительно земли (GND) и относительно ножки питания (VCC).
022-T2313.HEX V1.0 [259 bytes] – Тестовая прошивка для ATTiny2313

Фьюзы для тестовой прошики ATTiny2313

Как прошить микроконтроллер >

Тестовая прошивка для микроконтроллера ATTiny13.
Алгоритм работы прошивки ATTiny13 показан на картинке (микроконтроллер установлен на макетной плате ATTiny13, описанной ранее).

Микроконтроллер работает от внутреннего генератора (внешний большая роскошь для этого микроконтроллера, поэтому даже не рассматриваем). Естественно, не задействована ножка 1 (сброс). Проверяем работоспособность так же, как и у предыдущих микроконтроллеров.
022-T13.HEX V1.0 [240 bytes] – Тестовая прошивка для ATTiny13

Фьюзы для тестовой прошики ATTiny13

Как прошить микроконтроллер >

Проверка работоспособности «Z»-состояния портов ввода-вывода.

«Z»-состояние это состояние когда ножка сконфигурирована на вход и на ней нет ни какого уровня (она как-бы болтается в воздухе ни к чему не подключена). Для того чтобы проконтролировать наличие такого состояния можно воспользоваться резисторным делителем. При уровне «1» на делителе будет напряжение питания +5v, при уровне «0» – земля 0v, а при «Z»-состоянии порт ввода-вывода перестанет вмешиваться в работу делителя и он поделит напряжение питания и мы получим +2.5v.

ФАЙЛЫ:
022-AVR-tests – Исходники тестовых прошивок

ATMega48/88/168, ATTiny13, ATTiny2313, Начинающим, Отладка

Программирование микроконтроллеров AVR ATtiny на Arduino IDE

Программирование микроконтроллеров AVR ATtiny на Arduino IDE

разделы: Arduino , Программаторы , AVR , дата: 23 февраля 2014г.

Часто можно слышать отзывы об Arduino, что это дорого, неэффективно, профанация идеи и т.п. Если задуматься, то окажется, что во многом эта критика справедлива. Одним Arduino сыт не будешь. Если мне требуется микроконтроллер для чего-то простого, например: дисплей и пара кнопок, то использование для такой тривиальной задачи Arduino, действительно можно сравнить с забиванием гвоздей электронным микроскопом. Но если отбросить эмоции и подумать, что наиболее ценное в Arduino-проектах? На мой взгляд, это колоссальный объем открытого кода написанного под различные проекты. Называя вещи своими именами, я не хочу писать с нуля программу для работы микроконтроллера с дисплеем, я хочу использовать уже готовую библиотеку, которую я использовал для Arduino. И не потому что мне “слабо”, а потому что я не вижу смысла в изобретении еще одного велосипеда.

О портировании проектов Arduino для “младшего” семейства микроконтроллеров AVR ATtiny пойдет речь в этом посте.

Несколько ссылок:

1) Страница проекта реализующая данную возможность: arduino-tiny
Так же, в вопросе мне помогли разобраться следующие материалы:
2) Programming an ATtiny w/ Arduino 1. 0
3) ISP программатор из Arduino. Разберемся и с ATtiny
4) Ошибка «please define PAGEL and BS2 signals in the configuration file for part» при прошивки ATtiny45/85

Из литератуты рекомендую почитать книгу: Андрей Евстифеев “Микроконтроллеры AVR семейства Tiny”

    Предполетная подготовка.
    • Что будем программировать?
    • Проект позволяет задействовать микроконтроллеры ATtiny84 (84/44/24), ATtiny85 (85/45/25), и ATtiny2313 (4313).
    • ATtiny84/44/24 это 14-pin микроконтроллеры с размером флеш-памяти под прошивку 8/4/2 Кбайта соответственно.
    • ATtiny85/45/25 – это то же самое, но на 8-pin. ATtiny2313/4313 – Выделяется из общего ряда являясь по сути ревизией AVR Classic AT90s2313. На борту имеется и I2C и UART, 20-pin, 2/4 Кбайта под прошивку. Вкусная штучка.

    Arduino использует старшее семейство микроконтроллеров ATmega. Портируя программы на ATtiny придется отказаться от некоторых плюшек. Что мы теряем кроме меньшей памяти и меньшего количества ног? Отказаться придется от UART и I2C интерфейсов(ATtiny2313 это по сути не совсем ATtiny). Если вас это не пугает, то идем дальше.

  1. Программатор. Для того чтобы залить прошивку в чип, нужен будет программатор. Здесь я буду использовать сам Arduino в качестве программатора.
  2. Используемое ПО: Slackware64-14.1 + Arduino-1.0.5
    Приступим:
  1. Сначала нужно добавить поддержку ATtiny для Arduino IDE. Заходим по первой ссылке на сайт проекта arduino-tiny На текущий момент я вижу два zip архива доступных для скачивания, для версий Arduino IDE v1.0 и v1.5. Хм. Я пользуюсь последней доступной версией 1.0.5, какой архив следует выбрать? Выбирать надо первое. Версия 1.5 еще только разрабатывается. Итак:
    $ cd sketchbook 
    $ mkdir hardware
    $ cd hardware
    $ wget http://arduino-tiny.googlecode.com/files/arduino-tiny-0100-0018.zip
    $ unzip ./arduino-tiny-0100-0018.zip
    Получаем папку tiny в которой лежит файл README. Открываем его вашим любимым текстовым редактором и внимательно читаем секцию INSTALLATION/УСТАНОВКА
    Если присмотреться, то мы уже дошли до этапа:
    * Create a new file named "boards. txt" in the tiny directory.  Following from
      the examples above, the file would be here...
    
          C:\Projects\Arduino\hardware\tiny\boards.txt
    
    * Open the "boards.txt" file and the "Prospective Boards.txt" file using your
      favourite text editor.
    
    * Copy board entries of interest from "Prospective Boards.txt" to "boards.txt"
      (or copy the entire contents of "Prospective Boards.txt" to "boards.txt").
      Board entries are delineated by a long line of pound-signs.
    
    * In the "boards.txt" file, change the "upload.using" entries to the
      appropriate value for your setup.
    
    * Save and close "boards.txt".  Close "Prospective Boards.txt".
    из всего этого следует только одна команда:
    $ cp -v  'Prospective Boards.txt' ./boards.txt
    
    после чего можно запускать Arduino IDE
    $ arduino
    

    Если все нормально, то в меню: “Сервис->Плата” увидим список поддерживаемых микроконтроллеров ATtiny:

    Здесь, пожалуй, сразу следует пояснить. oscillator – генератор тактовой частоты. Если вы купили микроконтроллер и еще не успели поменять fuse-биты, то генератор должен быть встроенным и работать на частоте 1MГц. Что будет, если ошибешься с частотой? Работать будет, но или медленнее или быстрее.

    BOD – детектор пониженного питания ака Brown-out Detection. Датчик позволяющий определить пониженный уровень питания и “мягко” выключить чип предотвратив дребезг питания. Дело в том, что выключение питания, процесс не мгновенный, чип доли секунды работает при не достаточном питании. В таком состоянии, программа зашитая в нем, начинает выполняться с произвольных адресов т.е. работать хаотически. Это чревато чем? Если ваша программа пишет в EEPROM, то в этом состоянии она запишет туда кашу.

  2. Программатор. Здесь все просто. Подключите Arduino к компьютеру, запустите Arduino IDE, и запишите программу из примеров: меню -> Файл-> Примеры->ArduinoISP. Программатор готов.
  3. Сборка схемы. Для прошивки через ISP интерфейс на каждом микроконтроллере имеются четыре контакта MOSI, MISO, SCK, RESET. ISP-программатор позволяет перепрошить чип уже впаянный в схему. Он так и называется In-System Programming внутрисхемный программатор. В связи с этим, контакты MOSI, MISO, SCK по совместительству имеют функции тех или иных цифровых/аналоговых выводов. Расположение контактов Вашего микроконтроллера можно посмотреть по datasheet на официальном сайте.

    У меня под рукой оказался ATtiny45

    Схема подключения такая

    Я использовал в качестве программатора Arduino на ATmega168. Конденсатор электролитический 10мФ x 16В. Минус на GND, плюс на RESET. Я не уверен, что он нужен на Arduino c ATmega328. Видел схемы без конденсатора, но шить через ATmega328 не пробовал.

  4. Прошивка. В Arduino IDE в меню Сервис – Программатор установите опцию: Arduino as ISP В меню “Плата” укажите тип прошиваемого микроконтроллера.
    Откройте из “Примеров” программу “Blink”. В самом начале, строку:
    int led=13
    исправте на
    int led =0
    К Pin0 (пятый контакт ИС) подключите подтягивающий резистор, на другой конец резистора анод светодиода, катод которого соедините с землей.
    Скомпилируйте и залейте программу. Работать должно сразу.
    При прошивке микроконтроллера может выдать предупреждение:
    please define PAGEL and BS2 signals in the configuration file for part
    
    Вашим любимым текстовым редактором откройте файл
    $ nano /opt/arduino/hardware/tools/avrdude.conf
    
    найдите секцию со своим микроконтроллером и добавьте в нее две строки
    pagel = 0x01;
    bs2 = 0x01;
    Попробуйте перепрошить микроконтроллер, предупреждение должно исчезнуть. Подробнее смотрите по четвертой ссылке

Светодиодная гирлянда на МК Attiny13 « схемопедия


Попросили меня как-то собрать несложную и недорогую гирлянду на микроконтроллере. Под руку попался самый дешёвый восьми битный AVR микроконтроллер Attiny13. В данной статье я хочу пошагово описать процесс сборки данного устройства.

Из деталей нам понадобится:

Микроконтроллер Attiny13 – 1шт.

Панелька DIP-8 – 1шт.

Резистор 4,7кОм – 1шт.

Резистор 100 Ом  – 5шт.

Штырьки PLS – 2шт.

Светодиоды (любые) – 5шт.

Гнездо BLS-2 – 1шт.

Отсек для батареек – 1шт.

Сборку устройства я разделил на несколько этапов:

Этап 1. Изготовление платы

Этап 2. Запаивание радио деталей на плату

Этап 3. Изготовление программатор для прошивки микроконтроллера

Этап 4. Прошивка микроконтроллера

Этап 1. Изготовление платы

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

И так, для начала нам понадобится следующее:

Кусочек текстолита (размером 45 на 30мм)

Хлорное железо

Небольшая ёмкость

Вода

Перманентный маркер

Немного технического спирта или одеколона

Ластик

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

Далее берём перманентный маркер и рисуем дорожки на текстолите (как показано на рисунке ниже).

Нарисовали? Отлично. Теперь надо вытравить плату используя хлорное железо.

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

И так, поскольку хлорное железо это порошок нам его надо развести в воде.

Вот пропорция: 100гр. хлорного железа на 700мл воды. Но нам так много не надо, поэтому берём 10гр. на 100 мл. воды. Далее в этот раствор опускаем нашу плату.

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

После того, как плата вытравилась, достаём её из емкости и промываем под проточной водой.

Вот фотография вытравленной платы.

Теперь стираем с платы маркер (для этого отлично подходит технический спирт или одеколон).

Далее нам необходимо сделать в плате отверстия под радио детали. Внизу показано где на плате делать отверстия.

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

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

Теперь включаем паяльник и залудим плату. Внизу фотография залуженной платы

Оставшийся на плате канифоль можно стереть техническим спиртом или жидкостью для снятия лака.

Плата готова! Этап 1 завершен!

Этап 2. Запаивание радио деталей на плату

После того как сделали плату (а может кто-то не делал её, а решил использовать макетную плату) необходимо запаять на неё радио детали.

Схема светодиодной гирлянды на микроконтроллере Attiny13:

Запаиваем радио детали на плату (по схеме выше) и получаем следующее устройство:

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

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

Этап 2 завершён!

Этап 3. Изготовление программатор для прошивки микроконтроллера

Внимание! Если у вас уже есть программатор для AVR микроконтроллеров вы можете пропустить этот этап и прошить микроконтроллер самостоятельно! Скачать прошивку вы можете по ссылке внизу страницы.

Собирать программатор мы будем на LPT порт компьютера. Вот схема программатора:

На рисунке в прямоугольнике (где LPT порт) номер контакта, куда подсоединять проводок. Провода старайтесь делать покороче (не более 20 см). Если провода будут длиннее 20 см то во время прошивки или чтения микроконтроллера будут ошибки, которые могут стоить микроконтроллеру жизни!

Будьте очень аккуратны, LPT порт очень легко спалить!

Для изготовления программатора нам понадобится:

25-контактный разъем для LPT порта (папа)

Резисторы 150 Ом  4 шт.

Резистор 10 кОм  1 шт.

Батарея на 3 вольта

Вот мой вариант программатора:

Теперь можно приступить к прошивке микроконтроллера.

Этап 4. Прошивка микроконтроллера

Внимание! В этом этапе описывается прошивка микроконтроллера Attiny13 с помощью программы PonyProg2000 и программатора на LPT порт.

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

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

Для начала скачайте прошивку для гирлянды (ссылка внизу страницы), потом из интернета скачайте программу PonyProg2000 и установите её.

Теперь всё почти готово для прошивки микроконтроллера. Остаётся лишь подключить микроконтроллер к программатору а программатор подключить к компьютеру. 

После того как всё подключили запускаем программу PonyProg2000.

Далее нам надо откалибровать программу PonyProg2000, для этого следуем по пути: Setup > Calibration

Выскачет такое окно:

В окне нажимаем кнопку “Yes”.

После калибровки появится вот такое сообщение:

Все, программа откалибрована!

Теперь заходим в настройки (Setup > Interface Setup…). Появится вот такое окно:

Далее выбираем “Parallel”, “Avr ISP I/O”, LPT1 и нажимаем кнопку “ОК”

После в главном окне программы выбираем “AVR micro”, “Attiny13”

Теперь осталось открыть прошивку, для этого в меню “File” выбираем “Open Device File…”. В списке “Тип файлов:” выбираем “*.hex” и указываем путь к прошивке нашей светодиодной гирлянды, нажимаем кнопку “Открыть”.

В главно окне нажмине на кнопку “Write device”:

После появление такого сообщения:

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

Для установки фьюз битов в меню “Command” выберите “Security and Configuration Bits…”, в появившимся окне нажмите кнопку “Read” и установите галочки как на картинке ниже:

После установки галочек (как на картинке выше) нажмите кнопку “Write”. Всё готово!

Теперь выключите компьютер и извлеките микроконтроллер из программатора, вставьте микроконтроллер в панельку на плате гирлянды. Если всё сделано правильно, то при подаче питание (3 вольта) гирлянда должна заработать!

В заключении хотелось бы сказать, что программу я писал в среде BASCOM-AVR (исходник прилагается),  программе 9 подпрограмм эффектов, так что ничего не мешает создавать вам свои эффекты.

По умолчанию устройство имеет 4 разных эффекта:

1. Бегущая точка

2. Бегущая линия

3. Переключение светодиодов

4. Моргание

Скачать прошивку, исходни, проект в Proteus

Если есть, какие то просьбы, вопросы или пожелания пишите на мой e-mail: [email protected]

Разработчик: Яковлев Александр Вячеславович (г.Витебск, Беларусь)

ATtiny13 программатор

Программирование микроконтроллера AVR ATtiny13 в среде Arduino и с помощью программы avrdude.

В качестве программатора микроконтроллера ATtiny13 будем использовать плату Arduino UNO как описано в следующей статье ISP Программатор микроконтроллеров ATtiny из Arduino или самодельный программатор USB программатор своими руками на ATmega8. Для работы с микроконтроллером ATtiny13 в среде разработки Arduino, программу Arduino необходимо настроить, читайте Микроконтроллеры ATtiny в среде разработки Arduino. 

Воспользовавшись описанием микроконтроллера ATtiny13 (datashit) ATtiny13A, нарисуем схему подключения ATtiny13 к программатору:

Подключите программатор ATtiny13 к компьютеру, в среде разработки Arduino выберите меню:

  1. / /
  2. / /
  3. /

Таким образом, вы настроили программу Arduino и уже прошили фьюз биты микроконтроллера ATtiny13. В Arduino установить необходимые параметры микроконтроллера ATtiny13 (фьюзы) можно вручную в файле …arduino/hardware/…/boards.txt

С помощью программы Arduino программу на AVR-C (скетч, прошивку) заливают в микроконтроллер нажатием на кнопку Загрузить с помощью программатора. Нажатие на кнопку Загрузить с помощью программатора в программе Arduino запускает следующие программы командной строки (в Linux):

  1. avr-g++
  2. avr-ar
  3. avr-gcc
  4. avr-objcopy
  5. avrdude

Последняя из перечисленных программ загружает двоичный файл в микроконтроллер ATtiny13.

Загрузка фьюзов и прошивок в м-к ATtiny13 с помощью программы avrdude.

Avrdude – утилита командной строки, предназначенная для загрузки двоичных файлов микропрограмм в микроконтроллер с использованием программатора. Руководство по avrdude: man avrdude руководство пользователя.

С помощью следующей команды Вы установите фьюзы микроконтроллера ATtiny13 в старший 0xFF, 0x7A младший:

avrdude -C/home/dior/ProgramFiles/arduino-1. 0.6/hardware/tools/avrdude.conf -v -v -v -v -pattiny13 -cstk500v1 -P/dev/ttyUSB0 -b19200 -e -Uhfuse:w:0xff:m -Ulfuse:w:0x7a:m

Следующая команда загрузит двоичный файл Blink01_ATtiny13.cpp.hex в микроконтроллер ATtiny13:

avrdude -C/home/dior/ProgramFiles/arduino-1.0.6/hardware/tools/avrdude.conf -v -v -v -v -pattiny13 -cstk500v1 -P/dev/ttyUSB0 -b19200 -Uflash:w:/tmp/build481490467907776681.tmp/Blink01_ATtiny13.cpp.hex:i

Как обновить прошивку AVR USBasp prog

Распространенная причина, по которой вы хотели бы обновить эту прошивку, – это функция медленной разблокировки для дешевых (e-bay или Aliexpress) программаторов USBasp, как этот на картинке. Функция slow-sck позволяет программировать микросхемы AVR, работающие с источником тактовой частоты очень низкой частоты (например, 128 кГц).

Когда программатор USBasp выводит это предупреждение, это означает, что требуется обновление прошивки!

 avrdude -p attiny13 -c usbasp -B 1024 -F -P USB

avrdude: установите частоту SCK на 500 Гц
avrdude: предупреждение: невозможно установить период sck. пожалуйста, проверьте обновление прошивки usbasp.
avrdude: error: program enable: target не отвечает. 1
avrdude: инициализация не удалась, rc = -1
avrdude: устройство AVR инициализировано и готово принимать инструкции
avrdude: подпись устройства = 0x685ba2
avrdude: Ожидаемая подпись для ATtiny13 - 1Э 90 07

avrdude сделано. Спасибо.

 

Что вам нужно

  • два программатора USBasp (первый требует обновления, а второй записывает чип первого)
  • одна перемычка, два разъема 2 × 1 и паяльник (опционально, зависит от типа программатора)

Подготовка программатора USBasp

Нам нужно установить перемычку JP2 для программатора USBasp, который мы хотим обновить.Эта перемычка включает «самопрограммирование ISP». Может случиться так, что вам нужно будет добавить на печатную плату отсутствующий контактный заголовок для JP2. То же самое с контактным разъемом для перемычки JP3, которая включит «Slow-SCK», когда мы обновим прошивку. В конце концов, сделайте короткие соединения на печатной плате, если нет места для разъемов.

Рисунок-1 Плата программатора AVR USBasp (источник: tosiek.pl)

Рисунок 2 Схема программатора USBasp AVR

Скачивание последней прошивки

Программное обеспечение поддерживается Томасом Фишлем, автором программы USBasp, и его можно найти на его официальной странице загрузки – https: // www.fischl.de/usbasp/.

 cd $ HOME
wget https://www.fischl.de/usbasp/usbasp.2011-05-28.tar.gz
tar -xvf usbasp.2011-05-28.tar.gz
 

Прошивка микросхемы программатора USBasp

На этом этапе мы уверены, что перемычка JP2 первого программатора, которую мы хотим обновить, находится на своем месте (а JP3 не установлен). Теперь мы воспользуемся вторым программатором USPasp, чтобы записать новую прошивку в чип первого программатора. Итак, нам нужно подключить первый программатор USBasp и второй программатор с помощью разъемов IDC-10, а затем подключить второй программатор к компьютеру с помощью разъема USB.

 cd $ HOME / usbasp.2011-05-28
avrdude -p atmega8 -c usbasp -U flash: w: bin / firmware / usbasp. atmega8.2011-05-28.hex: i -F -P usb
 

Проверка

После обновления прошивки нам нужно снять перемычку JP2 и установить JP3 (Slow-Clock).

 avrdude -p attiny13 -c usbasp -B 1024 -F -P USB

avrdude: установите частоту SCK на 500 Гц
avrdude: устройство AVR инициализировано и готово принимать инструкции

Чтение | ################################################ | 100% 0.02с

avrdude: подпись устройства = 0x1e9007 (вероятно, t13)

avrdude: safemode: Предохранители исправны (E: FF, H: FF, L: 7B)

avrdude сделано. Спасибо. 

Вот и все! Теперь, если установлен JP3, вы можете программировать микросхемы AVR, работающие с очень низкими частотами.

Моды и новая прошивка для фонарика Convoy S2 +

Моды и новая прошивка для фонарика Convoy S2 + 8 сентября 2019 г., Прошивка

Convoy S2 + – Использование AVRdude с ArduinoISP

Теперь, когда у нас есть мой старый Arduino Duemilanove, запрограммированный с помощью ArduinoISP, вопрос в том, «как мы можем использовать его для отправки шестнадцатеричного файла на устройство?».

Вот несколько ссылок, которые могут быть или не иметь отношения.

Как ни странно, именно здесь разваливаются различные уроки. Обычная схема – использовать avrdude. Возможно, мы находим команду строка, которая использует usbasp, а затем замените «arduinoISP» на «usbasp», и мы будем отправляемся на гонки, но мы забегаем вперед.

Получить avrdude

Но прежде всего нам понадобится сам avrdude. Это доступно как пакет Fedora, поэтому это просто:
вс
dnf установить avrdude
 
Это дает мне версию 6.3-15 для Fedora 30.

Заставьте avrdude поговорить с нашим интернет-провайдером arduino

На данном этапе нам фактически не нужно подключать это к целевому ATTiny13A. Когда я подключаю свой arduinoISP, я вижу:
8 сен 15:05:23 ядро ​​trona: usb 2-1.8: новое полноскоростное USB-устройство номер 11 с использованием ehci-pci
8 сен 15:05:23 ядро ​​trona: usb 2-1.8: найдено новое USB-устройство, idVendor = 0403, idProduct = 6001, bcdDevice = 6.00
8 сентября 15:05:23 ядро ​​trona: usb 2-1. 8: Новые строки USB-устройства: Mfr = 1, Product = 2, SerialNumber = 3
8 сен 15:05:23 ядро ​​trona: usb 2-1.8: Продукт: FT232R USB UART
8 сен 15:05:23 ядро ​​трона: usb 2-1.8: Производитель: FTDI
8 сен 15:05:23 ядро ​​трона: usb 2-1.8: SerialNumber: A6008bvC
8 сен 15:05:23 ядро ​​trona: ftdi_sio 2-1.8: 1.0: обнаружен преобразователь последовательного USB-устройства FTDI
8 сен 15:05:23 ядро ​​trona: usb 2-1.8: Обнаружен FT232RL
8 сентября 15:05:23 ядро ​​trona: usb 2-1.8: преобразователь последовательного USB-устройства FTDI теперь подключен к ttyUSB0
 
Обратите внимание на две вещи. Он настраивается как / dev / ttyUSB0, и поскольку он использует встроенный чип FTDI для USB, мы видим производителя и код продукта для этого устройства (0403 и 6001).

Существует файл /etc/avrdude/avrdude.conf, содержащий строки для различных программистов. В графическом интерфейсе arduino есть собственный файл avrdude.conf. Это копируется в разные места, но исходная копия кажется /opt/arduino/arduino-1. 8.9/hardware/tools/avr/etc/avrdude.conf.

В стандартном файле в / etc / avrdude нет записи с именем «arduinoisp». Файл, поставляемый с графическим интерфейсом arduino, имеет следующее:

программист
  id = "arduinoisp";
  desc = "Программист Arduino ISP";
  type = "usbtiny";
  connection_type = usb;
  usbvid = 0x2341;
  usbpid = 0x0049;
;
 
Обратите внимание, что производитель и идентификатор продукта неверны (независимо от того, для какой Arduino это предназначалось, необходимо у них был более современный чип AVR со встроенным USB, который позволял указывать производителя и идентификатор продукта измененный.Или что-то в этом роде. Что я сделал, так это поместил версию вышеуказанного с идентификатором поставщика и продукта, который я ожидаю, в /etc/avrdude/avrdude.conf следующим образом. Я также изменил идентификатор программиста на «бульдог» просто потому, что мог.
программист
  id = "бульдог";
  desc = "Программист Arduino ISP (бульдог)";
  type = "usbtiny";
  connection_type = usb;
  usbvid = 0x0403;
  usbpid = 0x6001;
;
 
Теперь я набираю “avrdude -c xyz”, чтобы получить список известных программистов, и вижу:
  blaster = Altera ByteBlaster
  bsd = Программист Брайана Дина, http: // www. bsdhome.com/avrdude/
  bulldog = Программист Arduino ISP (бульдог)
  buspirate = Автобусный пират
 
Возможно, это какой-то прогресс. Теперь давайте попробуем следующую команду и посмотрим, что произойдет:
avrdude -p attiny13 -c бульдог
 
Вышесказанное не произвело особого впечатления, поэтому я попробовал следующее:
avrdude -p attiny13 -P / dev / ttyUSB0 -c avrisp -b 19200 -U flash: w: release.hex
 
Это вызвало много волнений. Все светодиоды мигают, и я получаю множество ошибок.Итак, у меня avrdude разговаривает с интернет-провайдером arduino, но без подключения реального чипа ATtiny13 мы можем только ожидать ошибок. Сюрприз в том, что нам не нужно использовать слова «бульдог» или даже “arduinoisp” как тип программиста.

Прежде чем идти дальше, сделаем несколько комментариев по поводу аргументов. -U говорит сделать “операцию с памятью” который может быть списком, который нужно делать по порядку. “flash: w: filename” говорит о записи во флэш-память из указанное имя файла. Измените w на r, и вы прочитаете. Используйте “v” для проверки. Имея это в виду, рассмотрим следующую команду:

avrdude -p attiny13 -c usbasp -U flash: w: main.шестнадцатеричный: i -F -P usb
 
Здесь “-F” говорит игнорировать недействительную проверку подписи. Ничего не сказать про “-P usb”, но: i после имени файла, вероятно, указывает шестнадцатеричный формат Intel. Следующая строка будет озвучивать вспышку. : R говорит сохранить его как необработанный двоичный файл.
avrdude -p attiny13 -P usb -c avrisp -U flash: r: flash.bin: r
 

Итог

Целый день потратил на то, чтобы дурачиться, и пока не повезло. Поэтому я зашел на Ebay, чтобы посмотреть, смогу ли я найти программатор “USBasp”. И они продаются примерно по 2 доллара.00! Я заказал два. Они будут стоить мне 5 долларов каждый, включая доставку. Мне просто нужно подождать неделю.

И проверьте это – кто-то сделал то, о чем я думал, и использовал “синюю таблетку” STM32, чтобы разработать программист AVR:


Обратная связь? Вопросов? Напишите мне!
Информация о Tom’s Light / tom@mmto. org

Извлечение прошивки из микроконтроллеров Atmel

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

В этой первой части мы рассмотрим микроконтроллер Atmel Atmega2561. Чтобы получить доступ к микропрограммному обеспечению микроконтроллеров Atmel, мы будем читать данные напрямую с контроллера через последовательный интерфейс программирования (SPI). Для этого требуются следующие инструменты и программное обеспечение:

Используя Bus Pirate в сочетании с программным обеспечением с открытым исходным кодом avrdude , микропрограмму микроконтроллера Atmel AVR можно извлечь из флэш-памяти микроконтроллера через SPI. Приложение avrdude можно скачать здесь.

Стандартная прошивка Bus Pirate должна работать нормально, если вы не извлекаете флеш-память из определенных микроконтроллеров Atmel, таких как ATmega 2560 и 2561. Прошивка Bus Pirate может иметь проблемы с извлечением памяти выше 128 КБ на ATmega 2560-2561. Чтобы решить эту проблему, вам необходимо установить прошивку STK500v2 на Bus Pirate. Прошивка STK500v2 превратит Bus Pirate в клон отладчика AVR. Прошивку для этого можно скачать здесь, а инструкции по обновлению прошивки Bus Pirate можно найти на этом веб-сайте.

После того, как Bus Pirate будет обновлен прошивкой STK500v2, вы можете подключить его к порту SPI. Если вам повезет, у производителя устройства есть разъемы на плате, к которым вы можете подключиться, но в любом случае вам нужно будет найти и проверить подключения заголовка до подключения Bus Pirate – и, если необходимо, припаять некоторые провода или разъемы к плате. Другой вариант – напрямую подключиться к микропроцессору.

На этом этапе таблица данных пригодится для определения распиновки MCU.Используя таблицу данных Atmega2561, вам нужно будет определить и найти контакты SPI «Power» и «Ground».

  • MOSI = серийный вход Master Out
  • MISO = Master In Serial Out
  • SCLM = последовательные часы
  • RESET = Сброс микроконтроллера
  • GND = Земля
  • Vcc = напряжение обычно 3,3 В постоянного тока

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


Источник изображения

После этого вы можете подключить Bus Pirate к портам SPI чипа:

Atmega2561 Автобус Пиратский
Штифт SCK 11 SCLK
MOSI контакт 12 MOSI
MISO контакт 13 MISO
Пин сброса 20 CS
Вывод Vcc 21 Vcc 3. 3vdc
GND контакт 22 GCC

После подключения вы можете использовать приложение avrdude для извлечения флэш-памяти из микроконтроллера ATmega 2561, используя следующую команду:

avrdude -p m2561 -c stk500v2 e -P / dev / ttyUSB0 -u flash: r: flash.bin: r

Микроконтроллер Atmel AVR указывается с помощью переключателя -p . Переключатель -c идентифицирует устройство интерфейса SPI, -P указывает на местоположение устройства Bus Pirate – в этом случае он подключен к системе как ttyUSB0 – и, наконец, -u сообщает avrdude извлечь во флеш-память и запишите его во флеш-память.bin.

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

Итак, как видите, этот процесс достаточно прост, если у вас есть правильные инструменты, программное обеспечение и таблицы данных для MCU, из которого вы собираетесь извлечь прошивку. Обязательно ознакомьтесь с другими блогами из этой серии здесь:

Нужна помощь в обеспечении безопасности вашего Интернета вещей? Узнайте больше о наших услугах по тестированию безопасности Интернета вещей.
Начать

Загрузка вашего ATtiny85

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

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

Что такое загрузчик?

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

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

Загрузчики делают жизнь удобной на этапе прототипирования любого проекта, а также удобны для продуктов, микропрограммы которых необходимо обновлять с течением времени. С помощью загрузчика вы сможете загрузить код из Arduino IDE в ATtiny85 через USB-соединение.Это означает, что вам не нужно удалять MCU из вашей схемы между циклами программирования.

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

Как записать загрузчик на ATtiny85

Мы можем загрузить загрузчик, используя Arduino в качестве ISP или внутрисистемного программиста.Это позволяет загружать новые программы в ATtiny, не удаляя чип из схемы, в которой он используется.

По умолчанию в Arduino IDE отсутствует возможность загрузки напрямую в ATtiny. Это можно легко исправить с помощью «менеджера дополнительных досок» программы, который можно найти, перейдя по следующему адресу: Файл> Настройки

В нижней части окна настроек есть место для ввода URL-адресов дополнительного менеджера досок. Перед тем, как нажать «ОК», введите следующее:

https: // raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Это добавит поддержку ATtiny85, любезно предоставленную Дэвидом Меллисом, одним из соучредителей Arduino.

Вам нужно будет выбрать и установить пакет из Boards Manager, прежде чем чип станет видимым в списке «плат».

Использование Arduino в качестве ISP

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

Наряду с заземлением и напряжением, это означает соединение контактов следующим образом:

Вам также потребуется установить небольшой конденсатор (10 мкФ) между контактами сброса и заземления. Это предотвратит непреднамеренную перезагрузку устройства во время загрузки.

В меню «Инструменты» необходимо выбрать процессор и внутреннюю тактовую частоту 8 МГц.Затем убедитесь, что выбран «Arduino as ISP». Затем вы можете начать загружать некоторые программы, но они будут на частоте 1 МГц, а не 8. Чтобы работать на более высокой скорости, вам нужно будет записать новый загрузчик. Сделайте это, выбрав «Записать загрузчик» в нижней части меню «Инструменты».

Если у вас есть внешний кристалл, то вы можете заставить ATtiny85 работать еще быстрее на 16 МГц – однако пока мы рекомендуем придерживаться более низких скоростей. После того, как вы все настроили и запустили, можно начинать добавлять дополнительные компоненты.

Использование программатора AVR

Если вы предпочитаете не использовать Arduino в качестве ISP, вы можете вместо этого использовать специальный программатор AVR. Эти устройства бывают разных форм – простейшая из них – это USB-накопитель со слотом для 8-контактного блока IC. Такая конструкция устраняет необходимость в сложной проводке или пайке – отличный тому пример – Tiny AVR Programmer от SparkFun. Он имеет восемь выходов, совместимых с макетной платой, которые подключаются непосредственно к контактам микроконтроллера. Это также позволяет использовать программатор с более крупными микроконтроллерами, прикрепленными к макетной плате.

Для использования специального программатора AVR необходимо найти и установить соответствующие драйверы, а также выбрать ATtiny85 из списка плат. Убедитесь, что вы не выбрали вариант, требующий внешних часов, если они не подключены; это может сделать ваш MCU неработоспособным. Выберите «USBtinyISP» в меню «Инструменты»> «Программист» и подключите микроконтроллер к плате, и вы готовы начать загрузку образца кода.

Загрузка образца кода

Как мы увидим, не каждый проект Arduino будет без проблем работать на ATtiny85.Чтобы убедиться, что все работает правильно, мы начнем с чего-нибудь простого: проекта «Blink», который вы можете найти в меню примеров Arduino IDE. Вам нужно будет подключить светодиод вместе с соответствующим резистором к выводу «0» ATtiny. Вам также необходимо изменить номер пина в проекте с 13 на 0.

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

После того, как вы запустили программу мигания, вы можете переходить к другим программам, как вы это делали, когда впервые запустили свою Arduino. Однако эта версия схемы более обтекаемая и элегантная. Если вы установите аккумулятор, вам не нужно будет использовать Arduino в качестве источника питания – и вы можете отсоединить его до тех пор, пока вам не понадобится загрузить данные программы в ATtiny.

Функции ATtiny85

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

Цена

Arduino стоит более 20 долларов, а ATtiny85 – менее доллара. Даже если вы сравните его с более многофункциональными автономными микроконтроллерами, такими как ATmega328.

Размер

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

Потребляемая мощность

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

  • В активном режиме с низким энергопотреблением он обеспечивает работу 1 МГц, 1,8 В при 300 мкА.
  • В спящем режиме с пониженным энергопотреблением ему потребуется всего 100 нА (наноампер).

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

Напряжение

ATtiny принимает любое напряжение от 1,8 до 5,5 В и соответственно регулирует свои логические уровни.

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

Ограничения ATtiny85

Когда вы загружаете код на ATtiny85, вы обнаружите, что почти все команды, к которым вы привыкли на Arduino UNO на базе ATmega, будут работать нормально. Однако есть несколько исключений – учитывая, что ATtiny не хватает аппаратных возможностей UART и i2c ATmega, любые проекты, которые включают последовательную передачу и библиотеки Wire, не будут работать должным образом. Более того, любые проекты, которые объединяют множество различных компонентов, будут ограничены меньшим количеством GPIO и памятью ATtiny.

***

Мы рассмотрели, как установить ваши программы на новый ATtiny85. Если у вас есть доступ к Arduino, то использовать его в качестве интернет-провайдера для загрузки кода в ATtiny удобно – хотя вложение нескольких долларов в специализированного программиста может упростить задачу.

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

прошивка аттини и трекбола · a4ad6a39df – реформа

@@ -0,0 +1,282 @@
// прошивка, которая загружается в ADNS при каждой загрузке

#include ч>

// Прошивка «PMW3360DM_srom_0x04»

const unsigned short firmware_length = 4094;

const unsigned char firmware_data [] PROGMEM = {
0x01, 0x04, 0x8e, 0x96, 0x6e, 0x77, 0x3e, 0xfe, 0x7e, 0x5f, 0x1d, 0xb8, 0xf2, 0x66, 0x4e,
0xff, 0x5d, 0x19, 0xb0, 0xc2, 0x04, 0x69, 0x54, 0x2a, 0xd6, 0x2e, 0xbf, 0xdd, 0x19, 0xb0,
0xc3, 0xe5, 0x29, 0xb1, 0xe0, 0x23, 0xa5, 0xa9, 0xb1, 0xc1, 0x00, 0x82, 0x67, 0x4c, 0x1a,
0x97, 0x8d, 0x79, 0x51, 0x20, 0xc7, 0x06, 0x8e, 0x7c, 0x7c, 0x7a, 0x76, 0x4f, 0xfd, 0x59,
0x30, 0xe2, 0x46, 0x0e, 0x9e, 0xbe, 0xdf, 0x1d, 0x99, 0x91, 0xa0, 0xa5, 0xa1, 0xa9, 0xd0,
0x22, 0xc6, 0xef, 0x5c, 0x1b, 0x95, 0x89, 0x90, 0xa2, 0xa7, 0xcc, 0xfb, 0x55, 0x28, 0xb3,
0xe4, 0x4a, 0xf7, 0x6c, 0x3b, 0xf4, 0x6a, 0x56, 0x2e, 0xde, 0x1f, 0x9d, 0xb8, 0xd3, 0x05,
0x88, 0x92, 0xa6, 0xce, 0x1e, 0xbe, 0xdf, 0x1d, 0x99, 0xb0, 0xe2, 0x46, 0xef, 0x5c, 0x07,
0x11, 0x5d, 0x98, 0x0b, 0x9d, 0x94, 0x97, 0xee, 0x4e, 0x45, 0x33, 0x6b, 0x44, 0xc7, 0x29,
0x56, 0x27, 0x30, 0xc6, 0xa7, 0xd5, 0xf2, 0x56, 0xdf, 0xb4, 0x38, 0x62, 0xcb, 0xa0, 0xb6,
0xe3, 0x0f, 0x84, 0x06, 0x24, 0x05, 0x65, 0x6f, 0x76, 0x89, 0xb5, 0x77, 0x41, 0x27, 0x82,
0x66, 0x65, 0x82, 0xcc, 0xd5, 0xe6, 0x20, 0xd5, 0x27, 0x17, 0xc5, 0xf8, 0x03, 0x23, 0x7c,
0x5f, 0x64, 0xa5, 0x1d, 0xc1, 0xd6, 0x36, 0xcb, 0x4c, 0xd4, 0xdb, 0x66, 0xd7, 0x8b, 0xb1,
0x99, 0x7e, 0x6f, 0x4c, 0x36, 0x40, 0x06, 0xd6, 0xeb, 0xd7, 0xa2, 0xe4, 0xf4, 0x95, 0x51,
0x5a, 0x54, 0x96, 0xd5, 0x53, 0x44, 0xd7, 0x8c, 0xe0, 0xb9, 0x40, 0x68, 0xd2, 0x18, 0xe9,
0xdd, 0x9a, 0x23, 0x92, 0x48, 0xee, 0x7f, 0x43, 0xaf, 0xea, 0x77, 0x38, 0x84, 0x8c, 0x0a,
0x72, 0xaf, 0x69, 0xf8, 0xdd, 0xf1, 0x24, 0x83, 0xa3, 0xf8, 0x4a, 0xbf, 0xf5, 0x94, 0x13,
0xdb, 0xbb, 0xd8, 0xb4, 0xb3, 0xa0, 0xfb, 0x45, 0x50, 0x60, 0x30, 0x59, 0x12, 0x31, 0x71,
0xa2, 0xd3, 0x13, 0xe7, 0xfa, 0xe7, 0xce, 0x0f, 0x63, 0x15, 0x0b, 0x6b, 0x94, 0xbb, 0x37,
0x83, 0x26, 0x05, 0x9d, 0xfb, 0x46, 0x92, 0xfc, 0x0a, 0x15, 0xd1, 0x0d, 0x73, 0x92, 0xd6,
0x8c, 0x1b, 0x8c, 0xb8, 0x55, 0x8a, 0xce, 0xbd, 0xfe, 0x8e, 0xfc, 0xed, 0x09, 0x12, 0x83,
0x91, 0x82, 0x51, 0x31, 0x23, 0xfb, 0xb4, 0x0c, 0x76, 0xad, 0x7c, 0xd9, 0xb4, 0x4b, 0xb2,
0x67, 0x14, 0x09, 0x9c, 0x7f, 0x0c, 0x18, 0xba, 0x3b, 0xd6, 0x8e, 0x14, 0x2a, 0xe4, 0x1b,
0x52, 0x9f, 0x2b, 0x7d, 0xe1, 0xfb, 0x6a, 0x33, 0x02, 0xfa, 0xac, 0x5a, 0xf2, 0x3e, 0x88,
0x7e, 0xae, 0xd1, 0xf3, 0x78, 0xe8, 0x05, 0xd1, 0xe3, 0xdc, 0x21, 0xf6, 0xe1, 0x9a, 0xbd,
0x17, 0x0e, 0xd9, 0x46, 0x9b, 0x88, 0x03, 0xea, 0xf6, 0x66, 0xbe, 0x0e, 0x1b, 0x50, 0x49,
0x96, 0x40, 0x97, 0xf1, 0xf1, 0xe4, 0x80, 0xa6, 0x6e, 0xe8, 0x77, 0x34, 0xbf, 0x29, 0x40,
0x44, 0xc2, 0xff, 0x4e, 0x98, 0xd3, 0x9c, 0xa3, 0x32, 0x2b, 0x76, 0x51, 0x04, 0x09, 0xe7,
0xa9, 0xd1, 0xa6, 0x32, 0xb1, 0x23, 0x53, 0xe2, 0x47, 0xab, 0xd6, 0xf5, 0x69, 0x5c, 0x3e,
0x5f, 0xfa, 0xae, 0x45, 0x20, 0xe5, 0xd2, 0x44, 0xff, 0x39, 0x32, 0x6d, 0xfd, 0x27, 0x57,
0x5c, 0xfd, 0xf0, 0xde, 0xc1, 0xb5, 0x99, 0xe5, 0xf5, 0x1c, 0x77, 0x01, 0x75, 0xc5, 0x6d,
0x58, 0x92, 0xf2, 0xb2, 0x47, 0x00, 0x01, 0x26, 0x96, 0x7a, 0x30, 0xff, 0xb7, 0xf0, 0xef,
0x77, 0xc1, 0x8a, 0x5d, 0xdc, 0xc0, 0xd1, 0x29, 0x30, 0x1e, 0x77, 0x38, 0x7a, 0x94, 0xf1,
0xb8, 0x7a, 0x7e, 0xef, 0xa4, 0xd1, 0xac, 0x31, 0x4a, 0xf2, 0x5d, 0x64, 0x3d, 0xb2, 0xe2,
0xf0, 0x08, 0x99, 0xfc, 0x70, 0xee, 0x24, 0xa7, 0x7e, 0xee, 0x1e, 0x20, 0x69, 0x7d, 0x44,
0xbf, 0x87, 0x42, 0xdf, 0x88, 0x3b, 0x0c, 0xda, 0x42, 0xc9, 0x04, 0xf9, 0x45, 0x50, 0xfc,
0x83, 0x8f, 0x11, 0x6a, 0x72, 0xbc, 0x99, 0x95, 0xf0, 0xac, 0x3d, 0xa7, 0x3b, 0xcd, 0x1c,
0xe2, 0x88, 0x79, 0x37, 0x11, 0x5f, 0x39, 0x89, 0x95, 0x0a, 0x16, 0x84, 0x7a, 0xf6, 0x8a,
0xa4, 0x28, 0xe4, 0xed, 0x83, 0x80, 0x3b, 0xb1, 0x23, 0xa5, 0x03, 0x10, 0xf4, 0x66, 0xea,
0xbb, 0x0c, 0x0f, 0xc5, 0xec, 0x6c, 0x69, 0xc5, 0xd3, 0x24, 0xab, 0xd4, 0x2a, 0xb7, 0x99,
0x88, 0x76, 0x08, 0xa0, 0xa8, 0x95, 0x7c, 0xd8, 0x38, 0x6d, 0xcd, 0x59, 0x02, 0x51, 0x4b,
0xf1, 0xb5, 0x2b, 0x50, 0xe3, 0xb6, 0xbd, 0xd0, 0x72, 0xcf, 0x9e, 0xfd, 0x6e, 0xbb, 0x44,
0xc8, 0x24, 0x8a, 0x77, 0x18, 0x8a, 0x13, 0x06, 0xef, 0x97, 0x7d, 0xfa, 0x81, 0xf0, 0x31,
0xe6, 0xfa, 0x77, 0xed, 0x31, 0x06, 0x31, 0x5b, 0x54, 0x8a, 0x9f, 0x30, 0x68, 0xdb, 0xe2,
0x40, 0xf8, 0x4e, 0x73, 0xfa, 0xab, 0x74, 0x8b, 0x10, 0x58, 0x13, 0xdc, 0xd2, 0xe6, 0x78,
0xd1, 0x32, 0x2e, 0x8a, 0x9f, 0x2c, 0x58, 0x06, 0x48, 0x27, 0xc5, 0xa9, 0x5e, 0x81, 0x47,
0x89, 0x46, 0x21, 0x91, 0x03, 0x70, 0xa4, 0x3e, 0x88, 0x9c, 0xda, 0x33, 0x0a, 0xce, 0xbc,
0x8b, 0x8e, 0xcf, 0x9f, 0xd3, 0x71, 0x80, 0x43, 0xcf, 0x6b, 0xa9, 0x51, 0x83, 0x76, 0x30,
0x82, 0xc5, 0x6a, 0x85, 0x39, 0x11, 0x50, 0x1a, 0x82, 0xdc, 0x1e, 0x1c, 0xd5, 0x7d, 0xa9,
0x71, 0x99, 0x33, 0x47, 0x19, 0x97, 0xb3, 0x5a, 0xb1, 0xdf, 0xed, 0xa4, 0xf2, 0xe6, 0x26,
0x84, 0xa2, 0x28, 0x9a, 0x9e, 0xdf, 0xa6, 0x6a, 0xf4, 0xd6, 0xfc, 0x2e, 0x5b, 0x9d, 0x1a,
0x2a, 0x27, 0x68, 0xfb, 0xc1, 0x83, 0x21, 0x4b, 0x90, 0xe0, 0x36, 0xdd, 0x5b, 0x31, 0x42,
0x55, 0xa0, 0x13, 0xf7, 0xd0, 0x89, 0x53, 0x71, 0x99, 0x57, 0x09, 0x29, 0xc5, 0xf3, 0x21,
0xf8, 0x37, 0x2f, 0x40, 0xf3, 0xd4, 0xaf, 0x16, 0x08, 0x36, 0x02, 0xfc, 0x77, 0xc5, 0x8b,
0x04, 0x90, 0x56, 0xb9, 0xc9, 0x67, 0x9a, 0x99, 0xe8, 0x00, 0xd3, 0x86, 0xff, 0x97, 0x2d,
0x08, 0xe9, 0xb7, 0xb3, 0x91, 0xbc, 0xdf, 0x45, 0xc6, 0xed, 0x0f, 0x8c, 0x4c, 0x1e, 0xe6,
0x5b, 0x6e, 0x38, 0x30, 0xe4, 0xaa, 0xe3, 0x95, 0xde, 0xb9, 0xe4, 0x9a, 0xf5, 0xb2, 0x55,
0x9a, 0x87, 0x9b, 0xf6, 0x6a, 0xb2, 0xf2, 0x77, 0x9a, 0x31, 0xf4, 0x7a, 0x31, 0xd1, 0x1d,
0x04, 0xc0, 0x7c, 0x32, 0xa2, 0x9e, 0x9a, 0xf5, 0x62, 0xf8, 0x27, 0x8d, 0xbf, 0x51, 0xff,
0xd3, 0xdf, 0x64, 0x37, 0x3f, 0x2a, 0x6f, 0x76, 0x3a, 0x7d, 0x77, 0x06, 0x9e, 0x77, 0x7f,
0x5e, 0xeb, 0x32, 0x51, 0xf9, 0x16, 0x66, 0x9a, 0x09, 0xf3, 0xb0, 0x08, 0xa4, 0x70, 0x96,
0x46, 0x30, 0xff, 0xda, 0x4f, 0xe9, 0x1b, 0xed, 0x8d, 0xf8, 0x74, 0x1f, 0x31, 0x92, 0xb3,
0x73, 0x17, 0x36, 0xdb, 0x91, 0x30, 0xd6, 0x88, 0x55, 0x6b, 0x34, 0x77, 0x87, 0x7a, 0xe7,
0xee, 0x06, 0xc6, 0x1c, 0x8c, 0x19, 0x0c, 0x48, 0x46, 0x23, 0x5e, 0x9c, 0x07, 0x5c, 0xbf,
0xb4, 0x7e, 0xd6, 0x4f, 0x74, 0x9c, 0xe2, 0xc5, 0x50, 0x8b, 0xc5, 0x8b, 0x15, 0x90, 0x60,
0x62, 0x57, 0x29, 0xd0, 0x13, 0x43, 0xa1, 0x80, 0x88, 0x91, 0x00, 0x44, 0xc7, 0x4d, 0x19,
0x86, 0xcc, 0x2f, 0x2a, 0x75, 0x5a, 0xfc, 0xeb, 0x97, 0x2a, 0x70, 0xe3, 0x78, 0xd8, 0x91,
0xb0, 0x4f, 0x99, 0x07, 0xa3, 0x95, 0xea, 0x24, 0x21, 0xd5, 0xde, 0x51, 0x20, 0x93, 0x27,
0x0a, 0x30, 0x73, 0xa8, 0xff, 0x8a, 0x97, 0xe9, 0xa7, 0x6a, 0x8e, 0x0d, 0xe8, 0xf0, 0xdf,
0xec, 0xea, 0xb4, 0x6c, 0x1d, 0x39, 0x2a, 0x62, 0x2d, 0x3d, 0x5a, 0x8b, 0x65, 0xf8, 0x90,
0x05, 0x2e, 0x7e, 0x91, 0x2c, 0x78, 0xef, 0x8e, 0x7a, 0xc1, 0x2f, 0xac, 0x78, 0xee, 0xaf,
0x28, 0x45, 0x06, 0x4c, 0x26, 0xaf, 0x3b, 0xa2, 0xdb, 0xa3, 0x93, 0x06, 0xb5, 0x3c, 0xa5,
0xd8, 0xee, 0x8f, 0xaf, 0x25, 0xcc, 0x3f, 0x85, 0x68, 0x48, 0xa9, 0x62, 0xcc, 0x97, 0x8f,
0x7f, 0x2a, 0xea, 0xe0, 0x15, 0x0a, 0xad, 0x62, 0x07, 0xbd, 0x45, 0xf8, 0x41, 0xd8, 0x36,
0xcb, 0x4c, 0xdb, 0x6e, 0xe6, 0x3a, 0xe7, 0xda, 0x15, 0xe9, 0x29, 0x1e, 0x12, 0x10, 0xa0,
0x14, 0x2c, 0x0e, 0x3d, 0xf4, 0xbf, 0x39, 0x41, 0x92, 0x75, 0x0b, 0x25, 0x7b, 0xa3, 0xce,
0x39, 0x9c, 0x15, 0x64, 0xc8, 0xfa, 0x3d, 0xef, 0x73, 0x27, 0xfe, 0x26, 0x2e, 0xce, 0xda,
0x6e, 0xfd, 0x71, 0x8e, 0xdd, 0xfe, 0x76, 0xee, 0xdc, 0x12, 0x5c, 0x02, 0xc5, 0x3a, 0x4e,
0x4e, 0x4f, 0xbf, 0xca, 0x40, 0x15, 0xc7, 0x6e, 0x8d, 0x41, 0xf1, 0x10, 0xe0, 0x4f, 0x7e,
0x97, 0x7f, 0x1c, 0xae, 0x47, 0x8e, 0x6b, 0xb1, 0x25, 0x31, 0xb0, 0x73, 0xc7, 0x1b, 0x97,
0x79, 0xf9, 0x80, 0xd3, 0x66, 0x22, 0x30, 0x07, 0x74, 0x1e, 0xe4, 0xd0, 0x80, 0x21, 0xd6,
0xee, 0x6b, 0x6c, 0x4f, 0xbf, 0xf5, 0xb7, 0xd9, 0x09, 0x87, 0x2f, 0xa9, 0x14, 0xbe, 0x27,
0xd9, 0x72, 0x50, 0x01, 0xd4, 0x13, 0x73, 0xa6, 0xa7, 0x51, 0x02, 0x75, 0x25, 0xe1, 0xb3,
0x45, 0x34, 0x7d, 0xa8, 0x8e, 0xeb, 0xf3, 0x16, 0x49, 0xcb, 0x4f, 0x8c, 0xa1, 0xb9, 0x36,
0x85, 0x39, 0x75, 0x5d, 0x08, 0x00, 0xae, 0xeb, 0xf6, 0xea, 0xd7, 0x13, 0x3a, 0x21, 0x5a,
0x5f, 0x30, 0x84, 0x52, 0x26, 0x95, 0xc9, 0x14, 0xf2, 0x57, 0x55, 0x6b, 0xb1, 0x10, 0xc2,
0xe1, 0xbd, 0x3b, 0x51, 0xc0, 0xb7, 0x55, 0x4c, 0x71, 0x12, 0x26, 0xc7, 0x0d, 0xf9, 0x51,
0xa4, 0x38, 0x02, 0x05, 0x7f, 0xb8, 0xf1, 0x72, 0x4b, 0xbf, 0x71, 0x89, 0x14, 0xf3, 0x77,
0x38, 0xd9, 0x71, 0x24, 0xf3, 0x00, 0x11, 0xa1, 0xd8, 0xd4, 0x69, 0x27, 0x08, 0x37, 0x35,
0xc9, 0x11, 0x9d, 0x90, 0x1c, 0x0e, 0xe7, 0x1c, 0xff, 0x2d, 0x1e, 0xe8, 0x92, 0xe1, 0x18,
0x10, 0x95, 0x7c, 0xe0, 0x80, 0xf4, 0x96, 0x43, 0x21, 0xf9, 0x75, 0x21, 0x64, 0x38, 0xdd,
0x9f, 0x1e, 0x95, 0x16, 0xda, 0x56, 0x1d, 0x4f, 0x9a, 0x53, 0xb2, 0xe2, 0xe4, 0x18, 0xcb,
0x6b, 0x1a, 0x65, 0xeb, 0x56, 0xc6, 0x3b, 0xe5, 0xfe, 0xd8, 0x26, 0x3f, 0x3a, 0x84, 0x59,
0x72, 0x66, 0xa2, 0xf3, 0x75, 0xff, 0xfb, 0x60, 0xb3, 0x22, 0xad, 0x3f, 0x2d, 0x6b, 0xf9,
0xeb, 0xea, 0x05, 0x7c, 0xd8, 0x8f, 0x6d, 0x2c, 0x98, 0x9e, 0x2b, 0x93, 0xf1, 0x5e, 0x46,
0xf0, 0x87, 0x49, 0x29, 0x73, 0x68, 0xd7, 0x7f, 0xf9, 0xf0, 0xe5, 0x7d, 0xdb, 0x1d, 0x75,
0x19, 0xf3, 0xc4, 0x58, 0x9b, 0x17, 0x88, 0xa8, 0x92, 0xe0, 0xbe, 0xbd, 0x8b, 0x1d, 0x8d,
0x9f, 0x56, 0x76, 0xad, 0xaf, 0x29, 0xe2, 0xd9, 0xd5, 0x52, 0xf6, 0xb5, 0x56, 0x35, 0x57,
0x3a, 0xc8, 0xe1, 0x56, 0x43, 0x19, 0x94, 0xd3, 0x04, 0x9b, 0x6d, 0x35, 0xd8, 0x0b, 0x5f,
0x4d, 0x19, 0x8e, 0xec, 0xfa, 0x64, 0x91, 0x0a, 0x72, 0x20, 0x2b, 0xbc, 0x1a, 0x4a, 0xfe,
0x8b, 0xfd, 0xbb, 0xed, 0x1b, 0x23, 0xea, 0xad, 0x72, 0x82, 0xa1, 0x29, 0x99, 0x71, 0xbd,
0xf0, 0x95, 0xc1, 0x03, 0xdd, 0x7b, 0xc2, 0xb2, 0x3c, 0x28, 0x54, 0xd3, 0x68, 0xa4, 0x72,
0xc8, 0x66, 0x96, 0xe0, 0xd1, 0xd8, 0x7f, 0xf8, 0xd1, 0x26, 0x2b, 0xf7, 0xad, 0xba, 0x55,
0xca, 0x15, 0xb9, 0x32, 0xc3, 0xe5, 0x88, 0x97, 0x8e, 0x5c, 0xfb, 0x92, 0x25, 0x8b, 0xbf,
0xa2, 0x45, 0x55, 0x7a, 0xa7, 0x6f, 0x8b, 0x57, 0x5b, 0xcf, 0x0e, 0xcb, 0x1d, 0xfb, 0x20,
0x82, 0x77, 0xa8, 0x8c, 0xcc, 0x16, 0xce, 0x1d, 0xfa, 0xde, 0xcc, 0x0b, 0x62, 0xfe, 0xcc,
0xe1, 0xb7, 0xf0, 0xc3, 0x81, 0x64, 0x73, 0x40, 0xa0, 0xc2, 0x4d, 0x89, 0x11, 0x75, 0x33,
0x55, 0x33, 0x8d, 0xe8, 0x4a, 0xfd, 0xea, 0x6e, 0x30, 0x0b, 0xd7, 0x31, 0x2c, 0xde, 0x47,
0xe3, 0xbf, 0xf8, 0x55, 0x42, 0xe2, 0x7f, 0x59, 0xe5, 0x17, 0xef, 0x99, 0x34, 0x69, 0x91,
0xb1, 0x23, 0x8e, 0x20, 0x87, 0x2d, 0xa8, 0xfe, 0xd5, 0x8a, 0xf3, 0x84, 0x3a, 0xf0, 0x37,
0xe4, 0x09, 0x00, 0x54, 0xee, 0x67, 0x49, 0x93, 0xe4, 0x81, 0x70, 0xe3, 0x90, 0x4d, 0xef,
0xfe, 0x41, 0xb7, 0x99, 0x7b, 0xc1, 0x83, 0xba, 0x62, 0x12, 0x6f, 0x7d, 0xde, 0x6b, 0xaf,
0xda, 0x16, 0xf9, 0x55, 0x51, 0xee, 0xa6, 0x0c, 0x2b, 0x02, 0xa3, 0xfd, 0x8d, 0xfb, 0x30,
0x17, 0xe4, 0x6f, 0xdf, 0x36, 0x71, 0xc4, 0xca, 0x87, 0x25, 0x48, 0xb0, 0x47, 0xec, 0xea,
0xb4, 0xbf, 0xa5, 0x4d, 0x9b, 0x9f, 0x02, 0x93, 0xc4, 0xe3, 0xe4, 0xe8, 0x42, 0x2d, 0x68,
0x81, 0x15, 0x0a, 0xeb, 0x84, 0x5b, 0xd6, 0xa8, 0x74, 0xfb, 0x7d, 0x1d, 0xcb, 0x2c, 0xda,
0x46, 0x2a, 0x76, 0x62, 0xce, 0xbc, 0x5c, 0x9e, 0x8b, 0xe7, 0xcf, 0xbe, 0x78, 0xf5, 0x7c,
0xeb, 0xb3, 0x3a, 0x9c, 0xaa, 0x6f, 0xcc, 0x72, 0xd1, 0x59, 0xf2, 0x11, 0x23, 0xd6, 0x3f,
0x48, 0xd1, 0xb7, 0xce, 0xb0, 0xbf, 0xcb, 0xea, 0x80, 0xde, 0x57, 0xd4, 0x5e, 0x97, 0x2f,
0x75, 0xd1, 0x50, 0x8e, 0x80, 0x2c, 0x66, 0x79, 0xbf, 0x72, 0x4b, 0xbd, 0x8a, 0x81, 0x6c,
0xd3, 0xe1, 0x01, 0xdc, 0xd2, 0x15, 0x26, 0xc5, 0x36, 0xda, 0x2c, 0x1a, 0xc0, 0x27, 0x94,
0xed, 0xb7, 0x9b, 0x85, 0x0b, 0x5e, 0x80, 0x97, 0xc5, 0xec, 0x4f, 0xec, 0x88, 0x5d, 0x50,
0x07, 0x35, 0x47, 0xdc, 0x0b, 0x3b, 0x3d, 0xdd, 0x60, 0xaf, 0xa8, 0x5d, 0x81, 0x38, 0x24,
0x25, 0x5d, 0x5c, 0x15, 0xd1, 0xde, 0xb3, 0xab, 0xec, 0x05, 0x69, 0xef, 0x83, 0xed, 0x57,
0x54, 0xb8, 0x64, 0x64, 0x11, 0x16, 0x32, 0x69, 0xda, 0x9f, 0x2d, 0x7f, 0x36, 0xbb, 0x44,
0x5a, 0x34, 0xe8, 0x7f, 0xbf, 0x03, 0xeb, 0x00, 0x7f, 0x59, 0x68, 0x22, 0x79, 0xcf, 0x73,
0x6c, 0x2c, 0x29, 0xa7, 0xa1, 0x5f, 0x38, 0xa1, 0x1d, 0xf0, 0x20, 0x53, 0xe0, 0x1a, 0x63,
0x14, 0x58, 0x71, 0x10, 0xaa, 0x08, 0x0c, 0x3e, 0x16, 0x1a, 0x60, 0x22, 0x82, 0x7f, 0xba,
0xa4, 0x43, 0xa0, 0xd0, 0xac, 0x1b, 0xd5, 0x6b, 0x64, 0xb5, 0x14, 0x93, 0x31, 0x9e, 0x53,
0x50, 0xd0, 0x57, 0x66, 0xee, 0x5a, 0x4f, 0xfb, 0x03, 0x2a, 0x69, 0x58, 0x76, 0xf1, 0x83,
0xf7, 0x4e, 0xba, 0x8c, 0x42, 0x06, 0x60, 0x5d, 0x6d, 0xce, 0x60, 0x88, 0xae, 0xa4, 0xc3,
0xf1, 0x03, 0xa5, 0x4b, 0x98, 0xa1, 0xff, 0x67, 0xe1, 0xac, 0xa2, 0xb8, 0x62, 0xd7, 0x6f,
0xa0, 0x31, 0xb4, 0xd2, 0x77, 0xaf, 0x21, 0x10, 0x06, 0xc6, 0x9a, 0xff, 0x1d, 0x09, 0x17,
0x0e, 0x5f, 0xf1, 0xaa, 0x54, 0x34, 0x4b, 0x45, 0x8a, 0x87, 0x63, 0xa6, 0xdc, 0xf9, 0x24,
0x30, 0x67, 0xc6, 0xb2, 0xd6, 0x61, 0x33, 0x69, 0xee, 0x50, 0x61, 0x57, 0x28, 0xe7, 0x7e,
0xee, 0xec, 0x3a, 0x5a, 0x73, 0x4e, 0xa8, 0x8d, 0xe4, 0x18, 0xea, 0xec, 0x41, 0x64, 0xc8,
0xe2, 0xe8, 0x66, 0xb6, 0x2d, 0xb6, 0xfb, 0x6a, 0x6c, 0x16, 0xb3, 0xdd, 0x46, 0x43, 0xb9,
0x73, 0x00, 0x6a, 0x71, 0xed, 0x4e, 0x9d, 0x25, 0x1a, 0xc3, 0x3c, 0x4a, 0x95, 0x15, 0x99,
0x35, 0x81, 0x14, 0x02, 0xd6, 0x98, 0x9b, 0xec, 0xd8, 0x23, 0x3b, 0x84, 0x29, 0xaf, 0x0c,
0x99, 0x83, 0xa6, 0x9a, 0x34, 0x4f, 0xfa, 0xe8, 0xd0, 0x3c, 0x4b, 0xd0, 0xfb, 0xb6, 0x68,
0xb8, 0x9e, 0x8f, 0xcd, 0xf7, 0x60, 0x2d, 0x7a, 0x22, 0xe5, 0x7d, 0xab, 0x65, 0x1b, 0x95,
0xa7, 0xa8, 0x7f, 0xb6, 0x77, 0x47, 0x7b, 0x5f, 0x8b, 0x12, 0x72, 0xd0, 0xd4, 0x91, 0xef,
0xde, 0x19, 0x50, 0x3c, 0xa7, 0x8b, 0xc4, 0xa9, 0xb3, 0x23, 0xcb, 0x76, 0xe6, 0x81, 0xf0,
0xc1, 0x04, 0x8f, 0xa3, 0xb8, 0x54, 0x5b, 0x97, 0xac, 0x19, 0xff, 0x3f, 0x55, 0x27, 0x2f,
0xe0, 0x1d, 0x42, 0x9b, 0x57, 0xfc, 0x4b, 0x4e, 0x0f, 0xce, 0x98, 0xa9, 0x43, 0x57, 0x03,
0xbd, 0xe7, 0xc8, 0x94, 0xdf, 0x6e, 0x36, 0x73, 0x32, 0xb4, 0xef, 0x2e, 0x85, 0x7a, 0x6e,
0xfc, 0x6c, 0x18, 0x82, 0x75, 0x35, 0x90, 0x07, 0xf3, 0xe4, 0x9f, 0x3e, 0xdc, 0x68, 0xf3,
0xb5, 0xf3, 0x19, 0x80, 0x92, 0x06, 0x99, 0xa2, 0xe8, 0x6f, 0xff, 0x2e, 0x7f, 0xae, 0x42,
0xa4, 0x5f, 0xfb, 0xd4, 0x0e, 0x81, 0x2b, 0xc3, 0x04, 0xff, 0x2b, 0xb3, 0x74, 0x4e, 0x36,
0x5b, 0x9c, 0x15, 0x00, 0xc6, 0x47, 0x2b, 0xe8, 0x8b, 0x3d, 0xf1, 0x9c, 0x03, 0x9a, 0x58,
0x7f, 0x9b, 0x9c, 0xbf, 0x85, 0x49, 0x79, 0x35, 0x2e, 0x56, 0x7b, 0x41, 0x14, 0x39, 0x47,
0x83, 0x26, 0xaa, 0x07, 0x89, 0x98, 0x11, 0x1b, 0x86, 0xe7, 0x73, 0x7a, 0xd8, 0x7d, 0x78,
0x61, 0x53, 0xe9, 0x79, 0xf5, 0x36, 0x8d, 0x44, 0x92, 0x84, 0xf9, 0x13, 0x50, 0x58, 0x3b,
0xa4, 0x6a, 0x36, 0x65, 0x49, 0x8e, 0x3c, 0x0e, 0xf1, 0x6f, 0xd2, 0x84, 0xc4, 0x7e, 0x8e,
0x3f, 0x39, 0xae, 0x7c, 0x84, 0xf1, 0x63, 0x37, 0x8e, 0x3c, 0xcc, 0x3e, 0x44, 0x81, 0x45,
0xf1, 0x4b, 0xb9, 0xed, 0x6b, 0x36, 0x5d, 0xbb, 0x20, 0x60, 0x1a, 0x0f, 0xa3, 0xaa, 0x55,
0x77, 0x3a, 0xa9, 0xae, 0x37, 0x4d, 0xba, 0xb8, 0x86, 0x6b, 0xbc, 0x08, 0x50, 0xf6, 0xcc,
0xa4, 0xbd, 0x1d, 0x40, 0x72, 0xa5, 0x86, 0xfa, 0xe2, 0x10, 0xae, 0x3d, 0x58, 0x4b, 0x97,
0xf3, 0x43, 0x74, 0xa9, 0x9e, 0xeb, 0x21, 0xb7, 0x01, 0xa4, 0x86, 0x93, 0x97, 0xee, 0x2f,
0x4f, 0x3b, 0x86, 0xa1, 0x41, 0x6f, 0x41, 0x26, 0x90, 0x78, 0x5c, 0x7f, 0x30, 0x38, 0x4b,
0x3f, 0xaa, 0xec, 0xed, 0x5c, 0x6f, 0x0e, 0xad, 0x43, 0x87, 0xfd, 0x93, 0x35, 0xe6, 0x01,
0xef, 0x41, 0x26, 0x90, 0x99, 0x9e, 0xfb, 0x19, 0x5b, 0xad, 0xd2, 0x91, 0x8a, 0xe0, 0x46,
0xaf, 0x65, 0xfa, 0x4f, 0x84, 0xc1, 0xa1, 0x2d, 0xcf, 0x45, 0x8b, 0xd3, 0x85, 0x50, 0x55,
0x7c, 0xf9, 0x67, 0x88, 0xd4, 0x4e, 0xe9, 0xd7, 0x6b, 0x61, 0x54, 0xa1, 0xa4, 0xa6, 0xa2,
0xc2, 0xbf, 0x30, 0x9c, 0x40, 0x9f, 0x5f, 0xd7, 0x69, 0x2b, 0x24, 0x82, 0x5e, 0xd9, 0xd6,
0xa7, 0x12, 0x54, 0x1a, 0xf7, 0x55, 0x9f, 0x76, 0x50, 0xa9, 0x95, 0x84, 0xe6, 0x6b, 0x6d,
0xb5, 0x96, 0x54, 0xd6, 0xcd, 0xb3, 0xa1, 0x9b, 0x46, 0xa7, 0x94, 0x4d, 0xc4, 0x94, 0xb4,
0x98, 0xe3, 0xe1, 0xe2, 0x34, 0xd5, 0x33, 0x16, 0x07, 0x54, 0xcd, 0xb7, 0x77, 0x53, 0xdb,
0x4f, 0x4d, 0x46, 0x9d, 0xe9, 0xd4, 0x9c, 0x8a, 0x36, 0xb6, 0xb8, 0x38, 0x26, 0x6c, 0x0e,
0xff, 0x9c, 0x1b, 0x43, 0x8b, 0x80, 0xcc, 0xb9, 0x3d, 0xda, 0xc7, 0xf1, 0x8a, 0xf2, 0x6d,
0xb8, 0xd7, 0x74, 0x2f, 0x7e, 0x1e, 0xb7, 0xd3, 0x4a, 0xb4, 0xac, 0xfc, 0x79, 0x48, 0x6c,
0xbc, 0x96, 0xb6, 0x94, 0x46, 0x57, 0x2d, 0xb0, 0xa3, 0xfc, 0x1e, 0xb9, 0x52, 0x60, 0x85,
0x2d, 0x41, 0xd0, 0x43, 0x01, 0x1e, 0x1c, 0xd5, 0x7d, 0xfc, 0xf3, 0x96, 0x0d, 0xc7, 0xcb,
0x2a, 0x29, 0x9a, 0x93, 0xdd, 0x88, 0x2d, 0x37, 0x5d, 0xaa, 0xfb, 0x49, 0x68, 0xa0, 0x9c,
0x50, 0x86, 0x7f, 0x68, 0x56, 0x57, 0xf9, 0x79, 0x18, 0x39, 0xd4, 0xe0, 0x01, 0x84, 0x33,
0x61, 0xca, 0xa5, 0xd2, 0xd6, 0xe4, 0xc9, 0x8a, 0x4a, 0x23, 0x44, 0x4e, 0xbc, 0xf0, 0xdc,
0x24, 0xa1, 0xa0, 0xc4, 0xe2, 0x07, 0x3c, 0x10, 0xc4, 0xb5, 0x25, 0x4b, 0x65, 0x63, 0xf4,
0x80, 0xe7, 0xcf, 0x61, 0xb1, 0x71, 0x82, 0x21, 0x87, 0x2c, 0xf5, 0x91, 0x00, 0x32, 0x0c,
0xec, 0xa9, 0xb5, 0x9a, 0x74, 0x85, 0xe3, 0x36, 0x8f, 0x76, 0x4f, 0x9c, 0x6d, 0xce, 0xbc,
0xad, 0x0a, 0x4b, 0xed, 0x76, 0x04, 0xcb, 0xc3, 0xb9, 0x33, 0x9e, 0x01, 0x93, 0x96, 0x69,
0x7d, 0xc5, 0xa2, 0x45, 0x79, 0x9b, 0x04, 0x5c, 0x84, 0x09, 0xed, 0x88, 0x43, 0xc7, 0xab,
0x93, 0x14, 0x26, 0xa1, 0x40, 0xb5, 0xce, 0x4e, 0xbf, 0x2a, 0x42, 0x85, 0x3e, 0x2c, 0x3b,
0x54, 0xe8, 0x12, 0x1f, 0x0e, 0x97, 0x59, 0xb2, 0x27, 0x89, 0xfa, 0xf2, 0xdf, 0x8e, 0x68,
0x59, 0xdc, 0x06, 0xbc, 0xb6, 0x85, 0x0d, 0x06, 0x22, 0xec, 0xb1, 0xcb, 0xe5, 0x04, 0xe6,
0x3d, 0xb3, 0xb0, 0x41, 0x73, 0x08, 0x3f, 0x3c, 0x58, 0x86, 0x63, 0xeb, 0x50, 0xee, 0x1d,
0x2c, 0x37, 0x74, 0xa9, 0xd3, 0x18, 0xa3, 0x47, 0x6e, 0x93, 0x54, 0xad, 0x0a, 0x5d, 0xb8,
0x2a, 0x55, 0x5d, 0x78, 0xf6, 0xee, 0xbe, 0x8e, 0x3c, 0x76, 0x69, 0xb9, 0x40, 0xc2, 0x34,
0xec, 0x2a, 0xb9, 0xed, 0x7e, 0x20, 0xe4, 0x8d, 0x00, 0x38, 0xc7, 0xe6, 0x8f, 0x44, 0xa8,
0x86, 0xce, 0xeb, 0x2a, 0xe9, 0x90, 0xf1, 0x4c, 0xdf, 0x32, 0xfb, 0x73, 0x1b, 0x6d, 0x92,
0x1e, 0x95, 0xfe, 0xb4, 0xdb, 0x65, 0xdf, 0x4d, 0x23, 0x54, 0x89, 0x48, 0xbf, 0x4a, 0x2e,
0x70, 0xd6, 0xd7, 0x62, 0xb4, 0x33, 0x29, 0xb1, 0x3a, 0x33, 0x4c, 0x23, 0x6d, 0xa6, 0x76,
0xa5, 0x21, 0x63, 0x48, 0xe6, 0x90, 0x5d, 0xed, 0x90, 0x95, 0x0b, 0x7a, 0x84, 0xbe, 0xb8,
0x0d, 0x5e, 0x63, 0x0c, 0x62, 0x26, 0x4c, 0x14, 0x5a, 0xb3, 0xac, 0x23, 0xa4, 0x74, 0xa7,
0x6f, 0x33, 0x30, 0x05, 0x60, 0x01, 0x42, 0xa0, 0x28, 0xb7, 0xee, 0x19, 0x38, 0xf1, 0x64,
0x80, 0x82, 0x43, 0xe1, 0x41, 0x27, 0x1f, 0x1f, 0x90, 0x54, 0x7a, 0xd5, 0x23, 0x2e, 0xd1,
0x3d, 0xcb, 0x28, 0xba, 0x58, 0x7f, 0xdc, 0x7c, 0x91, 0x24, 0xe9, 0x28, 0x51, 0x83, 0x6e,
0xc5, 0x56, 0x21, 0x42, 0xed, 0xa0, 0x56, 0x22, 0xa1, 0x40, 0x80, 0x6b, 0xa8, 0xf7, 0x94,
0xca, 0x13, 0x6b, 0x0c, 0x39, 0xd9, 0xfd, 0xe9, 0xf3, 0x6f, 0xa6, 0x9e, 0xfc, 0x70, 0x8a,
0xb3, 0xbc, 0x59, 0x3c, 0x1e, 0x1d, 0x6c, 0xf9, 0x7c, 0xaf, 0xf9, 0x88, 0x71, 0x95, 0xeb,
0x57, 0x00, 0xbd, 0x9f, 0x8c, 0x4f, 0xe1, 0x24, 0x83, 0xc5, 0x22, 0xea, 0xfd, 0xd3, 0x0c,
0xe2, 0x17, 0x18, 0x7c, 0x6a, 0x4c, 0xde, 0x77, 0xb4, 0x53, 0x9b, 0x4c, 0x81, 0xcd, 0x23,
0x60, 0xaa, 0x0e, 0x25, 0x73, 0x9c, 0x02, 0x79, 0x32, 0x30, 0xdf, 0x74, 0xdf, 0x75, 0x19,
0xf4, 0xa5, 0x14, 0x5c, 0xf7, 0x7a, 0xa8, 0xa5, 0x91, 0x84, 0x7c, 0x60, 0x03, 0x06, 0x3b,
0xcd, 0x50, 0xb6, 0x27, 0x9c, 0xfe, 0xb1, 0xdd, 0xcc, 0xd3, 0xb0, 0x59, 0x24, 0xb2, 0xca,
0xe2, 0x1c, 0x81, 0x22, 0x9d, 0x07, 0x8f, 0x8e, 0xb9, 0xbe, 0x4e, 0xfa, 0xfc, 0x39, 0x65,
0xba, 0xbf, 0x9d, 0x12, 0x37, 0x5e, 0x97, 0x7e, 0xf3, 0x89, 0xf5, 0x5d, 0xf5, 0xe3, 0x09,
0x8c, 0x62, 0xb5, 0x20, 0x9d, 0x0c, 0x53, 0x8a, 0x68, 0x1b, 0xd2, 0x8f, 0x75, 0x17, 0x5d,
0xd4, 0xe5, 0xda, 0x75, 0x62, 0x19, 0x14, 0x6a, 0x26, 0x2d, 0xeb, 0xf8, 0xaf, 0x37, 0xf0,
0x6c, 0xa4, 0x55, 0xb1, 0xbc, 0xe2, 0x33, 0xc0, 0x9a, 0xca, 0xb0, 0x11, 0x49, 0x4f, 0x68,
0x9b, 0x3b, 0x6b, 0x3c, 0xcc, 0x13, 0xf6, 0xc7, 0x85, 0x61, 0x68, 0x42, 0xae, 0xbb, 0xdd,
0xcd, 0x45, 0x16, 0x29, 0x1d, 0xea, 0xdb, 0xc8, 0x03, 0x94, 0x3c, 0xee, 0x4f, 0x82, 0x11,
0xc3, 0xec, 0x28, 0xbd, 0x97, 0x05, 0x99, 0xde, 0xd7, 0xbb, 0x5e, 0x22, 0x1f, 0xd4, 0xeb,
0x64, 0xd9, 0x92, 0xd9, 0x85, 0xb7, 0x6a, 0x05, 0x6a, 0xe4, 0x24, 0x41, 0xf1, 0xcd, 0xf0,
0xd8, 0x3f, 0xf8, 0x9e, 0x0e, 0xcd, 0x0b, 0x7a, 0x70, 0x6b, 0x5a, 0x75, 0x0a, 0x6a, 0x33,
0x88, 0xec, 0x17, 0x75, 0x08, 0x70, 0x10, 0x2f, 0x24, 0xcf, 0xc4, 0xe9, 0x42, 0x00, 0x61,
0x94, 0xca, 0x1f, 0x3a, 0x76, 0x06, 0xfa, 0xd2, 0x48, 0x81, 0xf0, 0x77, 0x60, 0x03, 0x45,
0xd9, 0x61, 0xf4, 0xa4, 0x6f, 0x3d, 0xd9, 0x30, 0xc3, 0x04, 0x6b, 0x54, 0x2a, 0xb7, 0xec,
0x3b, 0xf4, 0x4b, 0xf5, 0x68, 0x52, 0x26, 0xce, 0xff, 0x5d, 0x19, 0x91, 0xa0, 0xa3, 0xa5,
0xa9, 0xb1, 0xe0, 0x23, 0xc4, 0x0a, 0x77, 0x4d, 0xf9, 0x51, 0x20, 0xa3, 0xa5, 0xa9, 0xb1,
0xc1, 0x00, 0x82, 0x86, 0x8e, 0x7f, 0x5d, 0x19, 0x91, 0xa0, 0xa3, 0xc4, 0xeb, 0x54, 0x0b,
0x75, 0x68, 0x52, 0x07, 0x8c, 0x9a, 0x97, 0x8d, 0x79, 0x70, 0x62, 0x46, 0xef, 0x5c, 0x1b,
0x95, 0x89, 0x71, 0x41, 0xe1, 0x21, 0xa1, 0xa1, 0xa1, 0xc0, 0x02, 0x67, 0x4c, 0x1a, 0xb6,
0xcf, 0xfd, 0x78, 0x53, 0x24, 0xab, 0xb5, 0xc9, 0xf1, 0x60, 0x23, 0xa5, 0xc8, 0x12, 0x87,
0x6d, 0x58, 0x13, 0x85, 0x88, 0x92, 0x87, 0x6d, 0x58, 0x32, 0xc7, 0x0c, 0x9a, 0x97, 0xac,
0xda, 0x36, 0xee, 0x5e, 0x3e, 0xdf, 0x1d, 0xb8, 0xf2, 0x66, 0x2f, 0xbd, 0xf8, 0x72, 0x47,
0xed, 0x58, 0x13, 0x85, 0x88, 0x92, 0x87, 0x8c, 0x7b, 0x55, 0x09, 0x90, 0xa2, 0xc6, 0xef,
0x3d, 0xf8, 0x53, 0x24, 0xab, 0xd4, 0x2a, 0xb7, 0xec, 0x5a, 0x36, 0xee, 0x5e, 0x3e, 0xdf,
0x3c, 0xfa, 0x76, 0x4f, 0xfd, 0x59, 0x30, 0xe2, 0x46, 0xef, 0x3d, 0xf8, 0x53, 0x05, 0x69,
0x31, 0xc1, 0x00, 0x82, 0x86, 0x8e, 0x7f, 0x5d, 0x19, 0xb0, 0xe2, 0x27, 0xcc, 0xfb, 0x74,
0x4b, 0x14, 0x8b, 0x94, 0x8b, 0x75, 0x68, 0x33, 0xc5, 0x08, 0x92, 0x87, 0x8c, 0x9a, 0xb6,
0xcf, 0x1c, 0xba, 0xd7, 0x0d, 0x98, 0xb2, 0xe6, 0x2f, 0xdc, 0x1b, 0x95, 0x89, 0x71, 0x60,
0x23, 0xc4, 0x0a, 0x96, 0x8f, 0x9c, 0xba, 0xf6, 0x6e, 0x3f, 0xfc, 0x5b, 0x15, 0xa8, 0xd2,
0x26, 0xaf, 0xbd, 0xf8, 0x72, 0x66, 0x2f, 0xdc, 0x1b, 0xb4, 0xcb, 0x14, 0x8b, 0x94, 0xaa,
0xb7, 0xcd, 0xf9, 0x51, 0x01, 0x80, 0x82, 0x86, 0x6f, 0x3d, 0xd9, 0x30, 0xe2, 0x27, 0xcc,
0xfb, 0x74, 0x4b, 0x14, 0xaa, 0xb7, 0xcd, 0xf9, 0x70, 0x43, 0x04, 0x6b, 0x35, 0xc9, 0xf1,
0x60, 0x23, 0xa5, 0xc8, 0xf3, 0x45, 0x08, 0x92, 0x87, 0x6d, 0x58, 0x32, 0xe6, 0x2f, 0xbd,
0xf8, 0x72, 0x66, 0x4e, 0x1e, 0xbe, 0xfe, 0x7e, 0x7e, 0x7e, 0x5f, 0x1d, 0x99, 0x91, 0xa0,
0xa3, 0xc4, 0x0a, 0x77, 0x4d, 0x18, 0x93, 0xa4, 0xab, 0xd4, 0x0b, 0x75, 0x49, 0x10, 0xa2,
0xc6, 0xef, 0x3d, 0xf8, 0x53, 0x24, 0xab, 0xb5, 0xe8, 0x33, 0xe4, 0x4a, 0x16, 0xae, 0xde,
0x1f, 0xbc, 0xdb, 0x15, 0xa8, 0xb3, 0xc5, 0x08, 0x73, 0x45, 0xe9, 0x31, 0xc1, 0xe1, 0x21,
0xa1, 0xa1, 0xa1, 0xc0, 0x02, 0x86, 0x6f, 0x5c, 0x3a, 0xd7, 0x0d, 0x98, 0x93, 0xa4, 0xca,
0x16, 0xae, 0xde, 0x1f, 0x9d, 0x99, 0xb0, 0xe2, 0x46, 0xef, 0x3d, 0xf8, 0x72, 0x47, 0x0c,
0x9a, 0xb6, 0xcf, 0xfd, 0x59, 0x11, 0xa0, 0xa3, 0xa5, 0xc8, 0xf3, 0x45, 0x08, 0x92, 0x87,
0x6d, 0x39, 0xf0, 0x43, 0x04, 0x8a, 0x96, 0xae, 0xde, 0x3e, 0xdf, 0x1d, 0x99, 0x91, 0xa0,
0xc2, 0x06, 0x6f, 0x3d, 0xf8, 0x72, 0x47, 0x0c, 0x9a, 0x97, 0x8d, 0x98, 0x93, 0x85, 0x88,
0x73, 0x45, 0xe9, 0x31, 0xe0, 0x23, 0xa5, 0xa9, 0xd0, 0x03, 0x84, 0x8a, 0x96, 0xae, 0xde,
0x1f, 0xbc, 0xdb, 0x15, 0xa8, 0xd2, 0x26, 0xce, 0xff, 0x5d, 0x19, 0x91, 0x81, 0x80, 0x82,
0x67, 0x2d, 0xd8, 0x13, 0xa4, 0xab, 0xd4, 0x0b, 0x94, 0xaa, 0xb7, 0xcd, 0xf9, 0x51, 0x20,
0xa3, 0xa5, 0xc8, 0xf3, 0x45, 0xe9, 0x50, 0x22, 0xc6, 0xef, 0x5c, 0x3a, 0xd7, 0x0d, 0x98,
0x93, 0x85, 0x88, 0x73, 0x64, 0x4a, 0xf7, 0x4d, 0xf9, 0x51, 0x20, 0xa3, 0xc4, 0x0a, 0x96,
0xae, 0xde, 0x3e, 0xfe, 0x7e, 0x7e, 0x7e, 0x5f, 0x3c, 0xfa, 0x76, 0x4f, 0xfd, 0x78, 0x72,
0x66, 0x2f, 0xbd, 0xd9, 0x30, 0xc3, 0xe5, 0x48, 0x12, 0x87, 0x8c, 0x7b, 0x55, 0x28, 0xd2,
0x07, 0x8c, 0x9a, 0x97, 0xac, 0xda, 0x17, 0x8d, 0x79, 0x51, 0x20, 0xa3, 0xc4, 0xeb, 0x54,
0x0b, 0x94, 0x8b, 0x94, 0xaa, 0xd6, 0x2e, 0xbf, 0xfc, 0x5b, 0x15, 0xa8, 0xd2, 0x26, 0xaf,
0xdc, 0x1b, 0xb4, 0xea, 0x37, 0xec, 0x3b, 0xf4, 0x6a, 0x37, 0xcd, 0x18, 0x93, 0x85, 0x69,
0x31, 0xc1, 0xe1, 0x40, 0xe3, 0x25, 0xc8, 0x12, 0x87, 0x8c, 0x9a, 0xb6, 0xcf, 0xfd, 0x59,
0x11, 0xa0, 0xc2, 0x06, 0x8e, 0x7f, 0x5d, 0x38, 0xf2, 0x47, 0x0c, 0x7b, 0x74, 0x6a, 0x37,
0xec, 0x5a, 0x36, 0xee, 0x3f, 0xfc, 0x7a, 0x76, 0x4f, 0x1c, 0x9b, 0x95, 0x89, 0x71, 0x41,
0x00, 0x63, 0x44, 0xeb, 0x54, 0x2a, 0xd6, 0x0f, 0x9c, 0xba, 0xd7, 0x0d, 0x98, 0x93, 0x85,
0x69, 0x31, 0xc1, 0x00, 0x82, 0x86, 0x8e, 0x9e, 0xbe, 0xdf, 0x3c, 0xfa, 0x57, 0x2c, 0xda,
0x36, 0xee, 0x3f, 0xfc, 0x5b, 0x15, 0x89, 0x71, 0x41, 0x00, 0x82, 0x86, 0x8e, 0x7f, 0x5d,
0x38, 0xf2, 0x47, 0xed, 0x58, 0x13, 0xa4, 0xca, 0xf7, 0x4d, 0xf9, 0x51, 0x01, 0x80, 0x63,
0x44, 0xeb, 0x54, 0x2a, 0xd6, 0x2e, 0xbf, 0xdd, 0x19, 0x91, 0xa0, 0xa3, 0xa5, 0xa9, 0xb1,
0xe0, 0x42, 0x06, 0x8e, 0x7f, 0x5d, 0x19, 0x91, 0xa0, 0xa3, 0xc4, 0x0a, 0x96, 0x8f, 0x7d,
0x78, 0x72, 0x47, 0x0c, 0x7b, 0x74, 0x6a, 0x56, 0x2e, 0xde, 0x1f, 0xbc, 0xfa, 0x57, 0x0d,
0x79, 0x51, 0x01, 0x61, 0x21, 0xa1, 0xc0, 0xe3, 0x25, 0xa9, 0xb1, 0xc1, 0xe1, 0x40, 0x02,
0x67, 0x4c, 0x1a, 0x97, 0x8d, 0x98, 0x93, 0xa4, 0xab, 0xd4, 0x2a, 0xd6, 0x0f, 0x9c, 0x9b,
0xb4, 0xcb, 0x14, 0xaa, 0xb7, 0xcd, 0xf9, 0x51, 0x20, 0xa3, 0xc4, 0xeb, 0x35, 0xc9, 0xf1,
0x60, 0x42, 0x06, 0x8e, 0x7f, 0x7c, 0x7a, 0x76, 0x6e, 0x3f, 0xfc, 0x7a, 0x76, 0x6e, 0x5e,
0x3e, 0xfe, 0x7e, 0x5f, 0x3c, 0xdb, 0x15, 0x89, 0x71, 0x41, 0xe1, 0x21, 0xc0, 0xe3, 0x44,
0xeb, 0x54, 0x2a, 0xb7, 0xcd, 0xf9, 0x70, 0x62, 0x27, 0xad, 0xd8, 0x32, 0xc7, 0x0c, 0x7b,
0x74, 0x4b, 0x14, 0xaa, 0xb7, 0xec, 0x3b, 0xd5, 0x28, 0xd2, 0x07, 0x6d, 0x39, 0xd1, 0x20,
0xc2, 0xe7, 0x4c, 0x1a, 0x97, 0x8d, 0x98, 0xb2, 0xc7, 0x0c, 0x59, 0x28, 0xf3, 0x9b};

Руководство по AVR – AVRDUDE

Хорошо, теперь у вас есть целевая плата и программист. Затем вы будете использовать программное обеспечение, которое вы установили на шаге 2, чтобы общаться с чипом.Это программное обеспечение очень мощное, но его также сложно использовать с первого раза. Однако вам следует проявить настойчивость, и через несколько раз им станет (проще) пользоваться.

комментариев? Предложения? Напишите на форум!

Avrdude – это программа командной строки, поэтому вам придется вводить все команды (позже вы узнаете, как сократить это с помощью Makefile)

Менее Windows, вам нужно открыть командное окно, выбрать Run … из меню «Пуск», ввести cmd и нажать OK .

В MacOS X вы можете использовать программу Terminal , чтобы открыть интерфейс командной строки, он находится в папке Utilities

Теперь в новом окне терминала введите в avrdude этот ответ, который представляет собой простой список того, что может делать avrdude . ..

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

  • : Это просто для того, чтобы сообщить, какой микроконтроллер он программирует. Например, если вы программируете ATtiny2313, используйте attiny2313 как номер детали
  • .
  • -b : это для отмены последовательной скорости передачи для программистов, таких как STK500. Не используйте этот переключатель, значение по умолчанию правильное.
  • -B : это для изменения битрейта, который показывает, насколько быстро программист общается с чипом. Если ваш чип тактируется очень медленно, вам нужно говорить с ним медленно, чтобы он не отставал.Об этом мы поговорим позже, пока не используйте.
  • -C : конфигурационный файл сообщает avrdude обо всех различных способах общения с программистом. Это файл конфигурации по умолчанию, поэтому давайте просто использовать его: не используйте этот командный переключатель
  • -c <программист>: здесь мы указываем тип программатора, если вы используете STK500, используйте stk500, если вы используете программатор DT006, используйте dt006 и т. Д.
  • -D: Запрещает стирать чип перед программированием.Мы этого не хотим, поэтому не используйте этот командный переключатель.
  • -P <порт>: это коммуникационный порт, который используется для общения с программистом. Это может быть COM1 для последовательного порта или LPT1 для параллельного порта или USB для USB.
  • -F: Это отменяет проверку подписи, чтобы убедиться, что микросхема, которую вы считаете программируемой, такой. Настоятельно рекомендуется этот тест, поскольку он проверяет соединение, поэтому не используйте этот переключатель.
  • -e: стирает чип, как правило, мы не используем его, потому что мы автоматически стираем флэш-память перед программированием.
  • Хорошо, это важная команда. Это тот, который на самом деле занимается программированием. – это либо flash, либо eeprom (или hfuse, lfuse или efuse для предохранителей конфигурации микросхемы, но мы не собираемся связываться с ними). r | w | v означает, что вы можете использовать r (чтение), w (запись) или v (проверка) в качестве команды. – это файл, в который вы хотите писать или читать. и [: format] означает, что есть необязательный флаг формата. Мы всегда будем использовать формат Intel Hex, поэтому используйте i
    Так, например.Если вы хотите записать файл test.hex во флэш-память, вы должны использовать -U flash: w: test.hex: i. Если вы хотите прочитать память eeprom в файл «eedump.hex», вы должны использовать -U eeprom: r: eedump.hex: i
  • -n: это означает, что вы на самом деле ничего не пишете, это хорошо, если вы хотите убедиться, что не отправляете никаких других команд, которые могут повредить чип, что-то вроде «предохранителя».
  • -V: отключает автоматическую проверку при записи. Мы хотим проверить, когда мы записываем во флеш-память, поэтому не используйте это.
  • -u: Если вы хотите изменить биты предохранителя, используйте этот переключатель, чтобы указать, что вы действительно серьезно.
  • -t: это «терминальный» режим, в котором вы можете вводить команды подряд. Не используйте это, это сбивает с толку новичков.
  • -E: Здесь перечислены некоторые спецификации программиста, не используйте его.
  • -v: это дает вам «подробный» вывод … на случай, если вы хотите что-то отладить. Если хотите, можете использовать, но в целом мы не будем.
  • -q: Противоположно указанному выше, снижает производительность.В общем, мы не будем его использовать, но, может быть, через некоторое время вы захотите.

Те, которые вы будете использовать 99% времени, выделены красным. Рассмотрим их подробнее

Чтобы получить список поддерживаемых программистов, введите avrdude -c asdf ( asdf – это просто чушь, чтобы заставить его выплюнуть список программистов) Вот мой результат, ваш может немного отличаться. Не пытайтесь запоминать это, просто просмотрите список.

C: \> avrdude -c asdf

avrdude: не удается найти идентификатор программиста “asdf”

Действительные программисты:
dasa3 = последовательный порт, сброс =! dtr sck = rts mosi = txd miso = cts [C: \ WinAVR \ bin \ avrdude.conf: 763]
dasa = последовательный порт, сброс = rts sck = dtr mosi = txd miso = cts [C: \ WinAVR \ bin \ avrdude.conf: 750]
siprog = Lancos SI-Prog [C: \ WinAVR \ bin \ avrdude.conf: 737]
ponyser = design ponyprog serial, reset =! txd sck = rts mosi = dtr miso = cts [C: \ WinAVR \ bin \ avrdude.conf: 724]
frank-stk200 = Франк STK200 [C: \ WinAVR \ bin \ avrdude.conf: 689]
blaster = Altera ByteBlaster [C: \ WinAVR \ bin \ avrdude.conf: 676]
ere-isp-avr = ERE ISP-AVR [C: \ WinAVR \ bin \ avrdude. conf: 666]
atisp = Программный кабель AT-ISP V1.1 для AVR-SDK1 из [C: \ WinAVR \ bin \ avrdude.conf: 656]
dapa = Прямой кабель параллельного доступа AVR [C: \ WinAVR \ bin \ avrdude.conf: 645]
xil = JTAG-кабель Xilinx [C: \ WinAVR \ bin \ avrdude.conf: 632]
futurlec = Кабель для программирования Futurlec.com.[C: \ WinAVR \ bin \ avrdude.conf: 615]
abcmini = ABCmini Board, также известный как Dick Smith HOTCHIP [C: \ WinAVR \ bin \ avrdude.conf: 605]
picoweb = Кабель для программирования Picoweb, http://www.picoweb.net/ [C: \ WinAVR \ bin \ avrdude.conf: 595]
sp12 = Программист Стива Болта [C: \ WinAVR \ bin \ avrdude.conf: 584]
alf = Nightshade ALF-PgmAVR, http://nightshade.homeip.net/ [C: \ WinAVR \ bin \ avrdude.conf: 568]
bascom = Кабель для программирования Bascom SAMPLE [C: \ WinAVR \ bin \ avrdude.conf: 558]
dt006 = Dontronics DT006 [C: \ WinAVR \ bin \ avrdude. conf: 548]
pony-stk200 = Pony Prog STK200 [C: \ WinAVR \ bin \ avrdude.conf: 536]
stk200 = STK200 [C: \ WinAVR \ bin \ avrdude.conf: 520]
bsd = Программист Брайана Дина, http://www.bsdhome.com/avrdude/ [C: \ WinAVR \ bin \ avrdude.conf: 509]
pavr = Программатор последовательного порта pAVR Джейсона Кайла [C: \ WinAVR \ bin \ avrdude.conf: 501]
dragon_dw = Atmel AVR Dragon в режиме debugWire [C: \ WinAVR \ bin \ avrdude.conf: 494]
dragon_hvsp = Atmel AVR Dragon в режиме HVSP [C: \ WinAVR \ bin \ avrdude.conf: 486]
dragon_pp = Atmel AVR Дракон в режиме PP [C: \ WinAVR \ bin \ avrdude.conf: 478]
dragon_isp = Atmel AVR Dragon в режиме ISP [C: \ WinAVR \ bin \ avrdude.conf: 470]
dragon_jtag = Atmel AVR Dragon в режиме JTAG [C: \ WinAVR \ bin \ avrdude.conf: 462]
jtag2dw = Atmel JTAG ICE mkII в режиме debugWire [C: \ WinAVR \ bin \ avrdude.conf: 454]
jtag2isp = Atmel JTAG ICE mkII в режиме ISP [C: \ WinAVR \ bin \ avrdude. conf: 446]
jtag2 = Atmel JTAG ICE mkII [C: \ WinAVR \ bin \ avrdude.conf: 438]
jtag2fast = Atmel JTAG ICE mkII [C: \ WinAVR \ bin \ avrdude.conf: 430]
jtag2slow = Atmel JTAG ICE mkII [C: \ WinAVR \ bin \ avrdude.conf: 422]
jtagmkII = Atmel JTAG ICE mkII [C: \ WinAVR \ bin \ avrdude.conf: 414]
jtag1slow = Atmel JTAG ICE (mkI) [C: \ WinAVR \ bin \ avrdude.conf: 407]
jtag1 = Atmel JTAG ICE (mkI) [C: \ WinAVR \ bin \ avrdude.conf: 399]
jtagmkI = Atmel JTAG ICE (mkI) [C: \ WinAVR \ bin \ avrdude.conf: 391]
avr911 = Atmel AppNote AVR911 AVROSP [C: \ WinAVR \ bin \ avrdude.conf: 385]
avr109 = Загрузчик Atmel AppNote AVR109 [C: \ WinAVR \ bin \ avrdude.conf: 379]
Butterfly = Плата разработки Atmel Butterfly [C: \ WinAVR \ bin \ avrdude.conf: 373]
usbtiny = USBtiny простой USB-программатор [C: \ WinAVR \ bin \ avrdude.conf: 367]
usbasp = USBasp, http: // www. fischl.de/usbasp/ [C: \ WinAVR \ bin \ avrdude.conf: 361]
avr910 = Низкозатратный последовательный программатор Atmel [C: \ WinAVR \ bin \ avrdude.conf: 355]
stk500hvsp = Atmel STK500 V2 в режиме последовательного программирования высокого напряжения [C: \ WinAVR \ bin \ avrdude.conf: 349]
stk500pp = Atmel STK500 V2 в режиме параллельного программирования [C: \ WinAVR \ bin \ avrdude.conf: 343]
stk500v2 = Прошивка Atmel STK500 версии 2.x [C: \ WinAVR \ bin \ avrdude.conf: 337]
stk500v1 = Atmel STK500 версии 1.x прошивка [C: \ WinAVR \ bin \ avrdude.conf: 331]
stk500 = Atmel STK500 [C: \ WinAVR \ bin \ avrdude.conf: 325]
avrisp2 = Atmel AVR ISP mkII [C: \ WinAVR \ bin \ avrdude.conf: 315]
avrispmkII = Atmel AVR ISP mkII [C: \ WinAVR \ bin \ avrdude.conf: 309]
avrispv2 = Atmel AVR ISP V2 [C: \ WinAVR \ bin \ avrdude.conf: 303]
avrisp = Интернет-провайдер Atmel AVR [C: \ WinAVR \ bin \ avrdude. conf: 297]

Вы заметите, что здесь перечислены упомянутые ранее программисты, в том числе avrisp , avrispv2 , stk500 , dragon , dasa / dasa3 / ponyser (программаторы с последовательным портом bitbanging), dapa / dt006 / stk200 (программаторы битбэнгинга параллельного порта)

Найдите имя программиста, которого вы используете, и примите его близко к сердцу!

Чтобы получить список частей, поддерживаемых avrdude, введите avrdude -c avrisp (не имеет значения, если вы не используете программатор avrisp) без номера детали в командной строке.Не запоминайте этот список, просто просмотрите его, чтобы получить представление о поддерживаемых микросхемах.

C: \> avrdude -c avrisp
avrdude: Часть AVR не указана, используйте “-p Part”

Допустимые части:
m6450 = ATMEGA6450 [C: \ WinAVR \ bin \ avrdude. conf: 10974]
m3250 = ATMEGA3250 [C: \ WinAVR \ bin \ avrdude.conf: 10785]
m645 = ATMEGA645 [C: \ WinAVR \ bin \ avrdude.conf: 10596]
m325 = ATMEGA325 [C: \ WinAVR \ bin \ avrdude.conf: 10407]
usb1287 = AT90USB1287 [C: \ WinAVR \ bin \ avrdude.conf: 10219]
usb1286 = AT90USB1286 [C: \ WinAVR \ bin \ avrdude.conf: 10030]
usb647 = AT90USB647 [C: \ WinAVR \ bin \ avrdude.conf: 9841]
usb646 = AT90USB646 [C: \ WinAVR \ bin \ avrdude.conf: 9651]
t84 = ATtiny84 [C: \ WinAVR \ bin \ avrdude.conf: 9468]
t44 = ATtiny44 [C: \ WinAVR \ bin \ avrdude.conf: 9286]
t24 = ATtiny24 [C: \ WinAVR \ bin \ avrdude.conf: 9104]
m2561 = ATMEGA2561 [C: \ WinAVR \ bin \ avrdude.conf: 8911]
m2560 = ATMEGA2560 [C: \ WinAVR \ bin \ avrdude.conf: 8718]
m1281 = ATMEGA1281 [C: \ WinAVR \ bin \ avrdude.conf: 8530]
m1280 = ATMEGA1280 [C: \ WinAVR \ bin \ avrdude. conf: 8341]
m640 = ATMEGA640 [C: \ WinAVR \ bin \ avrdude.conf: 8153]
t85 = ATtiny85 [C: \ WinAVR \ bin \ avrdude.conf: 7972]
t45 = ATtiny45 [C: \ WinAVR \ bin \ avrdude.conf: 7793]
t25 = ATtiny25 [C: \ WinAVR \ bin \ avrdude.conf: 7613]
pwm3 = AT90PWM3 [C: \ WinAVR \ bin \ avrdude.conf: 7431]
pwm2 = AT90PWM2 [C: \ WinAVR \ bin \ avrdude.conf: 7247]
t2313 = ATtiny2313 [C: \ WinAVR \ bin \ avrdude.conf: 7060]
m168 = ATMEGA168 [C: \ WinAVR \ bin \ avrdude.conf: 6872]
m88 = ATMEGA88 [C: \ WinAVR \ bin \ avrdude.conf: 6686]
m48 = ATMEGA48 [C: \ WinAVR \ bin \ avrdude.conf: 6499]
t861 = ATTINY861 [C: \ WinAVR \ bin \ avrdude.conf: 6311]
t461 = ATTINY461 [C: \ WinAVR \ bin \ avrdude.conf: 6122]
t261 = ATTINY261 [C: \ WinAVR \ bin \ avrdude.conf: 5933]
t26 = ATTINY26 [C: \ WinAVR \ bin \ avrdude.conf: 5776]
m8535 = ATMEGA8535 [C: \ WinAVR \ bin \ avrdude. conf: 5618]
m8515 = ATMEGA8515 [C: \ WinAVR \ bin \ avrdude.conf: 5460]
m8 = ATMEGA8 [C: \ WinAVR \ bin \ avrdude.conf: 5300]
m161 = ATMEGA161 [C: \ WinAVR \ bin \ avrdude.conf: 5160]
m32 = ATMEGA32 [C: \ WinAVR \ bin \ avrdude.conf: 4985]
m6490 = ATMEGA6490 [C: \ WinAVR \ bin \ avrdude.conf: 4792]
m649 = ATMEGA649 [C: \ WinAVR \ bin \ avrdude.conf: 4607]
m3290 = ATMEGA3290 [C: \ WinAVR \ bin \ avrdude.conf: 4424]
m329 = ATMEGA329 [C: \ WinAVR \ bin \ avrdude.conf: 4239]
m169 = ATMEGA169 [C: \ WinAVR \ bin \ avrdude.conf: 4059]
m163 = ATMEGA163 [C: \ WinAVR \ bin \ avrdude.conf: 3916]
m162 = ATMEGA162 [C: \ WinAVR \ bin \ avrdude.conf: 3720]
m644 = ATMEGA644 [C: \ WinAVR \ bin \ avrdude.conf: 3530]
m324 = ATMEGA324 [C: \ WinAVR \ bin \ avrdude.conf: 3338]
m164 = ATMEGA164 [C: \ WinAVR \ bin \ avrdude.conf: 3146]
m16 = ATMEGA16 [C: \ WinAVR \ bin \ avrdude. conf: 2968]
c128 = AT90CAN128 [C: \ WinAVR \ bin \ avrdude.conf: 2777]
m128 = ATMEGA128 [C: \ WinAVR \ bin \ avrdude.conf: 2599]
m64 = ​​ATMEGA64 [C: \ WinAVR \ bin \ avrdude.conf: 2418]
m103 = ATMEGA103 [C: \ WinAVR \ bin \ avrdude.conf: 2278]
8535 = AT90S8535 [C: \ WinAVR \ bin \ avrdude.conf: 2157]
8515 = AT90S8515 [C: \ WinAVR \ bin \ avrdude.conf: 2043]
4434 = AT90S4434 [C: \ WinAVR \ bin \ avrdude.conf: 1960]
4433 = AT90S4433 [C: \ WinAVR \ bin \ avrdude.conf: 1836]
2343 = AT90S2343 [C: \ WinAVR \ bin \ avrdude.conf: 1712]
2333 = AT90S2333 [C: \ WinAVR \ bin \ avrdude.conf: 1627]
2313 = AT90S2313 [C: \ WinAVR \ bin \ avrdude.conf: 1514]
4414 = AT90S4414 [C: \ WinAVR \ bin \ avrdude.conf: 1401]
1200 = AT90S1200 [C: \ WinAVR \ bin \ avrdude.conf: 1286]
t15 = ATtiny15 [C: \ WinAVR \ bin \ avrdude.conf: 1153]
t13 = ATtiny13 [C: \ WinAVR \ bin \ avrdude. conf: 980]
t12 = ATtiny12 [C: \ WinAVR \ bin \ avrdude.conf: 847]
t11 = ATtiny11 [C: \ WinAVR \ bin \ avrdude.conf: 783]

Это все чипы, о которых знает avrdude . Почти все они программируются ISP.

Берегитесь : t2313 и 2313 , m8 и m88 , c128 и m128 и т. Д. Выглядят очень похоже, но на самом деле это совершенно разные микросхемы! По этой причине я предлагаю вам ввести имя чипа, то есть вместо t2313 используйте attiny2313 или m8 используйте atmega8 .Avrdude достаточно умен, чтобы понять, что вы имеете в виду, если наберете полное имя.

Мы собираемся использовать ATtiny2313 , поэтому используйте номер детали attiny2313 или ( t2313 )

Дважды проверьте, какой чип вы используете, посмотрев на верхнюю часть чипа, там написано ATTINY2313 и ATMEGA8 (соответственно), -20PI и -16PC – это просто рейтинги скорости и описания пакетов, поэтому пока их игнорируйте.

Этот переключатель сообщает avrdude, где искать программиста.Если вы используете устройство, подключенное через USB, вы можете просто использовать -P usb или не использовать его. Программист автоматически знает, когда программист является устройством USB.

Если вы используете программатор параллельного или последовательного порта, вы должны использовать эту опцию, чтобы указать, к какому порту подключен программатор. В 99% случаев это lpt1 (параллельный) или com1 (последовательный), но вы всегда можете проверить его, заглянув в диспетчер устройств . Откройте панель управления System Properties

Щелкните Device Manager и откройте подменю Ports .

Перечислены все последовательные и параллельные порты. Может быть несколько COM-портов, но обычно есть только один параллельный (принтерный) порт.

Для компьютеров Mac нет параллельных портов. Однако, если вы используете USB-последовательный адаптер (который позволяет вам использовать STK500 или AVRISP v1 с Mac), вам необходимо указать последовательный порт. Я еще не знаю надежного способа, но способ, которым я это делаю, – это Терминал , я набираю ls -l /dev/cu.* , и он выплевывает кучу вещей (я испортил экран захвата, перед этим изображением есть другое окно, но просто игнорируйте это)

/ dev / cu.Bluetooth – это встроенный модуль Bluetooth, не используйте его. /dev/cu.modem – это модем (если он есть), не используйте его. Вы ищете что-то вроде /dev/cu.usbserial или /dev/cu.KeySerial1 или что-то подобное. В данном случае это /dev/cu.usbserial-FTCTYG5U

Хорошо, мы подошли к важной части. Именно здесь мы на самом деле рассказываем avrdude , как записывать данные на чип.Эта команда довольно сложная, но мы ее разберем.

– может быть flash , eeprom, hfuse (high fuse), lfuse (low fuse), or efuse (extended fuse)
r | w | v – может быть r (чтение), w (запись), v (проверка)
<имя файла> – входной (запись или проверка) или выходной файл (чтение)
[: формат] – необязательно, формат файла.Вы можете оставить это значение для записи, но для чтения используйте i для Intel Hex (преобладающий стандарт)

Например:

  • Чтобы записать файл с именем firmware.hex во флэш-память, используйте команду: -U flash: w: firmware.hex
  • Чтобы проверить файл с именем mydata. eep из eeprom, используйте команду -U eeprom: v: mydata.eep
  • Чтобы прочитать низкий предохранитель в файл, используйте команду -U lfuse: r: lfusefile.шестнадцатеричный: i

Ладно, хватит этой треп. Пришло время запрограммировать прошивку в микросхему!

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

Загрузите файл test_leds.шестнадцатеричный файл и поместите его в C: \ (Windows) или свой домашний каталог (Mac)

Выясните, какой программатор вы используете и к какому порту он подключен (в этом примере я буду использовать usbtinyisp, но все в порядке. ) Поскольку usbtinyisp является программатором USB, я могу не указывать -P выключатель.

введите avrdude -c usbtiny -p attiny2313 -U flash: w: test_leds.hex

  • Если вы используете параллельный битовый программатор DT006 (например, MiniPOV2), вы, вероятно, захотите использовать такую ​​команду, как avrdude -c dt006 -P lpt1 -p attiny2313 -U flash: w: test_leds.шестнадцатеричный
  • Если вы используете последовательный битбэнг-программатор DASA (например, MiniPOV3), вы, вероятно, захотите использовать такую ​​команду, как avrdude -c dasa -P com1 -p attiny2313 -U flash: w: test_leds.hex
  • Если вы используете программатор панели разработки STK500, вы, вероятно, захотите использовать такую ​​команду, как avrdude -c stk500 -P com1 -p attiny2313 -U flash: w: test_leds.hex
  • Если вы используете USB-программатор AVRISP v2, вы, вероятно, захотите использовать такую ​​команду, как avrdude -c avrispv2 -p attiny2313 -U flash: w: test_leds. шестнадцатеричный
  • и т. Д.

Avrdude должен выполнить следующие шаги:

  1. Инициализация программатора (вы этого не увидите, если он работает)
  2. Инициализация устройства AVR и проверка его готовности к инструкциям
  3. Чтение подписи устройства ( 0x1e910a ), которая подтверждает, что микросхема, которую вы указали в командной строке ( attiny2313 ), на самом деле является микросхемой, к которой подключен программист
  4. Стирание чипа
  5. Чтение файла и проверка его правильности
  6. Пишем флеш
  7. Проверка вспышки

Fuse memory – это отдельный фрагмент флеш-памяти, в который не записывается при обновлении прошивки.Вместо этого 3 предохранителя, как правило, устанавливаются один раз (хотя их можно устанавливать сколько угодно раз). Предохранители определяют такие вещи, как тактовая частота, тип кристалла, включен ли JTAG, каков уровень пониженного напряжения (минимальное напряжение) и т. Д. Для получения дополнительной информации о предохранителях вы можете прочитать о них здесь.

Сначала вам нужно рассчитать предохранители с помощью очень удобного калькулятора предохранителей AVR

Для программирования предохранителей используйте:

avrdude -c usbtiny -p attiny2313 -U lfuse: w :: m
avrdude -c usbtiny -p attiny2313 -U hfuse: w :: m
avrdude -c usbtiny -p attiny2313 -U efuse: w :: m

Где <0xHH> – желаемое значение предохранителя в шестнадцатеричном формате.Например, чтобы установить высокий предохранитель на 0xDA:

avrdude -c usbtiny -p attiny2313 -U hfuse: w: 0xDA: m

Неправильная установка предохранителей может привести к «кирпичу» микросхемы – например, вы можете отключить программирование в будущем или сделать так, чтобы микросхема ожидала внешний кристалл, когда его нет. По этой причине я предлагаю трижды проверить номиналы предохранителей. Затем проверьте еще раз, убедитесь, что вы не отключаете программирование ISP или вывод сброса или не устанавливаете тактовую частоту на 32 кГц.Затем еще раз убедитесь, что у вас есть правильный чип для расчета. Тогда, наконец, вы можете попробовать записать их в чип!

Помните: после того, как вы установите предохранители, вам не нужно устанавливать их заново

Если программатор неправильно подключен к микросхеме, вы получите следующее сообщение: ошибка инициализации, rc = -1 Дважды проверьте соединения и попробуйте еще раз, или используйте -F для отмены этой проверки

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

Убедитесь, что микросхема запитана, правильно вставлена ​​в розетку или программатор, кабели для программирования вставлены правильно, разъем подключен правильно и т. Д. В 99% случаев это проблема с проводкой.

Просто ради удовольствия попробуйте запустить эту команду avrdude -c usbtiny -p atmega8 -U flash: w: test_leds.шестнадцатеричный

Вы увидите, что он останавливается на шаге 2, как только подпись отличается от ожидаемой, он останавливается. Это связано с тем, что код, скомпилированный для attiny2313 , не будет работать на atmega8 (это верно для большинства микроконтроллеров, файлы .hex не являются перекрестно совместимыми)

ATtiny Инструмент для сброса предохранителей

Схема

Эта схема устанавливает биты предохранителей ATtiny13 или ATtiny24 / 44/84 или ATtiny25 / 45/85 на заводские значения по умолчанию или любое другое значение (полученное через последовательный порт USART) с использованием последовательного программирования высокого напряжения (HVSP): это необходимо, когда вход RESET или другие контакты, используемые для последовательного программирования, перенастраиваются путем программирования соответствующего бита предохранителя для выполнения другой функции (особенно полезно в АРН с малым числом контактов) e. g: вывод RESET становится выводом ввода / вывода; на этом этапе микроконтроллер больше не может быть запрограммирован внутри схемы с помощью ISP, а только с помощью такого высоковольтного последовательного программатора (HVSP).

Для установки предохранителей на определенное значение (с помощью кнопки B) или для получения сообщений от инструмента вам понадобится переходный кабель последовательного порта на USB, такой как кабель на базе FT231X или на базе FT232H; он должен быть подключен к CONN_USART_1 и должен иметь вход / выход 5 В: последовательный порт AVR не совместим с RS232 (максимальное напряжение 5 В), поэтому эту схему не следует подключать к «реальному» порту RS232, имеющему вход / выход +/- 12 В .Адаптер последовательного порта на USB не требуется при сбросе предохранителей на заводские значения с помощью кнопки A

. Вам необходимо удалить AVR из вашей схемы и вставить его в правильный разъем программатора: IC2 (для ATtiny25,45,85 или ATtiny13 / V) или IC3 (для ATtiny24,44,84).
Посмотрите здесь, чтобы узнать больше о HVSP.

Эта схема (и прошивка) основана на ATtiny Fuse Restore с использованием HVSP Питера Флери.

ПРИМЕЧАНИЕ: ПОДДЕРЖИВАЕТСЯ ТОЛЬКО ЦЕЛЕВОЕ ПРОГРАММИРОВАНИЕ 5 В
ПРИМЕЧАНИЕ ТАКЖЕ ОБРАТНАЯ ПОЛЯРНОСТЬ (центральная отрицательная) РАЗЪЕМА ПИТАНИЯ POW1: моему источнику питания требуется этот тип полярности, но большинство блоков питания кирпичного типа используют центрально-положительный

Схема инструмента для сброса предохранителей ATtiny


При нажатии кнопки A: возврат к заводским настройкам

Восстанавливает плавкие вставки ATtiny13, ATtiny24 / 44/84 или ATtiny25 / 45/85 до заводских значений по умолчанию.Это сбросит бит предохранителя RSTDISBL и вернет контакт RESET с линии ввода / вывода на вход сброса. Теперь ISP-программирование снова возможно, просто подключите ISP-программатор (например, AVRISP-MKII) к разъему CONN_ICSP_EXT.
В случае успеха светодиод A будет гореть на 8 секунд, если возникнет какая-либо проблема, он будет мигать на 8 секунд, а на UART будет отправлено сообщение об ошибке.
Обратите внимание, что для сброса битов предохранителей с помощью кнопки A схема может работать автономно, то есть нет необходимости подключаться к последовательному терминалу.

пример выхода UART: MCU не подключен
ПРОВЕРИТЬ AVR .. ОШИБКА!

Пример выхода UART: восстановить исходное значение предохранителя
ПРОВЕРИТЬ AVR..OK ATtiny85 Предохранитель Val Orig lfuse 98 98 hfuse 223 223 efuse 255 255 НАПИШИТЕ..ОК ПРОВЕРИТЬ..ОК


При нажатии кнопки B: пользовательские значения из последовательного порта (через кабель USB-UART)

Установите биты предохранителя ATtiny13 или ATtiny24 / 44/84 или ATtiny25 / 45/85 на значения, передаваемые с последовательного терминала (соединение: 4800 бод 8N1).
Обратите внимание, что разъем USART не является стандартным: вместо классического разъема 2,54 мм я использовал MODU II модели AMP / Tyco с 4-мя линейными полюсами, как этот:

Разъем Tyco MODU II

Вы можете использовать любой последовательный терминал, например CuteCom для Linux или RealTerm для Windows.
Используйте этот режим для программирования предохранителей, которые не могут быть запрограммированы в режиме программирования SPI (например: SPIEN в ATtiny85)
ПРИМЕЧАНИЕ: – значения, отправляемые с консоли терминала, должны быть целыми (0-255), а не шестнадцатеричными (0-FF) значениями.
– Проверка входных значений НЕ выполняется: вы должны проверить их правильность перед перепрограммированием предохранителей.
Если успешно, светодиод B загорится в течение 8 секунд, если возникнут какие-либо проблемы, он будет мигать в течение 8 секунд, а на UART будет отправлено сообщение об ошибке.

ДЛЯ ПЕРЕЗАПУСКА ПРОЦЕДУРЫ (например: если вставлено неправильное значение, так как вы не можете отменить с помощью клавиши возврата) НАЖМИТЕ НАЖМИТЕ кнопку B В ЛЮБОЙ МОМЕНТ

пример выхода UART: установите предохранитель на пользовательское значение
ПРОВЕРИТЬ AVR..OK ATtiny85 Предохранитель Val Orig lfuse 98 98 hfuse 223 223 efuse 255 255 Предохранитель (DEC): lfuse 98


Когда программатор ICSP подключен к CONN_ICSP_EXT

Можно подключить внешний программатор In Circuit Serial Programmer к разъему CONN_ICSP_EXT для программирования MCU после сброса предохранителей: обратите внимание, что при подключении внешнего программатора ICSP (EXT_PRG на +5 В) сброс предохранителя будет невозможен, и оба светодиода загорится, GUEST_VCC будет удерживаться на уровне +5 В для питания целевого AVR, а другие контакты ввода / вывода будут иметь HI-Z.

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

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