Программируем attiny85 из arduino isp

Шаг 10: расшифруй кнопки пульта

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

  • выберите плату «ATtiny85 @ 16 МГц (внутренний ФАПЧ; 4,3 В БОД)», если вы не используете кристалл, «ATtiny85 @ 16 МГц (внешний кристалл; 4,3 В БОД» в противном случае, затем запишите ее
  • загрузить эскиз: http: //github.com/venumz/ATtiny85-USB-IR-receive …
  • Если вы не используете кристалл, раскомментируйте строку, содержащую переменную OSCCAL, и присвойте ей значение, которое вы нашли при калибровке часов.
  • Я предполагаю, что датчик подключен, как описано ранее, в противном случае подключите его
  • Я также предполагаю, что FT232RL последовательный к USB-адаптеру подключен, в противном случае подключите его
  • сбросьте attiny85, соединяющий контакт RESET (контакт 1) с GND (на мгновение)
  • нажимайте несколько раз кнопки пульта дистанционного управления и просматривайте экранное окно, вам нужно аннотировать последний номер для каждой записи, каждая кнопка может выдавать 2 разных номера

Пример:

ПОЛУЧЕНО D44 3396ПОЛУЧЕНО 544 1348

Пометьте 3396 и 1348 в связи с кнопкой, которую вы только что нажали, затем вы должны решить, что вы хотите сделать с этой кнопкой. Например, я хотел бы, чтобы эта кнопка отправляла мультимедийный код клавиши «Увеличение громкости», тогда мне нужно найти идентификатор для этого кода клавиши. Для этого загрузите PDF-файл: http: //www.usb.org/developers/hidpage/Hut1_12v2.p …

Найдите раздел «Клавиатура / Страница клавиатуры» на странице 53 и используйте цифры в столбце Идентификатор использования (Декабрь), чтобы привязать кнопки пульта к кодам клавиатуры. В нашем примере мы видим, что код ключа для увеличения громкости: 128.

Отредактируйте файл файл UsbKeyboard.h внутри библиотеки UsbKeyboard из пакета v-usb, который мы установили ранее, и добавьте в существующие определения, если его там еще нет:

#define KEY_VOL_UP 128

Когда мы закончили со всеми нашими кнопками remote / s и всеми определениями в файле UsbKeyboard.h, мы можем перейти к последнему шагу.

Using the Library

  • The code uploaded to your Tiny will allow you to write out data
  • You’ll also have to upload some code to your Arduino to be able to print out incoming data from the Tiny to the Serial Monitor

Setting up the Arduino

  1. Navigate to: File > Examples > ArduinoSerialIn > ArduinoSerialInCode.
  2. Upload this code to your Arduino.

If all you are doing with this arduino is serial monitoring, you won’t have to change this code.

Writing Tiny Code that makes use of Serial

  1. Upload code to your Tiny
    • To make sure Serial is working and to see examples of how to use it, you can upload one of the following to your tiny:
      • File > Examples > TinySerialOut > ExplicitWrites
      • File > Examples > TinySerialOut > ImplicitWrites

For more details on using these functions see below.

Wiring

Once you’ve uploaded your code to your Tiny, and the provided code to your arduino, you’ll need to connect the two.

You’ll want to hook up your designated TX pin on your Tiny to the Arduino’s RX Pin with a 330 ohm resistor in series. Then hook up the Tiny’s Voltage pin to 5V and GND to GND.

The schematic shown uses the same TX pin on the Tiny as used in the included examples:

This library uses one way communication (Tiny -> Arduino), which is why it only needs one pin on the Tiny for serial communication.

Putting everything together: Reading Serial Data

Once you’ve uploaded the correct code to your arduino as described in , and you’ve uploaded code
to your Tiny that contains some serial output, and everything together:

  1. Power on the Arduino
  2. Make sure that you have the port (Tools > Port) corresponding to the Arduino selected
  3. Wait a second or two. if you open up the Serial Monitor straight away, you may be met with no output. If you then try
    to close it and open it again, most likely you’ll get bad values, and you’ll have to power off and power back on your arduino.
  4. Open up the Serial Monitor and read incoming data from the Tiny!

For example, here’s what you should see on the Serial Monitor if you’ve uploaded the «ImplicitWrites» example to your Tiny:

Перепрограммируемый загрузчик ATtiny85 с использованием платы Arduino Uno

Для программирования ATtiny85 без использования платы Arduino мы сначала должны загрузить в него загрузчик используя плату Arduino Uno. Этот процесс выполняется один раз и в дальнейшем у нас не будет необходимости в использовании платы Arduino для программирования микроконтроллера ATtiny85. Загрузчик (bootloader) – это специальная программа, которая выполняется в микроконтроллере, который необходимо запрограммировать. Использование загрузчика – это один из самых удобных способов загрузки программы в микроконтроллер. Загрузчик находится в микроконтроллере и выполняет поступающие команды, а затем записывает новую программу в память микроконтроллера.

Перепрограммируемый загрузчик в микроконтроллере устраняет необходимость в использовании специальных внешних аппаратных средств (плат программирования, программаторов) для программирования микроконтроллера и позволяет загружать программу в микроконтроллер непосредственно с помощью USB соединения. Платы Digispark ATtiny85 (а выбор подобных плат сейчас достаточно большой) работают на загрузчике “micronucleus tiny85”, первоначально написанным Bluebie. Загрузчик – это программный код, который заранее загружен в плату Digispark и позволяет работать ей как USB устройство, которое можно программировать с помощью Arduino IDE. Мы будем использовать аналогичный подход и загружать загрузчик digispark attiny85 в наш микроконтроллер ATtiny85.

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

Шаг 1. Конфигурирование платы Arduino Uno в качестве ISP программатора.

Поскольку ATtiny85 является всего лишь микроконтроллером, для его программирования требуется ISP (In-System Programming — внутрисистемное программирование). Поэтому для программирования ATtiny85 нам необходимо сначала сконфигурировать плату Arduino Uno в качестве ISP программатора. Для этого подключите плату Arduino Uno к компьютеру и запустите Arduino IDE. После этого откройте пункт меню File > Example > ArduinoISP и загрузите в Arduino ISP код.

Шаг 2. Схема перепрограммируемого загрузчика ATtiny85.

Схема перепрограммируемого загрузчика ATtiny85 представлена на следующем рисунке.

Конденсатор 10 мкФ подключен между контактами Reset и GND платы Arduino. Все соединения схемы представлены в следующей таблице:

ATtiny85 Pin Arduino Uno Pin
Vcc 5V
GND GND
Pin 2 13
Pin 1 12
Pin 0 11
Reset 10

После сборки схемы подключите плату Arduino Uno и запустите Arduino IDE. Определите к какому COM порту подключена плата Arduino Uno (в диспетчере устройств Windows). В нашем случае это COM5.

После этого скопируйте отредактированный файл «Burn_AT85_bootloader.bat» и файл ATtiny85.hex» в корневой каталог Arduino IDE (C:\Program Files (x86)\Arduino).

После этого сделайте клик правой кнопкой мыши на файле «Burn_AT85_bootloader.bat» и выберите «Run as Admin» (запуск от администратора). Необходимо примерно 5-6 секунд чтобы загрузчик загрузился. Если все прошло успешно, то вы должны увидеть сообщение «AVRdude done. Thank you. Press any key to continue…».

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

Программная часть

Проблема с драйвером датчика MAX30102 заключается в том, что используемый в приборе датчик выпускается на плате MH-ET LIVE. В спецификации на датчик подразумевается, но не указывается явно, что LED1 – красный светодиод, LED2 – инфракрасный (ИК). Однако, если сигнал управления на LED1 равен 0, красный светодиод остается включенным (как на Рисунке 3), если же сигнал управления на LED2 равен 0, то красный светодиод гаснет. Очевидный вывод состоит в том, что LED1 – это ИК светодиод, а LED2 – красный, который также участвует в измерениях уровня насыщения крови кислородом (см. описание ниже). Мы упоминаем этот момент по причине того, что самый распространенный драйвер датчика MAX30102 для проектов на Arduino – это драйвер SparkFun 3010x, в котором однозначно определено, что LED1 – красный, LED2 – ИК. Это может быть справедливо для модулей с датчиком серии MAX30105, установленных на платах SparkFun, но, похоже, не относится к датчику MAX30102 на плате MH-ET LIVE.

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

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

R = (AC_red/DC_red)/(AC_IR/DC_IR)

где AC_xxx является переменной составляющей сигнала xxx, а DC_xxx является постоянной составляющей сигнала xxx. В приборе вычисляются два значения R. Верхнее значение на дисплее (следующее после частоты пульса) вычисляется по классической формуле:

R = 104 — 1.7 × R

Нижнее значение вычисляется с помощью таблицы из Arduino библиотеки драйвера, которая является приближением  формулы:

-45.060 × R × R + 30.354 × R + 94.845

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

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

Например, дикротические выемки, которые можно увидеть на полученном с помощью прибора графике сердечного ритма (Рисунок 1) – «второе движение вверх на нисходящей части траектории, соответствующее увеличению давления в аорте при закрытии аортального клапана. – словарь Merriam Webster». Автор заметил, что если эти дикротические выемки более ярко выраженные – у более молодых людей – они могут преодолеть фильтрацию второго уровня и привести к ошибочному выходному сигналу детектора пульса, который, по сути, ищет пики и впадины в сигнале. Работа над проектом продолжается!

Исходный код (скетч Arduino), необходимые библиотеки, проект корпуса (Рисунок 5) для печати на 3D принтере доступны для скачивания в разделе загрузок.

Рисунок 5. Простой корпус для прибора, напечатанный на 3D принтере.

Дополнительно автор добавил версию прибора (nanoPulsePPG) для стандартных плат Arduino и протестировал работу на плате Arduino Nano, но также должно работать на плате Arduino Uno. Таким образом, вы можете экспериментировать с исходным кодом и датчиком.

Шаг 1: Некоторые соображения

  • У меня нет программиста AVR ISP, и я не очень хочу его покупать, поэтому я использовал Arduino для программирования attiny85
  • Меня не волнует какая-либо другая ОС, кроме GNU / Linux, поэтому я не знаю, будет ли это работать иначе.
  • Есть и другие ИК-библиотеки, но я не смог заставить их работать даже с Arduino. Учтите, что я начал с ограниченного знания о библиотеках IR. Возможно, я мог бы заставить их работать сейчас, после того, как приобрел опыт работы с большим количеством вопросов. Во всяком случае, я был потерян и в отчаянии, прежде чем нашел библиотеку, предоставленную Seejaydee, и я использовал это с тех пор (большое спасибо человек!).
  • Существуют и другие аппаратные конфигурации, но я использовал только ту, которая использует 5 В для питания attiny85 и два 3,6 В 0,5 Вт стабилитрона для ограничения напряжения линий передачи данных, это работает из коробки, поэтому я не связывался с другие конфигурации.
  • Вы можете использовать кристалл 16 МГц или библиотеку tinytuner для калибровки внутренних часов вашего attiny85. Я настоятельно рекомендую использовать кристалл, он намного более стабилен и, вероятно, избавит вас от головной боли.
  • Я использую здесь два разных загрузчика для attiny85:

а) версия программного обеспечения Rowdy DogОн имеет встроенный последовательный интерфейс, который очень крутой и очень маленький, поэтому у вас есть больше места для вашей программы и других библиотек. Проблема в том, что по некоторым причинам, хотя он работает довольно хорошо, через некоторое время USB-устройство было отключено (вы можете найти проблемы с командой dmesg).Я не знаю, является ли это проблемой ядра или смешанной комбинации ядра плюс выбранных библиотек, поэтому через некоторое время я решил использовать это ядро ​​просто для декодирования удаленных клавиш и калибровки часов (когда не используется 16 МГц кристалл). После этого я просто записываю загрузчик Mellis и загружаю окончательный эскиз, который не использует последовательный интерфейс.

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

О возможностях среды разработки

Arduino IDE имеет встроенный набор плат и микроконтроллеров, с которыми можно работать; в её основе лежит классический программатор AVR, кстати, благодаря ему и можно обращаться к устройству командами на Си.

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

  • сервопривод;
  • транзистор;
  • светодиод;
  • соленоид и т. д.

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

Шаг 5: Установка и настройка библиотеки V-usb

Загрузите библиотеку с http: //code.google.com/archive/p/vusb-for-arduin …Разархивируйте файл и скопируйте папку library / UsbKeyboard в папку библиотек скетчей.

Теперь вам нужно отредактировать пару файлов для совместимости с ATtiny85 (он настроен для работы с arduino):

А) отредактируйте usbconfig.h:

под «Hardware Config» изменить:

#define USB_CFG_IOPORTNAME Dв## определить USB_CFG_IOPORTNAME B

а также

#define USB_CFG_DMINUS_BIT 4в#define USB_CFG_DMINUS_BIT 0

в разделе «Изменение конфигурации дополнительного оборудования»:

#define USB_CFG_PULLUP_IOPORTNAME Dв## определить USB_CFG_PULLUP_IOPORTNAME B

Чтобы создать полную спецификацию HID для загрузки (иначе мультимедийные ключи работать не будут), также измените:

#define USB_CFG_INTERFACE_SUBCLASS 0 // Загрузкав#define USB_CFG_INTERFACE_SUBCLASS 0x01 // Загрузка

а также

#define USB_CFG_INTERFACE_PROTOCOL 0 // Клавиатурав#define USB_CFG_INTERFACE_PROTOCOL 0x01 // Клавиатура

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

#define USB_CFG_VENDOR_NAME

#define USB_CFG_DEVICE_NAME

Б) отредактируйте UsbKeyboard.h:

менять:

PORTD = 0; // TODO: только для USB-пинов?DDRD | = ~ USBMASK;

в

PORTB = 0; // TODO: только для USB-пинов?DDRB | = ~ USBMASK;

Чтобы разрешить изменение кодов клавиш больше 101, также:

0x25, 0x65, // LOGICAL_MAXIMUM (101)чтобы:0x25, 0xE7, // LOGICAL_MAXIMUM (231)

а также

0x29, 0x65, // USAGE_MAXIMUM (клавиатурное приложение)чтобы:0x29, 0xE7, // USAGE_MAXIMUM (приложение клавиатуры)

Вам может понадобиться отредактировать также эти 3 файла:

usbdrv.husbdrv.cUsbKeyboard.h

и каждый раз, когда вы видите, PROGMEM добавляет «const» перед именем типа переменной (например: PROGMEN char usbHidReportDescriptor 35 ==> PROGMEM const char usbHidReportDescriptor 35)

Если это не ясно, посетите http: //forum.arduino.cc/index.php? Topic = 391253.0 # …

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

UsbKeyboard настроен для attiny85

Редактировать: недавно я обнаружил, что Алехандро Лейва (http://github.com/gloob) позаботился об этой библиотеке и, кажется, работает хорошо. Вы также можете попробовать его версию с необходимыми изменениями, которые я сделал, чтобы она работала с attiny, поэтому, если вы хотите проверить это, просто извлеките ее из папки библиотек скетчей.

UsbKeyboard настроен для attiny85 (версия Alejandro Leiva)

Как прошить Digispark ATtiny 85.

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

Для этого понадобятся:

1. Приложение Arduino IDE

2. Ссылка для менеджера плат

3. Добавить платы Digispark в приложение Arduino IDE

4. Установить драйверы для Digispark ATtiny 85.

Ознакомиться с приложение Arduino IDE http://kolotushkin.com

Запустите приложение Arduino IDE, зайдите во вкладку Файл/Настройки и в Дополнительные ссылки для
Менеджера плат: добавьте эту ссылку

И нажмите «ОК»

Затем откройте вкладку Инструменты /Выбор платы /Менеджер плат

В открывшемся списке выбираем пункт “Digistump AVR Boards” и нажмите “Установить”.

Чтобы быстрее найти, впишите в окно поиска слово “Digistump” или просто “digi”.

Осталось скачать и установить драйверы.

Откройте архив Digistump.Drivers.zip и извлеките из него папку с драйверами Digistump Drivers. Это можно сделать простым перетаскиванием папки Digistump Drivers из архива в удобную для вас папку.

Затем подключите плату Digispark к компьютеру. Откройте Пуск/Панель управления/Диспетчер устройств. Найдите в списке устройство помеченное желтым треугольником (у вас может отобразиться как «Неизвестное устройство»), кликните на него правой кнопкой мышки и в открывшемся окне кликните обновить драйверы.

Затем выберите пункт «Выполнить поиск драйверов на этом компьютере»

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

Если теперь устройство определено как Digispark Bootoalder без желтой отметки, значит все готово!

Теперь откройте скетч Blink, который находится во вкладке “Файл/Примеры/Basics/Blink”.

Так как скетч расcчитан для платы Arduino на которой светодиод подключен к 13 пину, то необходимо
заменить значение “13” на “1” потому как на плате Digispark светодиод подключен к 1 пину!

Затем в менеджере плат выберите плату Digispark (Default — 16,5mhz)

Нажимаете “Загрузить”. После чего произойдет компиляция и снизу появится сообщение (will timeout in 60
seconds), и вот только тогда в течении 60 секунд нужно подключить плату к USB порту для загрузки скетча!

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

Видео версия обзора платы Digispark ATTiny85. «Как прошить Digispark ATTiny85. Обзор платы Digispark ATTiny85»

Как сделать очень маленькую Ардуино своими руками?

Саму плату Arduino версии UNO, например, можно использовать, как универсальный программатор. Вы можете легко запрограммировать с помощью arduino attiny2313 и другие МК семейства AVR и МК иных производителей. Сама серия Attiny, как вы можете увидеть из названия, – младшая линейка микроконтроллеров Atmel, имеющая урезанные по сравнению с ATmega чипы.

Стоит отметить! Многие микроконтроллеры младшей, tiny, серии имеют аналогичную цоколевку, как, например, Tiny13/25/45/85 совместимы.

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

Arudino ISP – проект, который превратит вашу платформу в программатор. Для этого нужно в плату UNO загрузить скетч и использовать её для прошивки.

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

Прошивка, которая превратит вашу ардуину в ISP программатор, поставляется в наборе примеров Arduino IDE. Подключите вашу плату к компьютеру и выберите File-examples-Arduino ISP. После чего залейте скетч в Arduino.

На картинке указаны назначения пинов ардуино и их расположение на контроллерах в DIP корпусах, для прошивки соедините одноименные выводы на микроконтроллере и ардуине.

При желании можно повторить опыт предшественников и сделать такой шилд для UNO.

Вот печатная плата

Пояснения будут излишними – проявите фантазию и воплотите это на текстолите.

Чтобы прошить attiny с Arduino IDE нужно предварительно добавить библиотеки для их поддержки, в стандартном варианте поддерживаются только atmega. Добавляем в директорию «C:\Users\*имя пользователя*\Documents\Arduino\» папку hardware, в неё – папку tiny из архива, который можно найти здесь (ссылка на открытый ресурс https://code.google.com/archive/p/arduino-tiny/).

После этого в папке tiny находим файл Prospective Boards.txt и удаляем из его название первое слово «Prospective».

На картинке изображены настройки и список плат. Не забудьте выбрать программатор «Arduino ISP».

Программатор готов.

При прошивке attiny код будет легче, чем в UNO, некоторые функции урезаны, вам доступны:

  • pinMode()
  • digitalWrite()
  • digitalRead()
  • analogRead()
  • analogReference(INTERNAL) / (EXTERNAL)
  • shiftOut()
  • pulseIn()
  • analogWrite()
  • millis()
  • micros()
  • delay()
  • delayMicroseconds()

Что мы получаем?

Теперь вы получаете аналог digispark, но размеры его сократились до размеров одного чипа; припаивайте периферию, и ваше устройство готово! Вы можете сделать дешевую arduino attiny13 с объемом памяти в 1024 байта, для простейших мигалок и датчиков.

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

Compile and Upload a program

There are two parts to programming the board

  1. Start the compile and upload process as you usually do for the Arduino.
  2. Plug in the Digispark ATtiny85 to initialise USB detection.

1. Normal Arduino Compilation

To start digispark attiny85 programming hit the compile and upload button or press Ctrl-u.

Once uploading starts you will see the following information in the status box at the bottom of the Arduino IDE:

Sketch uses 700 bytes (11%) of program storage space. Maximum is 6012 bytes.Global variables use 9 bytes of dynamic memory.
Running Digispark Uploader…Plug in device now… (will timeout in 60 seconds)> Please plug in the device …> Press CTRL+C to terminate the program.

2. Micronucleus USB Detection and Upload

Sketch uses 700 bytes (11%) of program storage space. Maximum is 6012 bytes.Global variables use 9 bytes of dynamic memory.
Running Digispark Uploader…Plug in device now… (will timeout in 60 seconds)> Please plug in the device …> Press CTRL+C to terminate the program.> Device is found!connecting: 16% completeconnecting: 22% completeconnecting: 28% completeconnecting: 33% complete> Device has firmware version 1.6> Available space for user applications: 6012 bytes> Suggested sleep time between sending pages: 8ms> Whole page count: 94  page size: 64> Erase function sleep duration: 752msparsing: 50% complete> Erasing the memory …erasing: 55% completeerasing: 60% completeerasing: 65% complete> Starting to upload …writing: 70% completewriting: 75% completewriting: 80% complete> Starting the user app …running: 100% complete>> Micronucleus done. Thank you!