Arduino uno программирование: Программирование Ардуино | Аппаратная платформа Arduino

Содержание

Статьи – RoboCraft

 

Arduino

Arduino — это открытая аппаратная платформа, основными компонентам которой являются небольшая плата ввода/вывода (контроллер) и простая среда разработки на языке программирования С++ (упрощённая версия - Wiring). Обе части системы Arduino очень просты в использовании, но при этом обладают замечательной гибкостью. Эти важные свойства - открытость, простота, гибкость - и принесли Arduino заслуженную популярность среди любителей сделать что-нибудь своими руками. Arduino позволяет пытливым умам школьников, студентов, программистов, дизайнеров, гиков и других креативных товарищей, собрать своё собственное устройство/гаджет/робота, которое сможет работать автономно, либо в связке с компьютером.

Купить Arduino

Купить Arduino Uno или CraftDuino - в нашем Магазине.

Введение

Arduino - введение Ардуино что это и зачем Что за язык программирования используется для Arduino? ХоумМейд Arduino - как сделать Arduino своими руками Arduino как фреймворк КМБ для начинающих ардуинщиков Состав стартера (точка входа для начинающих ардуинщиков) Как адаптировать библиотеки для Arduino 1.0 Разновидности плат Arduino, а также про клоны, оригиналы и совместимость Возможные ошибки при работе с Arduino Программирование Arduino при помощи Raspberry Pi

Основы программирования Arduino/CraftDuino

1. Программирование Arduino - введение 2. Структура программы, константы 3. Цифровой ввод/вывод 4. Аналоговый ввод/вывод 5. Дополнительные функции ввода/вывода 6. Работа со временем 7. Математические функции 8. Псевдослучайные числа 9. Последовательная передача данных 10. Прерывания 11. EEPROM 12. Cоздание своей библиотеки Blink без delay

Практическая работа и программирование Arduino/CraftDuino

Подготовка к работе с Arduino/CraftDuino Ошибки Arduino 0. Начало 1. Цифровой ввод - кнопка 2. Аналоговый вывод - Fading 3. Аналоговый ввод – потенциометр 4. Аналоговый ввод – осциллограф 5. Генерация звука – пьезоизлучатель. 6. Фоторезистор 7. Сенсор на светодиоде 8. Общение с Arduino - программирование работы с COM-портом. 9. Аналоговый датчик температуры – LM335 10. Подключаем к Arduino мышку PS/2 Протокол 1-Wire и iButton (Arduino и эмулятор iButton) Arduino и температурный 1-Wire датчик DS18S20 Arduino и драйвер двигателей L293D (Простой мотор-шилд) Сборка мощного моторшилда (на базе L298) Arduino и сервомашинка Как с помощью Arduino/CraftDuino можно управлять устройствами на 220В Подключаем LCD-дисплей на базе HD44780 к Arduino (Графический экран WG12864B (и ему подобные на ks0107/ks0108)) ИК-датчик препятствий для Arduino на базе фототранзистора Датчик измерения расстояния SHARP-GP2Y0A02YK0F Ультразвуковой датчик измерения расстояния HC-SR04

Библиотеки Arduino

Ethernet library – библиотека для работы с Ethernet Servo library – библиотека для работы с сервомашинками Firmata library – библиотека, реализующая протокол Firmata OneWireSlave - библиотека эмуляции устройства 1-Wire TimerOne - библиотека для работы с таймером МК Wire - библиотека для работы с I2C GLCD - библиотека для работы с графическими LCD
Дополнительно
Arduino/CraftDuino и PROTEUS Arduino/CraftDuino и WinAVR - программируем на чистом С

SPI и Arduino

теория, вывод, ввод Подключаем кучу устройств к Arduino по 5 проводам Делаем ISP-программатор из Arduino Каскад входных сдвиговых регистров Bluetooth-модуль HC-05 Энкодер и шкала Датчики Холла TC15-11 - матрица сетодиодная 8х8 CraftDuino и RFID-модуль RC522

Сервомашинки и Arduino

Сервомашинки Сервомашинки 2. Взгляд под корпус (SG-5010) Подключение сервомашинок к Arduino Хаки сервомашинок. Переделка в серву постоянного вращения

CraftDuino

Описание CraftDuino v2.0 Описание CraftDuino v2.0 SMD Описание CraftDuino v1.0 и её отличий от Arduino

Arduino и ...

Arduino и Processing Arduino и Matlab Arduino и LabVIEW Arduino и Scratch (S4A) Arduino и openFrameworks

Роботы на Arduino

Самодельный робот-пылесос на базе Arduino (Картонный робот-пылесос) Коллективные виброботы на Arduino Простой шагающий робот на Arduino Двуногий робот на Arduino Четырёхногий шагающий робот на Arduino Управление роботом-пылесосом iRobot Roomba с помощью Arduino Роборыба на базе Arduino (с использованием 3D-печати) Обучаемый манипулятор на базе Arduino Манипулятор-клешня из ПКЛ ArduRoller - балансирующий робот на Arduino Гусеницеподобный робот на Arduino Nano Забавный робот на 3 сервах Радиоуправляемый робот и многие-многие другие Arduino роботы...

Дополнительные материалы

Шпаргалка по Arduino Книги про Arduino Выводы Arduino и Arduino pin mapping Блок питания Arduino из зарядки сотового телефона Программаторы Прошивка бутлоадера Программирование Arduino - Физика процесса. Про фьюзы Хаки Arduino - Экономим RAM ATmega - использование памяти Fritzing - САПР для Arduino. VirtualBreadboard - эмулятор Arduino Игра "Жизнь" на Arduino Самодельный датчик цвета

Интерфейсы

1-Wire SPI Интерфейс I2C

Arduino логотипы

Разное

Управляемая веб-камера Мозги для робота Новогоднее исследование ADSL-роутера на базе Linux - введение Робософт - обзор существующих решений Управление роботом-пылесосом iRobot Roomba с помощью Arduino Исследование Wi-Fi-роутера TP-LINK TL-MR3020

Нейронная сеть

Нейронная сеть - введение Обучение ИНС с помощью алгоритма обратного распространения Пример работы самоорганизующейся инкрементной нейронной сети SOINN

Полезные ресурсы

arduino.cc roboforum.ru instructables.com letsmakerobots.com easyelectronics.ru

Arduino Mini, Nano, Uno и Mega. Общие сведения, анализ и программирование

Arduino Mini, Nano, Uno и Mega.

Общие сведения, анализ и программирование

Arduino — это интересный электронный конструктор, с помощью которого можно создавать различные электронные устройства как для начинающих, так и профессионалов. Модули пользуются огромной популярностью благодаря удобству построения схем и простоте языка программирования. Модуль программируется через обычный USB разъём, без использования специальных программаторов. Ранее мы рассматривали несколько простых схем на основе Ардуино.

Arduino — открытая платформа, которая дает возможность создавать различные электронные устройства.  Платы выпускаются в различных модификациях, и различается четыре основных класса:

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

Общие сведения о платформах

Arduino Mini

Arduino Mini предназначается для лабораторных работ или разработок, где размеры являются главным параметром. Запрещено подключать напряжение выше чем 9 В, а также менять его полюса. Программное управление выполняется с помощью адаптера Mini USB или преобразователей RS232, USB в TTL.

 

Arduino Nano

Arduino Nano отличается миниатюрными размерами и может использоваться в лабораторных работах, а также проектах, где размер является критическим показателем. Силовой разъем отсутствует, а работа выполняется через Mini-B USB кабель.

Arduino Uno

 

Arduino Uno используется для создания гаджетов собственной разработки. Простая и удобная в использовании платформа. Программное управление реализуется на C++ упрощенной версии, часто называемой также Wiring. Разработка управляющей программы может вестись и через любой удобный C/C++ инструментарий. Платформа работает с операционными системами LinuxWindows и MacOS X.

Arduino Mega

 

Arduino Mega – это платформа, представленная в виде усовершенствованной версии Uno. Здесь увеличено количество контактов, а также увеличена численность serial-портов, используемых для работы в паре с компьютером или другими системами.

Основные технические параметры Arduino

Для наглядности различия параметров и удобства выбора модели платформ Arduino, основные технические параметры собраны в следующую таблицу:

Mega Uno Nano Mini
Тип микроконтроллера ATmega2560 ATmega328p Atmel ATmega168 или ATmega328 ATmega168
Рабочее напряжение, В 5 5 5 5
Входное напряжение (рекомендуемое), В 7 – 12 7 – 12 7 – 12 7 – 9
Входное напряжение (предельное), В 6 – 20 6 – 20 6 – 20
Цифровые Входы/Выходы 54 (14 могут использоваться как выход ШИМ) 14 (6 можно применить как выход ШИМ) 14 (6 могут служить как выходы ШИМ) 14 (6 как выходы ШИМ )
Аналоговые входы 16 6 8 8 (4 имеют выводы)
Постоянный ток через вход/выход, mA 40 40 40 40
Постоянный ток для вывода 3,3 В, mA 50 50
Флеш-память, Kb 128 (4 использует загрузчик) 32 (0,5 использует загрузчик) 16/32 (ATmega168/ ATmega328) (2 использует загрузчик) 16 (2 на загрузчик)
ОЗУ, Kb 8 2 1 (ATmega168) 2 (ATmega328) 1
Энергонезависимая память 4 Kb 1 Kb 512 b (ATmega168) 1 Kb (ATmega328) 512 b
Тактовая частота, MHz 16
16
16 16

Сравнительные анализ в системе питания платформ

Arduino

Arduino Mega способна питаться, как от USB подключения, так и от внешних источников энергии. Переключения между источниками выполняются автоматически. Внешнее питание может подаваться от преобразователя AC/DC или аккумулятора. При использовании преобразователя, подключения выполняется с помощью разъема 2.1 мм. Плюс остается по центру. Батарея соединятся через Vin и Gnd разъем. При напряжении питания ниже чем 7 В, 5V вывод выдает менее 5 В, а платформа работает нестабильно.

Arduino Uno питание осуществляется через USB и внешние источники, выбираемые автоматически. Подключение через внешний источник питания выполняется посредством разъема 2.1 мм, положительный плюс находится по центру. Батарея соединяется через Gnd и Vin разъема. Минимальное напряжение необходимое для стабильной работы платформы – 7 В. Максимально допустимое для исключение перегревов – 12 В.

Arduino Nano

 питающий проводник подключается через Mini-B USB или же через нерегулируемый вывод 30 (напряжение 6 – 20 В), а также регулируемый 27 выход (напряжение 5 В). В автоматическом режиме используется источник питания с наибольшим напряжением. В сборке микросхема FTDI FT232RL питается только в случае подключение через USB. Поэтому при работе от внешнего источника питания отсутствует напряжение 3.3 В, которое генерируется микросхемой. Сигнализирующие светодиоды работают только при сигнале высокого напряжение на 0 и 1 выходах.

Arduino Mini питание подключается через преобразователь USB в TTL. Подача напряжения выше 9 В приводит к выходу из строя. Замена полюсов способна нанести непоправимый вред платформе.

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

Arduino Mega способна выполнять перезагрузку перед записью нового кода самостоятельно с помощью только лишь программного управления. Автоматическая перезагрузка выполняется при каждом подключении через USB к ПК с Linux или OC Mac X. После перезагрузки на протяжении 0.5 секунды работает загрузчик. В процессе программирования выполняется задержка первых байтов кода, что служит для исключения передачи некорректных данных. В случае, если выполняется разовая настройка скетча или ввод данных в процессе первой загрузки, важно убедится, что компьютерная программа находится в ожидании перед отправкой кода.

Arduino Uno программирование выполняется через программное обеспечение Arduino. Микроконтроллер имеет записанный загрузчик, который облегчает работу по записи новых программ, не используя при этом посторонних программаторов. Связь ведется через протокол STK500.

Arduino Nano применяет стандартное обеспечение. В меню инструментов (Tools) выбирается раздел соответствующий микроконтроллеру. Встроенный загрузчик позволяет выполнять запись новых программ без использования какого либо постороннего программатора. Протокол STK500 служит каналом связи.

Arduino Mini программирование выполняется на основе стандартного программного обеспечения Arduino. Для работы необходим Mini USB адаптер или же преобразователь RS232/USB в TTL. Загрузчик подключается через протокол STK500. ICSP можно использовать как загрузчик.

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



ПОДЕЛИТЕСЬ СО СВОИМИ ДРУЗЬЯМИ:

П О П У Л Я Р Н О Е:
  • Солнечная батарея для вентиляции туалета!
  • Альтернативное питание дачного туалета

    Около 9 лет назад я собрал свою первую солнечную батарею из обломков фотоэлементов. Примерно 5 лет батарея просто валялась без дела, т.к. выдавала малоприменимое напряжение 5-6 В. Но потом я придумал где её можно использовать! Я сделал систему принудительной вытяжной вентиляции дачного туалета 🙂

    Подробнее…

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

  • Устройство для приготовления «живой» и «мертвой» воды
  • «ЖИВАЯ» И «МЁРТВАЯ» ВОДА СВОИМИ РУКАМИ

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

    Подробнее…

Популярность: 1 721 просм.

Arduino — Обзор — CoderLessons.com

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

Ключевые особенности —

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

  • Вы можете управлять функциями своей платы, отправляя набор инструкций микроконтроллеру на плате через Arduino IDE (называемую загрузкой программного обеспечения).

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

  • Кроме того, в среде Arduino IDE используется упрощенная версия C ++, что облегчает обучение программированию.

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

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

Вы можете управлять функциями своей платы, отправляя набор инструкций микроконтроллеру на плате через Arduino IDE (называемую загрузкой программного обеспечения).

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

Кроме того, в среде Arduino IDE используется упрощенная версия C ++, что облегчает обучение программированию.

Наконец, Arduino предоставляет стандартный форм-фактор, который разбивает функции микроконтроллера на более доступный пакет.

Типы плат

Различные типы плат Arduino доступны в зависимости от используемых микроконтроллеров. Однако у всех плат Arduino есть одна общая черта: они программируются через Arduino IDE.

Различия основаны на количестве входов и выходов (количество датчиков, светодиодов и кнопок, которые вы можете использовать на одной плате), скорости, рабочем напряжении, форм-факторе и т. Д. Некоторые платы предназначены для встраивания и не имеют программирования интерфейс (аппаратный), который вам нужно будет купить отдельно. Некоторые могут работать напрямую от батареи 3,7 В, другим нужно минимум 5 В.

Вот список различных плат Arduino.

Платы Arduino на основе микроконтроллера ATMEGA328

Название доски Рабочее напряжение Тактовая частота Цифровой ввод / вывод Аналоговые входы PWM УАПП Интерфейс программирования
Arduino Uno R3 5V 16МГц 14 6 6 1 USB через ATMega16U2
Arduino Uno R3 SMD 5V 16МГц 14 6 6 1 USB через ATMega16U2
Красная доска 5V 16МГц 14 6 6 1 USB через FTDI
Arduino Pro 3,3 В / 8 МГц 3.3V 8MHz 14 6 6 1 FTDI-совместимый заголовок
Arduino Pro 5V / 16MHz 5V 16МГц 14 6 6 1 FTDI-совместимый заголовок
Arduino mini 05 5V 16МГц 14 8 6 1 FTDI-совместимый заголовок
Arduino Pro mini 3,3 В / 8 МГц 3.3V 8MHz 14 8 6 1 FTDI-совместимый заголовок
Arduino Pro mini 5v / 16mhz 5V 16МГц 14 8 6 1 FTDI-совместимый заголовок
Arduino Ethernet 5V 16МГц 14 6 6 1 FTDI-совместимый заголовок
Arduino Fio 3.3V 8MHz 14 8 6 1 FTDI-совместимый заголовок
Основная плата LilyPad Arduino 328 3.3V 8MHz 14 6 6 1 FTDI-совместимый заголовок
LilyPad Arduino простая доска 3.3V 8MHz 9 4 5 0 FTDI-совместимый заголовок

Платы Arduino на основе микроконтроллера ATMEGA32u4

Название доски Рабочее напряжение Тактовая частота Цифровой ввод / вывод Аналоговые входы PWM УАПП Интерфейс программирования
Ардуино Леонардо 5V 16МГц 20 12 7 1 Родной USB
Pro micro 5 В / 16 МГц 5V 16МГц 14 6 6 1 Родной USB
Pro micro 3,3 В / 8 МГц 5V 16МГц 14 6 6 1 Родной USB
LilyPad Arduino USB 3.3V 8MHz 14 6 6 1 Родной USB

Платы Arduino на основе микроконтроллера ATMEGA2560

Название доски Рабочее напряжение Тактовая частота Цифровой ввод / вывод Аналоговые входы PWM УАПП Интерфейс программирования
Arduino Mega 2560 R3 5V 16МГц 54 16 14 4 USB через ATMega16U2B
Мега Про 3.3В 3.3V 8MHz 54 16 14 4 FTDI-совместимый заголовок
Мега Про 5В 5V 16МГц 54 16 14 4 FTDI-совместимый заголовок
Мега Про Мини 3.3В 3.3V 8MHz 54 16 14 4 FTDI-совместимый заголовок

Платы Arduino на основе микроконтроллера AT91SAM3X8E

Как программировать Arduino на ассемблере | by smith_rich

Читаем данные с датчика температуры DHT-11 на «голом» железе Arduino Uno ATmega328p используя только ассемблер

Попробуем на простом примере рассмотреть, как можно “хакнуть” Arduino Uno и начать писать программы в машинных кодах, т.е. на ассемблере для микроконтроллера ATmega328p. На данном микроконтроллере собственно и собрана большая часть недорогих «классических» плат «duino». Данный код также будет работать на практически любой demo плате на ATmega328p и после небольших возможных доработок на любой плате Arduino на Atmel AVR микроконтроллере. В примере я постарался подойти так близко к железу, как это только возможно. Для лучшего понимания того, как работает микроконтроллер не будем использовать какие-либо готовые библиотеки, а уж тем более Arduino IDE. В качестве учебно-тренировочной задачи попробуем сделать самое простое что только возможно — правильно и полезно подергать одной ногой микроконтроллера, ну то есть будем читать данные из датчика температуры и влажности DHT-11.

Arduino очень клевая штука, но многое из того что происходит с микроконтроллером специально спрятано в дебрях библиотек и среды Arduino для того чтобы не пугать новичков. Поигравшись с мигающим светодиодом я захотел понять, как микроконтроллер собственно работает. Помимо утоления чисто познавательного зуда, знание того как работает микроконтроллер и стандартные средства общения микроконтроллера с внешним миром — это называется «периферия», дает преимущество при написании кода как для Arduino так и при написания кода на С/Assembler для микроконтроллеров а также помогает создавать более эффективные программы. Итак, будем делать все наиболее близко к железу, у нас есть: плата совместимая с Arduino Uno, датчик DHT-11, три провода, Atmel Studio и машинные коды.

Для начало подготовим нужное оборудование.

Писать код будем в Atmel Studio 7 — бесплатно скачивается с сайта производителя микроконтроллера — Atmel.

Atmel Studio 7

Весь код запускался на клоне Arduino Uno — у меня это DFRduino Uno от DFRobot, на контроллере ATmega328p работающем на частоте 16 MHz — отличная надежная плата. Каких-либо отличий от стандартного Uno в процессе эксплуатации я не заметил. Похожая чорная плата от DFBobot, только “Mega” отлетала у меня 2 года в качестве управляющего контроллера квадрокоптера — куда ее только не заносило — проблем не было.

DFRduino Uno

Для просмотра сигналов длительностью в микросекунды (а это на минутку 1 миллионная доля секунды), я использовал штуку, которая называется “логический анализатор”. Конкретно, я использовал клон восьмиканального USBEE AX Pro. Как смотреть для отладки такие быстрые процессы без осциллографа или логического анализатора — на самом деле даже не знаю, ничего посоветовать не могу.

Прежде всего я подключил свой клон Uno — как я говорил у меня это DFRduino Uno к Atmel Studio 7 и решил попробовать помигать светодиодиком на ассемблере. Как подключить описанно много где, один из примеров по ссылке в конце. Код пишется прямо в студии, прошивать плату можно через USB порт используя привычные возможности загрузчика Arduino -через AVRDude. Можно шить и через внешний программатор, я пробовал на китайском USBASP, по факту у меня оба способа работали. В обоих случаях надо только правильно настроить прошивальщик AVRDude, пример моих настроек на картинке

Полная строка аргументов:
-C “C:\avrdude\avrdude.conf” -p atmega328p -c arduino -P COM7 115200 -U flash:w:”$(ProjectDir)Debug\$(TargetName).hex:i

В итоге, для простоты я остановился на прошивке через USB порт — это стандартный способ для Arduio. На моей UNO стоит чип ATmega 328P, его и надо указать при создании проекта. Нужно также выбрать порт к которому подключаем Arduino — на моем компьютере это был COM7.

Для того, чтобы просто помигать светодиодом никаких дополнительных подключений не нужно, будем использовать светодиод, размещенный на плате и подключенный к порту Arduino D13 — напомню, что это 5-ая ножка порта «PORTB» контроллера.

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

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

еще раз — на моей плате светодиод Arduino (D13) сидит на 5 ноге порта PORTB ATmeg-и.

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

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

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

Забегая на один шаг вперед, хорошо бы понять, а что собственно с прочитанными данными будем делать? Ну хорошо прочитали мы значение датчика и установили значение переменной в памяти контроллера в 23 градуса по Цельсию, соответственно. Как посмотреть на эти цифры? Решение есть! Полученные данные я буду смотреть на большом компьютере выводя их через USART контроллера через виртуальный COM порт по USB кабелю прямо в терминальную программу типа PuTTY. Для того чтобы компьютер смог прочитать наши данные будем использовать преобразователь USB-TTL — такая штука которая и организует виртуальный COM порт в Windows.

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

Сигнальный вывод датчика подключен к ноге 2 (PIN2) порта PORTD контролера или (что то же самое) к выводу D2 Arduino. Он же через резистор 4.7 kOm “подтянут” на “плюс” питания. Плюс и минус датчика подключены — к соответствующим проводам питания. USB-TTL переходник подключен к выходу Tx USART порта Arduino, что значит PIN1 порта PORTD контроллера.

В собранном виде на breadboard:

Разбираемся с датчиком и смотрим datasheet. Сам по себе датчик несложный, и использует всего один сигнальный провод, который надо подтянуть через резистор к +5V — это будет базовый «высокий» уровень на линии. Если линия свободна — т.е. ни контроллер, ни датчик ничего не передают, на линии как раз и будет базовый «высокий» уровень. Когда датчик или контроллер что-то передают, то они занимают линию — устанавливают на линии «низкий» уровень на какое-то время. Всего датчик передает 5 байт. Байты датчик передает по очереди, сначала показатели влажности, потом температуры, завершает все контрольной суммой, это выглядит как “HHTTXX”, в общем смотрим datasheet. Пять байт — это 40 бит и каждый бит при передаче кодируется специальным образом.

Для упрощения, будет считать, что «высокий» уровень на линии — это «единица», а «низкий» соответственно «ноль». Согласно datasheet для начала работы с датчиком надо положить контроллером сигнальную линию на землю, т.е. получить «ноль» на линии и сделать это на период не менее чем 20 милсек (миллисекунд), а потом резко отпустить линию. В ответ — датчик должен выдать на сигнальную линию свою посылку, из сигналов высокого и низкого уровня разной длительности, которые кодируют нужные нам 40 бит. И, согласно datasheet, если мы удачно прочитаем эту посылку контроллером, то мы сразу поймем что: а) датчик собственно ответил, б) передал данные по влажности и температуре, с) передал контрольную сумму. В конце передачи датчик отпускает линию. Ну и в datasheet написано, что датчик можно опрашивать не чаще чем раз в секунду.

Итак, что должен сделать микроконтроллер, согласно datasheet, чтобы датчик ему ответил — нужно прижать линию на 20 миллисекунд, отпустить и быстро смотреть, что на линии:

Датчик должен ответить — положить линию в ноль на 80 микросекунд (мксек), потом отпустить на те же 80 мксек — это можно считать подтверждением того, что датчик на линии живой и откликается:

После этого, сразу же, по падению с высокого уровня на нижний датчик начинает передавать 40 отдельных бит. Каждый бит кодируются специальной посылкой, которая состоит из двух интервалов. Сначала датчик занимает линию (кладет ее в ноль) на определенное время — своего рода первый «полубит». Потом датчик отпускает линию (линия подтягивается к единице) тоже на определенное время — это типа второй «полубит». Длительность этих интервалов — «полубитов» в микросекундах кодирует что собственно пытается передать датчик: бит “ноль” или бит “единица”.

Рассмотрим описание битовой посылки: первый «полубит» всегда низкого уровня и фиксированной длительности — около 50 мксек. Длительность второго «полубита» определят, что датчик собственно передает.

Для передачи нуля используется сигнал высокого уровня длительностью 26–28 мксек:

Для передачи единицы, длительность сигнала высокого увеличивается до 70 микросекунд:

Мы не будет точно высчитывать длительность каждого интервала, нам вполне достаточно понимания, что если длительность второго «полубита» меньше чем первого — то закодирован ноль, если длительность второго «полубита» больше — то закодирована единица. Всего у нас 40 бит, каждый бит кодируется двумя импульсами, всего нам надо значит прочитать 80 интервалов. После того как прочитали 80 интервалов будем сравнить их попарно, первый “полубит” со вторым.

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

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

Определения:

Как я уже писал сам датчик подключен на 2 ногу порта D. В Arduino Uno это цифровой выход D2 (смотрим для проверки Arduino Pinout).

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

Смотрим анализатором — а ответил ли датчик?

Да, ответ есть — вот те сигналы после нашего первого импульса в 20 милсек — это и есть ответ датчика. Для просмотра посылки я использовал китайский клон USBEE AX Pro который подключен к сигнальному проводу датчика.

Растянем масштаб так чтобы увидеть окончание нашего импульса в 20 милсек и лучше увидеть начало посылки от датчика — смотрим все как в datasheet — сначала датчик выставил низкий/высокий уровень по 80 мксек, потом начал передавать биты — а данном случае во втором «полубите» передается «0»

Значит датчик работает и данные нам прислал, теперь надо эти данные правильно прочитать. Поскольку задача у нас учебная, то и решать ее будем тупо в лоб. В момент ответа датчика, т.е. в момент перехода с высокого уровня в низкий, мы запустим цикл с счетчиком числа повторов нашего цикла. Внутри цикла, будем постоянно следить за уровнем сигнала на ноге. Итого, в цикле будем ждать, когда сигнал на ноге перейдет обратно на высокий уровень — тем самым определив длительность сигнала первого «полубита». Наш микроконтроллер работает на частоте 16 MHz и за период например в 50 микросекунд контроллер успеет выполнить около 800 инструкций. Когда на линии появится высокий уровень — то мы из цикла аккуратно выходим, а число повторов цикла, которые мы отсчитали с использованием счетчика — запоминаем в переменную.

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

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

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

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

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

Памяти в нашем контроллере довольно много — аж 2 (Два) килобайта, так что мы не будем жлобствовать с памятью, и тупо сохраним данные счетчиков относительно наших 80 ( 40 бит, 2 интервала на бит) интервалов в память.

Объявим переменную

CYCLES: .byte 80 ; буфер для хранения числа циклов

И сохраним все считанные циклы в память.

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

Для того чтобы передавать данные в большой компьютер будем использовать USART контроллера, который через USB кабель будет передавать данные в программу — терминал, например PuTTY. Передаем опять же тупо в лоб — засовываем байт в нужный регистр управления USART-а и ждем, когда он передастся. Для удобства я также использовал пару подпрограмм, типа — передать несколько байт, начиная с адреса в Y, ну и перевести каретку в терминале для красоты.

Отправив в терминал число отсчётов для 80 интервалов, можно попробовать собрать собственно значащие биты. Делать будем как написано в учебнике, т.е. в datasheet — попарно сравним число циклов первого «полубита» с числом циклов второго. Если вторые пол-бита короче — значит это закодировать ноль, если длиннее — то единица. После сравнения биты накапливаем в аккумуляторе и сохраняем в память по-байтово начиная с адреса BITS.

Итак, здесь мы собрали в памяти начиная с метки BITS те пять байт, которые передал контроллер. Но работать с ними в таком формате не очень неудобно, поскольку в памяти это выглядит примерно, как:
34002100ХХ, где 34 — это влажность целая часть, 00 — данные после запятой влажности, 21 — температура, 00 — опять данные после запятой температуры, ХХ — контрольная сумма. А нам надо бы вывести в терминал красиво типа «Temperature = 21.00». Так что для удобства, растащим данные по отдельным переменным.

Определения

И сохраняем байты из BITS в нужные переменные

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

PuTTY с данными

Для того, чтобы это измерять температуру регулярно добавляем вечный цикл с задержкой порядка 1200 миллисекунд, поскольку datasheet DHT11 говорит, что не рекомендуется опрашивать датчик чаще чем 1 раз в секунду.

Основной цикл после этого выглядит примерно так:

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

Ссылки по теме:
AVR Delay Calc
Как подключить Arduino для программирования в Atmel Studio 7
DHT11 Datasheet
ATmega DataSheet
Atmel AVR 8-bit Instruction Set
Atmel Studio
Код примера на github

Быстрый ответ: какой программатор использовать для Arduino Uno

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

Какой язык программирования используется для Arduino?

Arduino запрограммирован на «диалекте» c/c++.Большинство c/c++ будут работать, но большая часть стандартных библиотек не будет работать.

Как мне получить программатор для Arduino?

Это легко сделать следующим образом: Инструменты->Доски->Ваша доска. Инструменты->Программист->Ваш программатор.

Могу ли я использовать Python для Arduino?

Arduino использует собственный язык программирования, похожий на C++. Однако можно использовать Arduino с Python или другим языком программирования высокого уровня. Если вы уже знакомы с основами Python, вы сможете начать работу с Arduino, используя Python для управления им.

Могу ли я использовать Java для Arduino?

Оригинальный ответ: Можно ли использовать язык Java для программирования платы Arduino? Нет. У Arduino около 2 килобайт памяти. Недостаточно запустить виртуальную машину Java.

Как записать код Arduino?

Шага Откройте Arduino IDE. Подключите плату программатора к компьютеру. Загрузите скетч ArduinoISP на плату программатора Arduino UNO. После загрузки кода. Отсоедините плату программатора от ПК. Соедините две платы следующим образом:

Как добавить код в Arduino Uno?

Как загрузить скетч в Arduino Подключите Arduino с помощью USB-кабеля. Выберите Tools→Board→Arduino Uno, чтобы найти свою плату в меню Arduino. Выберите правильный последовательный порт для вашей платы. Нажмите кнопку Загрузить.

Какая плата Arduino лучше?

Arduino UNO — самая популярная и продаваемая плата Arduino. Как уже упоминалось, эта плата оснащена микроконтроллером ATMEGA328. Он имеет стандартные штыревые разъемы с 2 разъемами.Расстояние 54 мм и совместимость с различными экранами.

Arduino и Raspberry Pi — это одно и то же?

Raspberry Pi и Arduino — совершенно разные платы. В то время как Arduino нацелен на быстрое программирование и создание прототипов схем, Raspberry Pi действует как инструмент обучения компьютерному программированию (но вы также можете найти Raspberry Pi — это несколько проектов «сделай сам»). Каждая доска имеет свои преимущества и недостатки.

Может ли Arduino подключиться к WiFi?

Arduino Uno WiFi — это Arduino Uno со встроенным модулем WiFi.Плата основана на ATmega328P со встроенным модулем ESP8266WiFi. Модуль ESP8266WiFi — это автономная SoC со встроенным стеком протоколов TCP/IP, которая может предоставлять доступ к вашей сети Wi-Fi (или устройство может действовать как точка доступа).

Какой код у Raspberry Pi?

Питон. Одним из наиболее широко используемых языков программирования на Raspberry Pi является не что иное, как Python. Python имеет простой, удобный для начинающих синтаксис (расположение слов, фраз в предложениях) и широкое распространение среди сообщества, предоставляя доступ к библиотекам, платформам и инструментам, которые помогут пользователям начать работу! 25 февраля 2020 г.

Поддерживает ли Arduino Uno Java?

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

Чем C++ отличается от Java?

КЛЮЧЕВОЕ ОТЛИЧИЕ: C++ использует только компилятор, тогда как Java использует и компилятор, и интерпретатор.C++ поддерживает как перегрузку операторов, так и перегрузку методов, тогда как Java поддерживает только перегрузку методов. C++ поддерживает структуры, тогда как Java не поддерживает структуры.

Что такое Ардулинк?

Ardulink — это полное Java-решение с открытым исходным кодом для управления и координации плат Arduino. Он определяет протокол связи и интерфейс связи, позволяющий реализовать несколько протоколов. Он имеет готовую коллекцию компонентов java SWING, способную взаимодействовать с Arduino.

Есть ли у Arduino Uno загрузчик?

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

Какой программатор Arduino Nano выбрать?

Arduino Nano можно запрограммировать с помощью бесплатного программного обеспечения Arduino (скачать). Выберите «Arduino Diecimila, Duemilanove или Nano с ATmega168» или «Arduino Duemilanove или Nano с ATmega328» в меню «Инструменты» > «Плата».

Как я могу запустить Arduino без компьютера?

Есть два варианта: использовать зарядное устройство USB на 5 В и подключить его с помощью кабеля USB к плате Arduino. Используйте адаптер питания постоянного тока от 7,5 В до 9 В и подключите его к внешнему разъему питания.

Как я могу использовать Arduino IDE без Arduino?

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

Как подключить плату Arduino к компьютеру?

Получить Arduino UNO. Платы Arduino имеют открытый исходный код, поэтому вы можете найти платы «типа UNO» по любой цене. Подключите ардуино. Подключите Arduino к USB-порту вашего компьютера. Добавьте Arduino в свою сцену. Установите доску: перейдите в «Файл» в строке меню. Скажите «ОК», чтобы загрузить готовый эскиз на доску.

Какой микроконтроллер лучше?

10 лучших микроконтроллеров на рынке 1: Groboards Giant Board.(Изображение предоставлено Grobaords) 2: Seeeduino XIAO. (Изображение предоставлено Seeed Studio) 3: BBC micro:bit V2. (Изображение предоставлено: micro:bit) 4: Adafruit Gemma M0. (Изображение предоставлено Adafruit Industries) 5: Arduino Uno Rev3. (Изображение предоставлено Ардуино).

Насколько сложно программировать Arduino?

Трудно ли научиться Arduino? Программирование, электроника, крутые штуки с кодом и компонентами; это в основном то, что вы можете ожидать от использования Arduino. Как и при изучении всего нового, для использования Arduino требуется момент переориентации.Но, в конце концов, разобраться не так уж и сложно.

Какая самая дешевая плата Arduino?

Arduino НЕ является микроконтроллером! Все остальное на плате (причудливый блок питания, светодиоды, кнопка сброса, схема программирования, преобразователь USB-последовательный) совершенно необязательно.

Введение в программирование на машинном языке Arduino — Arxterra

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

0010 0111 0000 0000 → 1110 1111 0001 1111 → 1011 1001 0000 0111 → 1011 1001 0001 1000
1011 1001 0000 0100 → 1011 0000 0111 0110 → 1011 1000 0111 0101 → 1100 1111 1111 1101

Напишите сборку программу для включения свет включается и выключается выключателем. Похожая программа использовалась при разработке The Wake-up Machine.

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

Компьютер реализует классический цифровой вентиль , который вы изучили в классе Digital Logic (EE201) в программном обеспечении с такими инструкциями, как and, or, и eor/xor.

Вам также придется плавно переходить от двоичной системы счисления к шестнадцатеричной и обратно (например, Системы счисления ).

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

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

Хорошей новостью является то, что справка по доступна в Главе 0: «Введение в вычислительную технику» вашего учебника, в дополнительных материалах, приведенных в начале этого документа, в Интернете и в Приложении A – Системы счисления.

Числа и их компьютерное представление

Введение

Основание 10 результат десяти пальцев

Арабские символы 0-9, Индия создала нулевую и позиционную нотацию

Другие системы: римские цифры: существенно аддитивны. Важность римских цифр заключается в том, предшествует ли символ другому символу или следует за ним.Бывший. IV = 4 против VI = 6. Это была очень неуклюжая система для арифметических операций.

Позиционная запись (положительные действительные целые числа)

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

Значение каждой цифры определяется ее позицией. Обратите внимание на произношение 256 «Двести пятьдесят шесть?

пр. 256 = 2*10 2 + 5*10 1 + 6*10 0

Обобщение по любому основанию или основанию

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

N = A N R N + A N-1 R N-1 R N-1 + … + A 1 R 1 + A 0 R 0 (или простой 1 р + А 0 )

Введение в двоичную систему

Работа большинства цифровых устройств по своей природе бинарна, они либо включены, либо выключены.

Примеры: переключатель, реле, лампа, транзистор и транзисторно-транзисторно-логическая интегральная схема (TTL IC)

Таким образом, цифровому компьютеру вполне логично использовать базу 2.

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

В бинарной системе разрешено только 2 состояния; 0 и 1 (ЛОЖЬ или ИСТИНА, ВЫКЛ или ВКЛ)

Пример:      Старший бит

Бит = одна двоичная цифра (0 или 1)

Это уравнение, связанное с позициями, также дает нам инструмент для преобразования заданной системы счисления в систему счисления с основанием 10 — в этом примере двоичную в десятичную.

Основание восемь и основание шестнадцать

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

Путем группировки 3 двоичных цифр или битов формируется одна восьмеричная цифра. Обратите внимание, что 2 3 = 8

Таблица преобразования двоичных данных в восьмеричные

2 2 2 1 2 0

0 0 0   =  0

0 0 1   =  1

0 1 0   =  2

0 1 1   =  3

1 0 0   =  4

1 0 1   =  5

1 1 0   =  6

1 1 1   =  7                 Символы (не числа) 8 и 9 не используются в восьмеричной системе.

Пример:    100 001 010 110

4     1      2     6 8  = 4*8 3 + 1*8 2 + 2*8 1 + 6*8 0 = 20034 20034

Это еще один эффективный способ перехода от основания 2 к основанию 10.

Резюме: База 8 позволяет вам работать на языке компьютера, не имея дело с большим количеством единиц и нулей. Это стало возможным благодаря простоте преобразования с основанием 8 в основание 2 и обратно.

В микрокомпьютерах используется группировка из 4 бит (вместо 3 бит) или основание 16 (2 4 ).Первоначально произносившийся шестнадцатеричным, основание 16 было быстро переименовано в шестнадцатеричное (на самом деле это должно быть основание 6).

Таблица преобразования двоичных данных в шестнадцатеричные

2 3 2 2 2 1 2 0

0 0 0 0   =  0

0 0 0 1   =  1

0 0 1 0   =  2

0 0 1 1   =  3

0 1 0 0   =  4

0 1 0 1   =  5

0 1 1 0   =  6

0 1 1 1   =  7

1 0 0 0   =  8

1 0 0 1   =  9

1 0 1 0   =  А

1 0 1 1   =  В

1 1 0 0   =  C

1 1 0 1   =  D

1 1 1 0   = E

1 1 1 1   =  F

In Hex Символы от 10 до 15 заимствованы из алфавита.Это показывает, насколько относительными являются числа на самом деле, или, другими словами, они действительно являются просто символами.

Пример:    1000 0101 0110

8        5       6 16  = 8*16 2 + 5*16 1 + 6*16 0 = 2134

Работать с основанием 16 не так сложно, как может показаться, хотя это и требует некоторой практики.

Преобразование из базы 10 в заданное основание (или базу)

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

.

Чтобы получить цифры в правильном порядке, пусть они падают вправо.

Для этого примера:  43 10 = 101011 2                 Быстрая проверка (восьмеричное число)  101  011 = 5*8 + 3 = 43 10

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

.

Восьмеричное длинное деление

Для этого примера: 43 10 = 53 8              Быстрая проверка (восьмеричное число) 5*8 + 3 = 43 10

Обобщение процедуры ИЛИ Почему это работает

Где r = основание, N = число, A = остаток и n = количество цифр в основании r для числа N.Деление обычно выполняется в базе 10.

Другой способ выражения приведенной выше таблицы:

N    = r*N 1 + A 0

Н 1 = г*Н 2 + А 1

Н 2 = г*Н 3 + А 2

:

N n-1 = r*N n + A n-1

N n    =  r*0    + A n

или (теперь для легкости)

N    = r*( r*N 2 + A 1 )+ A 0                                                                                                                       

N  = r 2 N 2 + rA 1 + A 0                                                                                   

N  = r 2 (r*N 3 + A 2 ) + rA 1 + A 0                                                                                    

:

n = A N R N + A N-1 R N-1 R N-1 + … + A 1 R 1 + A 0 R 0

Номенклатура

Бит              =          1 двоичная цифра

Байт           =          8 бит

Полубайт         =          один полубайт = 4 бита

Word          =          Зависит от компьютера

Двоичная арифметика

Двоичное сложение

Двоичное сложение выполняется аналогично десятичному сложению с использованием следующих правил двоичного сложения:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 10   (0 с переносом 1)

Примеры:

Проблема 21 10 + 10 10 = 31 10 45 10 + 54 10 = 99 10 3 10 + 7 10 = 10 10
         10101 2

+       01010 2

_______________

11111 2

         101101 2

+       110110 2

_______________

1100011 2

         011 2

+       111 2

_______________

1010 2

Чек 1*2 3 + 0*2 2 + 1*2 1 + 0*2 0 =

1*8 + 0*4 + 1*2 + 0*1 = 10 10

Восьмеричное сложение

Восьмеричное сложение также выполняется аналогично десятичному сложению, за исключением того, что каждая цифра имеет диапазон от 0 до 7 вместо 0 до 9.

Проблема 21 10 + 10 10 = 31 10 45 10 + 54 10 = 99 10 3 10 + 7 10 = 10 10
         25 8

+       12 8

_______________

37 8

         55 8

+       66 8

_______________

143 8

         3 8

+       7 8

_______________

12 8

Чек 3*8 1 + 7*8 0

3*8 + 7*1 = 31 10

1*8 2 + 4*8 1 + 3*8 0

64 + 32 + 3 = 99 10

1*8 1 + 2*8 0

8 + 2 = 10 10

Шестнадцатеричное сложение

Шестнадцатеричное сложение также выполняется аналогично десятичному сложению, за исключением того, что каждая цифра имеет диапазон от 0 до 15 вместо 0 до 9.

Проблема 21 10 + 10 10 = 31 10 45 10 + 54 10 = 99 10 3 10 + 7 10 = 10 10

         15 16

+       0A 16

_______________

1F 16

         2D 16

+       36 16

_______________

63 16

         3 16

+       7 16

_______________

А 16    (не 10)

Чек 1*16 1 + 15*16 0

16 + 15 = 31 10

6*16 1 + 3*16 0

96 + 3 = 99 10

10*16 0

10 10

Двоичное умножение
Десятичный Двоичный

11 10

x        13 10

_______________

33 10

11 10–

_______________

143 10

     1011 2

x   1101 2

_______________

1011 2

0000 2-

1011 2–

1011 2—

_______________

10001111 2

Чек 8*16 1 + 15*16 0

128 + 15 = 143 10

Двоичный раздел

Чек: 1*16 1 + 5*16 0 = 16 + 5 = 21 10

Практикуйтесь в арифметических операциях, составляя задачи, а затем проверяя свои ответы, переводя их обратно в десятичную систему счисления по разным основаниям (т.д., 2, 8 и 16).

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

Дополнения и отрицательные числа ИЛИ Добавление бита знака

Сложение, умножение и деление — это хорошо, но как насчет вычитания и отрицательных чисел? Из начальной школы вы узнали, что вычитание — это просто сложение отрицательного числа. Математики вместе с инженерами использовали этот принцип вместе с арифметикой по модулю — естественным результатом сумматоров конечной длины — чтобы позволить компьютерам работать с отрицательными числами без добавления каких-либо новых аппаратных элементов в арифметико-логическое устройство (АЛУ).

Знак Величина

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

знак                величина

Пример:    – 2        =          1                              0010 2

Единицы Дополнение

Вот решение, которое немного сложнее. Добавьте бит знака и инвертируйте каждый бит, составляющий величину — просто измените 1 на 0 и 0 на 1.

знак                величина

Пример:    – 2        =          1                             1101 2

Чтобы вычесть дополнение до 1, вы просто добавляете биты знака и величины, позволяя последнему биту переноса (от знака) попасть в корзину битов , а затем добавляете 1 к ответу. Еще раз позвольте последнему биту переноса упасть в ведро с битами. Битовое ведро возможно из-за физического размера сумматора.

0 1010 2                10

+   _ 1 1101 2              +(-2)

0 1000 2                  8

+______1 2                        Настройка

0 1001 2

Хотя теперь вы можете использовать аппаратный сумматор для вычитания чисел, теперь вам нужно добавить 1 к ответу.Это снова означает добавление оборудования. Усугубляет эту проблему то, что дополнение до единиц позволяет двум числам равняться 0 ( шизофренический ноль ).

Дополнение к двойке

Вот решение, чуть более сложное в настройке, но не требующее корректировок в конце добавления. Есть два способа получить дополнение числа до двух.

Метод 1 = Возьмите дополнение до 1 и добавьте 1

__0 0010 2              2

+    1 1101 2              Дополнение до 1 (т.е. инвертировать)

+              1 2                       добавить 1

1 1110 2

Метод 2 = Двигайтесь справа налево, пока не встретите 1, затем инвертируйте.

0 0010 2 начало = 2 10
0 2 без изменений
10 2 нет изменений, но встречается одно
110 2 инвертировать = изменить 0 на 1
1110 2 инвертировать = изменить 0 на 1
1 1110 2 инвертировать = изменить 0 на 1

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

0 1010 2                10

+    1 1110 2              +(-2)

0 1001 2                  8

Примеры:

Проблема 33 10 – 19 10 = 14 10 69 10 – 84 10 = -15 10

         0 100001 2

+       1 101101 2

_______________

0 001110 2

         0 1000101 2

+       1 0101100 2

_______________

1 1110001 2

Чек преобразовать в промежуточную базу E 16 = 14 10 преобразовать обратно в знак величины

– 0001111 2

преобразовать в промежуточную базу (16)

– F 16 = – 15 10

Почему это работает

Реальные сумматоры имеют конечное число битов, что естественным образом приводит к арифметике по модулю — битовому ведру.

Переполнение

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

Тест 1 = Если два числа отрицательные, а ответ положительный, произошло переполнение.

Тест 2 = Если два числа положительные, а ответ отрицательный, произошло переполнение.

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

Коды символов ИЛИ нечисловая информация

Задача с десятичными числами

Представление десятичных чисел в двоичном компьютере. Двоичное представление десятичного числа несколько лет назад могло быть «зашито» в арифметико-логическое устройство (АЛУ) компьютера. Сегодня он, скорее всего, просто представляет некоторую информацию, которая естественным образом представлена ​​в базе 10, например, ваш студенческий билет.

Раствор

В этой задаче нужно представить десять разных цифр. Используя 4 бита 2 4 или 16 комбинаций, можно создать. Используя 3 бита 2 3 или 8 комбинаций, можно создать. Таким образом, для представления одной десятичной цифры потребуется 4 бита. Здесь следует указать, как из 4 битов (0000–1111) можно создать 16 комбинаций, в то время как наибольшее числовое значение, которое может быть представлено, равно 15. Причина, по которой наибольшее числовое значение и количество комбинаций различаются, связана с ноль (0) является одной из комбинаций.Эта разница указывает на необходимость всегда следить за тем, мокрее вы работаете, ноль или один родственник, и что именно вы ищете — двоичное число или комбинации.

Наиболее распространенный способ представления десятичного числа называется двоично-десятичным кодом (BCD). Здесь каждое двоичное число соответствует своему десятичному эквиваленту, а числа больше 9 просто не допускаются. BCD также известен как код 8-4-2-1, поскольку каждое число представляет соответствующий вес двоичных цифр.Напротив, код Excess-3 представляет собой невзвешенный код, использовавшийся в более ранних компьютерах. Его кодовое назначение происходит от соответствующего двоично-десятичного кода плюс 3. Преимущество кода Excess-3 заключалось в том, что путем дополнения каждой цифры двоичного кодового представления десятичной цифры (дополнение до 1) было бы сформировано дополнение до 9 этой цифры. В следующей таблице перечислены все десятичные цифры и их эквиваленты в кодах BCD и Excess-3. Я также включил отрицательный эквивалент каждой десятичной цифры, закодированной с использованием кода Excess-3.Например, дополнение 0100 (1 десятичный знак) равно 1011, то есть 8 десятичных знаков. Вы можете найти больше десятичных кодов на странице 18 «Цифрового дизайна» М. Морриса Мано (текст курса).

Двоично-десятичный код (BCD) Превышение-3
Десятичная цифра Двоичный код 8-4-2-1 Десятичная цифра Двоичный код 9 комплиментов

0

1

2

3

4

5

6

7

8

9

Н/Д

Н/Д

Н/Д

Н/Д

Н/Д

Н/Д

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

н/д

Н/Д

Н/Д

0

1

2

3

4

5

6

7

8

9

Н/Д

Н/Д

Н/Д

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

1111

1110

1101

1100

1011

1010

1001

1000

0111

0110

0101

0100

0011

0010

0001

0000

Проблема с буквенно-цифровым символом

Представляет буквенно-цифровые данные (строчные и прописные буквы алфавита (a-z, A-Z), цифровые числа (0-9) и специальные символы (возврат каретки, перевод строки, точка и т. д.).).

Раствор

Чтобы представить заглавные и строчные буквы алфавита плюс десять цифр, вам нужно как минимум 62 (2×26+10) уникальных комбинаций. Хотя код, использующий только шесть двоичных цифр, обеспечивающий 2 6 или 64 уникальных комбинации, будет работать, для специальных символов останется только 2 комбинации. С другой стороны, код, использующий 7 бит, обеспечивает 2 7 или 128 комбинаций, что дает более чем достаточно места для алфавита, цифр и специальных символов.Итак, кто решает, какие бинарные комбинации каким символам соответствуют. Здесь нет «лучшего пути». Около тридцати лет назад IBM выпустила новую серию компьютеров, в которых для хранения одного символа использовалось 8 бит (2 8 = 256 комбинаций), и разработала расширенный двоично-десятичный код обмена (EBCDIC, произносится как ep-su-dec). для этой цели. Поскольку у IBM была почти монополия в области компьютеров, в то время другие производители компьютеров отказались принять EBCDIC, и именно так появился 7-битный американский стандартный код для обмена информацией (ASCII).В настоящее время ASCII принят практически всеми производителями микрокомпьютеров и мини-компьютеров. В таблице ниже показан частичный список кодов ASCII. На странице 23 текста перечислены все 128 кодов с пояснениями к управляющим символам.

ДЕКАБРЬ Шестигранник СИМВОЛ ДЕКАБРЬ Шестигранник СИМВОЛ
32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

20

21

22

23

24

25

26

27

28

29

2D

2F

30

31

32

33

34

35

36

37

38

39

3D

3F

!

»

#

$

%

и

(

)

*

+

,

*

/

0

1

2

3

4

5

6

7

8

9

:

;

?

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

40

41

42

43

44

45

46

47

48

49

4F

50

51

52

53

54

55

56

57

58

59

5D

5F

@

А

Б

С

Д

Е

Ф

Г

Х

я

Дж

К

л

М

Н

О

Р

В

Р

С

Т

У

В

Вт

х

Д

З

[

]

^

_

Слово «строка» обычно используется для описания последовательности символов, хранящихся в виде их числовых кодов (например, ASCII).

Хотя для ASCII требуется только 7 бит, стандартом в компьютерах является использование 8 бит, где крайний левый бит равен 0. Это позволяет вам закодировать еще 128 символов (включая такие символы, как греческие буквы), что дает вам расширенных символов. установите , просто присвоив самому левому биту значение 1. Это также может привести к компьютерной версии Вавилонской башни. В качестве альтернативы крайний левый бит может использоваться для обнаружения ошибок при передаче символов по телефонной линии. Что подводит нас к нашей следующей проблеме.

Синтез

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

Проблема со связью

Двоичная информация может передаваться последовательно (по одному биту за раз) через какой-либо вид средства связи, такой как телефонная линия или радиоволна. Любой внешний шум, внесенный в среду, может изменить битовые значения с 1 на 0 или наоборот.

Раствор

Самое простое и наиболее распространенное решение проблемы связи заключается в добавлении бита четности к отправляемой информации. Функция бита четности состоит в том, чтобы сделать общее количество отправляемых единиц либо нечетным (нечетная четность), либо четным (четная четность). Таким образом, если было отправлено любое нечетное количество единиц, но получено четное число единиц, вы знаете, что произошла ошибка. В приведенной ниже таблице показаны соответствующие биты четности (нечетные и четные), которые будут добавлены к 4-битному фрагменту данных.

Синтез

Что произойдет, если две двоичные цифры изменят значения битов? Можно ли разработать систему не только для обнаружения ошибок, но и для идентификации и исправления измененных битов? Один из наиболее распространенных кодов исправления ошибок был разработан Р. У. Хэммингом. Его решение, известное как код Хэмминга, можно найти в самых разных местах, от схемы оперативной памяти (ОЗУ) до телекоммуникационной линии космического корабля. Дополнительные сведения о кодах исправления ошибок см. на страницах 299–302 текста.

Хотя обнаружение ошибок — это хорошо, предотвращение их появления — еще лучше. Что, конечно же, подводит нас к нашей следующей проблеме.

Проблема датчика положения вала

При вращении вала необходимо преобразовать его радиальное положение в двоично-цифровое число.

Раствор

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

Энкодер может быть физически реализован с использованием электромеханической (щеточной) или электрооптической технологии.Предполагая электрооптическое решение, кодирующий диск состоит из полос, разделенных на прозрачные сегменты (заштрихованные области) и непрозрачные сегменты (незаштрихованные области). С одной стороны диска размещен источник света, а с другой стороны — набор из четырех фотоэлементов, расположенных так, что по одной ячейке находится за каждой полосой диска кодера. Если между источником света и светочувствительной клеткой находится прозрачный сегмент, будет получен результат 1; и если перед фотоэлементом находится непрозрачная область, будет выход O.

Существует одна основная проблема с показанным кодером: если диск находится в позиции, где выходное число меняется с 011 на 100, или в любой позиции, где несколько битов изменяют значение, выходной сигнал может стать неоднозначным. Как и в любом физически реализованном устройстве, как бы тщательно оно ни было изготовлено, кодер будет иметь ошибочные выходы в нескольких позициях. Если это происходит, когда 011 изменяется на 100, возможно несколько ошибок; значение может быть прочитано как 111 или 000, любое из которых является значением со значительными ошибками.Чтобы обойти эту трудность, инженеры используют код «Грей» или «единичное расстояние» для формирования диска кодера (см. предыдущий рисунок). В этом коде 2 бита никогда не меняют значения в последовательных закодированных двоичных числах. При использовании диска с кодировкой Грея 6 может быть прочитано как 7, а 4 как 5, но больших ошибок не будет. В таблице ниже показан список 4-битного кода Грея.

Десятичный Серый Код

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

0000

0001

0011

0010

0110

0111

0101

0100

1100

1101

1111

1110

1010

1011

1001

1000

Синтез

Код Грея

используется во множестве приложений, отличных от энкодеров.Например, КМОП-схемы потребляют наибольший ток при переключении. Если одновременно переключается большое количество цепей, могут возникнуть нежелательные явления, такие как «отскок земли» и «помехи электромагнитных помех». Если транзисторы переключаются из-за каких-то последовательных явлений (например, подсчета), то этих нежелательных посетителей можно свести к минимуму, заменив взвешенный двоичный код кодом Грея.

Если входные данные для двоичной машины поступают от кодировщика, использующего код Грея, каждое слово должно быть преобразовано в обычный двоичный или двоично-десятичный битовый эквивалент.Как это может быть сделано? Прежде чем вы сможете ответить на этот вопрос, вам нужно узнать о булевой алгебре — какое совпадение, это тема следующего раздела.

Набор инструкций ATmega328P (стр. 12-14)

Схема протощита Arduino

Рисунок: Arduino Proto-Shield


Программирование Arduino Uno (ATmega386P) на ассемблере · GitHub

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

Требования

Есть два основных варианта задачи (о которых я знаю), и установка, на которой я остановился, является случайной в ретроспектива 1 . Но вы можете самостоятельно исследовать альтернативную установку, основанную на проекте AVR Libc.

Для установки, которую я использую, вам нужны: avrdude и avra. Обратите внимание, что я использую Linux, и если вы используете другую операционную систему, вы будете самостоятельно устанавливать/настраивать эти инструменты.

Необязательно (но необходимо прочитать)

При подключении через USB мой последовательный интерфейс Uno будет сопоставлен с /dev/ttyACM0 . Поскольку мне нужно было более интуитивно понятное имя устройства (и тот факт, что мне потребовалось некоторое время, чтобы выяснить, какое имя устройства было в первом имени), я написал правило udev , чтобы сопоставить мою плату Uno с /dev/arduino. -уно .

$ кот /etc/udev/rules.d/10-arduino.rules
KERNEL=="ttyACM0", SYMLINK+="arduino-uno", OWNER="mhitza" 

Если вы делаете символическую ссылку, не забудьте также включить директиву OWNER ; в противном случае каждый раз, когда вы загружаете новую программу в свой Uno, вам придется звонить avrdude с sudo .

ПРИМЕЧАНИЕ Если вы пропустили этот шаг, обязательно замените любое вхождение /dev/arduino-uno на /dev/ttyACM0 и добавьте префикс ко всем вызовам avrdude с sudo в последующем Makefile.

Также вы увидите ссылку на picocom (программа, используемая для последовательной связи с платой) в Makefile, который я использую, и он должен работать, но я еще не тестировал его.

Простой Makefile

ПРИМЕЧАНИЕ Уже существует популярный проект Makefile для Arduino, однако он основан на проекте AVR Libc.Как и в случае с другими готовыми решениями, такими как oh-my-zsh, я предпочитаю начинать с небольшой базы. Мне легче понять и поддерживать.

Makefile доступен ближе к концу страницы.

Дана программа с именем blink.asm

  • make (или make blink.hex ) — скомпилировать в шестнадцатеричный файл
  • make program=blink upload — загрузить программу на плату Arduino. Если вы не выполнили предыдущий шаг вручную, программа также скомпилирует для вас
  • сделать монитор — монитор серийных данных

Откуда берутся имена?

При чтении других примеров ассемблерного кода в Интернете вы найдете ссылки на именованные константы, которые не встроены в ассемблер.Обычно они приходят из m328Pdef.inc. Откуда ты скачать этот файл на самом деле не имеет значения, так как в основном каждый носит с собой копию; или так кажется. 2

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

Проект по образцу код

Проект отрендерен на 123d.схемы.io

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

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

Ссылки

ПРИМЕЧАНИЕ руководство по сборке предназначено для AVRASM32.exe , а не avra . Однако avra является совместимым ассемблером с несколькими дополнительными функциями

.

ПРИМЕЧАНИЕ Если вы видите в Интернете ссылки на avrasm2 , вы должны знать, что эта часть программного обеспечения отличается от AVRASM32.exe и avra . И avra вряд ли сможет скомпилировать код, написанный для этого ассемблера.

При программировании AVR на ассемблере необходимо держать эти ссылки под рукой:


  1. Первоначально я начал с avr-as , но нашел полезные ответы stackoverflow указал на avra и как только я смог написать простую программу я не оглядывался назад. прыгать в ссылка
  2. Возможно, это имеет значение, откуда вы его скачали. Какой-нибудь подлый человек может предоставить это файл в измененном формате, где сопоставления были бы неправильными, и вы бы записывали в неправильные биты памяти и тратили часов/дней на отладку ассемблерного кода.перейти к ссылке

Что такое Ардуино? — GeeksforGeeks

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

Arduino. Компания

Arduino была проектом, начатым в Interaction Design Institute Ivrea (IDII) в Ивреа, Италия, основной целью которого было создание доступных и простых инструментов для использования и создания цифровых проектов неспециалистами.В зачаточном состоянии проект состоял всего из трех участников: Эрнандо Барраган, Массимо Банзи и Кейси Реас. Эрнандо Барраган работал под руководством Массимо Банци и Кейси Реаса и создал платформу разработки под названием Wiring в качестве своего дипломного проекта в IDII. Платформа разработки состояла из микроконтроллера ATMega168 в качестве мозга и использовала IDE, основанную на Processing, которая была создана совместно с Кейси Риасом. Позже Массимо Банзи вместе с двумя другими студентами из IDII, а именно — Дэвидом Меллисом и Дэвидом Куартьелесом, добавили поддержку более дешевого микроконтроллера ATMega8.Втроем вместо того, чтобы работать над разработкой и улучшением Wiring, они разветвили его и переименовали проект в Arduino. Первоначальная основная команда Arduino состояла из Массимо Банци, Дэвида Куартьелеса, Тома Иго, Джанлуки Мартино и Дэвида Меллиса, но Барраган не был включен.

Аппаратное обеспечение

Теперь, когда вы знаете происхождение Arduino, важно ознакомиться с аппаратным обеспечением, которое предлагает компания Arduino. Одна из основных причин доступности Arduino по всему миру заключается в том, что все аппаратное обеспечение Arduino имеет открытый исходный код.Открытый исходный код имеет множество преимуществ: любой может получить доступ к дизайну и сборке устройства и вносить улучшения; любой может использовать один и тот же аппаратный дизайн для создания своей линейки продуктов. Поскольку Arduino имеет открытый исходный код, у нее есть собственное преданное сообщество, которое стремится помочь основной компании разрабатывать и улучшать свои аппаратные продукты. Еще одно существенное преимущество открытого исходного кода, особенно в случае с оборудованием, заключается в том, что местные компании могут создавать копии продуктов, что делает их более доступными и доступными для местных потребителей, поскольку это позволяет избежать высоких таможенных сборов и транспортных расходов.Все эти преимущества способствуют тому, что Arduino так широко распространена, доступна и постоянно совершенствуется.
Необходимо знать, что Arduino не обязательно предлагает только одну аппаратную часть, она предоставляет ряд плат, каждая из которых предназначена для разного уровня знаний и в целом имеет разные варианты использования. Arduino Uno — одна из самых простых и популярных плат, которые предлагает Arduino. Это связано с тем, что он оснащен микроконтроллером ATMega328, который является одновременно дешевым и достаточно мощным для большинства базовых проектов начального уровня.После того, как вы ознакомитесь с Arduino IDE, вы можете перейти на платы с более мощными и сложными наборами микросхем, такими как линейка MKR, которая связана с приложениями IoT и совместимостью, или линейка Nano, которая, как следует из названия, предназначена для сохранения формы. фактор как можно меньше, сохраняя при этом большинство функций и мощности полноразмерных плат.

Понимание аппаратного обеспечения

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

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

Используя приведенное выше изображение в качестве справки, компоненты платы помечены соответственно:

  1. USB: может использоваться как для питания, так и для связи с IDE
  2. Barrel Jack: используется для питания
  3. Регулятор напряжения: регулирует и стабилизирует входное и выходное напряжения
  4. Кварцевый осциллятор: отслеживает время и регулирует частоту процессораКонтакт 3 В: может использоваться как выход 3,3 В
  5. Контакт 5 В: может использоваться как выход 5 В
  6. Контакт GND: может использоваться для заземления цепи
  7. Контакт Vin: может использоваться для подачи питания на плату
  8. Аналоговые контакты (A0-A5): могут использоваться для считывания аналоговых сигналов с платы
  9. Микроконтроллер (ATMega328): процессорный и логический блок платы : разъем для программирования на плате, также называемый SPI
  10. Светодиодный индикатор питания: показывает состояние питания платы
  11. Светодиоды RX и TX: светодиоды приема (RX) и передачи (TX), мигают при отправке или прием последовательных данных соответственно
  12. Контакты цифрового ввода/вывода: 14 контактов, способных считывать и выводить цифровые сигналы; 6 из этих контактов также поддерживают ШИМ.
  13. Контакты AREF: можно использовать для установки внешнего опорного напряжения в качестве верхнего предела для аналоговых контактов. Начало работы с Arduino IDE

    Теперь, когда вы знакомы с оборудованием, пришло время узнать о среде разработки, с помощью которой вы собираетесь программировать Uno.Arduino IDE — лучшее место для начала вашего пути в программировании вашего Uno. Чтобы начать работу, посетите эту страницу и загрузите последнюю сборку Arduino IDE для своего Mac или ПК. Установите IDE на свой ПК или Mac и откройте ее.

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

    Загрузка вашей первой программы

    В этом примере программы мы будем мигать встроенным светодиодом L, расположенным прямо над светодиодами RX и TX. Arduino IDE включает в себя множество основных программ, которые помогут вам начать работу с Uno.В этом примере мы будем использовать встроенную программу «Blink». Чтобы открыть эту программу, перейдите в меню «Файлы» в строке меню; нажмите «Примеры»; нажмите 01.Основы; выберите Мигание. Теперь, когда вы открыли пример программы, пришло время загрузить программу, для этого нажмите кнопку загрузки и дождитесь завершения процесса. Если заголовок панели вывода становится желтым и отображается ошибка «Последовательный порт COM’x’ не найден», значит, вы неправильно подключили плату или не указали правильный порт, к которому подключена плата в ИДЕ.Когда вы продвигаетесь вперед и начинаете писать свои собственные программы, вы можете столкнуться с ошибками при компиляции и загрузке; это может быть из-за синтаксической ошибки в программе. После того, как вы исправите ошибки и загрузите программу, вы увидите, что встроенный светодиод мигает, чередуя состояния ON и OFF каждую секунду.

    Поздравляем с загрузкой и выполнением вашего первого фрагмента кода на Arduino Uno. Теперь вы можете поработать с программой, которую вы только что загрузили, изменив значения задержки.Это изменит характер и скорость моргания. Имейте в виду, что единицей времени по умолчанию в Arduino IDE являются миллисекунды; также помните, что вы должны загрузить программу на плату после того, как вы внесли изменения в значения задержки, чтобы заметить изменения в скорости и характере мигания.

    Двигаясь вперед

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

     

    Самодельное оборудование

    Ардуино Уно: Программирование

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

    В этом руководстве предполагается, что вы прочитали предыдущее руководство по компонентам Arduino Uno и макетированию Arduino.

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

    Содержание руководства:

    1. Код загрузки
    2. Совершенно новые чипсы
    3. Настройки предохранителей
    4. Запись загрузчика
    5. Ардуино как интернет-провайдер
    6. Программирование на макетной плате

    Код загрузки

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

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

    Так что же именно происходит, когда вы нажимаете кнопку «Загрузить» в Arduino IDE?

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

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

    Вы можете экспортировать HEX-файл из Arduino IDE (не загружая его), выбрав Sketch -> Exportcompiled Binary .

    Откройте файл в редакторе кода, и вы увидите бинарный блоб.

    Большая часть HEX-файла состоит из двух частей:

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

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

    Важно отметить, что если вы скомпилируете свой скетч для платы с другим микроконтроллером (например, Arduino Leonardo), двоичный файл HEX будет совершенно другим.

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

    Файл HEX отправляется через USB-соединение на адаптер uart-to-usb Arduino Uno ( ATmega8u2 ).

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

    Интернет-провайдер ( ATmega8u2 в нашем случае) затем преобразует эти данные USB в UART и отправляет их на целевой ATmega328p для сохранения в памяти.

    Примечание : Вы когда-нибудь замечали, что Arduino Uno перезагружается каждый раз, когда вы открываете для него последовательный порт? Важно знать, что адаптер uart-to-usb (ISP) на Arduino Uno автоматически сбрасывает ATmega328p каждый раз, когда открывается новый последовательный порт.

    Примечание : Также важно знать, что ATmega328p может считывать новый код только сразу после сброса. Именно поэтому разработчики Arduino Uno решили сделать так, чтобы адаптер uart-to-usb (ISP) автоматически сбрасывал чип при открытии последовательного порта.

    Ура! Вот как Arduino IDE получает скетч для Arduino Uno!

    Совершенно новые чипсы

    При изготовлении плат своими руками мы используем микроконтроллеры, которые покупаем в Интернете.Однако, если вы попытаетесь нажать кнопку «Загрузить» в Arduino IDE с совершенно новым ATmega328p , вы получите кучу ошибок, и он не будет работать.

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

    Однако на чипе есть один небольшой фрагмент кода.Его невозможно стереть, и это первое, что делает чип после сброса (или включения питания).

    Этот небольшой фрагмент кода называется загрузчиком производителя и выполняет только одну функцию:

    1. Считать новый код (файлы HEX)
    2. Сохраните этот новый код в памяти

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

    Atmel, разработчики ATmega328p , решили, что по умолчанию ATmega328p считывает код с выводов SPI. Вывод SPI на Arduino Uno — это контакты D13 ( SCK ), D12 ( MISO ) и D11 ( MOSI ), и именно здесь загрузчик производителя считывает новый код.

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

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

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

    Устройство, которое нам нужно, является еще одним примером внутрисистемного программатора (ISP), и я буду использовать AVR mkII. mkII был разработан для работы со стандартом распиновки ICSP.

    Чтобы запрограммировать с помощью устройства ISP, подключитесь к разъемам ICSP 2×3 Arduino Uno в нижней части платы, как показано на рисунке выше.

    Обратите внимание на схематический символ контактов разъема ICSP 2×3.

    Штыри заголовка ICSP 2×3 включают контакты SPI SCK (PIN D13 ), MISO (PIN D12 ), и MOSI (PIN D11 ), а также 5V , GND , и СБРОС контактов.

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

    В Arduino IDE я собираюсь сообщить программному обеспечению, что я использую mkII, выбрав Tools -> Programmer -> AVRISP mkII .

    Наконец, нажмите Sketch -> Upload Using Programmer , чтобы использовать устройство ISP для загрузки через SPI.

    Загрузите пример скетча Blink, и встроенный светодиод начнет мигать.

    Однако я вижу проблему. Эскиз мерцания использует задержку в 1 секунду. Однако мой Arduino мигает с задержкой в ​​2 секунды.

    Почему это происходит?

    Настройки предохранителей

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

    Какой секретный осциллятор? На печатной плате уже есть генератор на 16 МГц, подключенный к чипу, но он есть и внутри самого чипа.

    По умолчанию все новые чипы ATmega328p будут использовать внутренний (внутри чипа) генератор 8 МГц для запуска кода. Мой новый чип использует эти внутренние часы по умолчанию.

    Однако разработчики Arduino Uno разместили на печатной плате внешний (вне чипа) генератор 16 МГц.Это связано с тем, что внешние осцилляторы имеют тенденцию быть более точными, а более высокая скорость всегда хороша.

    Когда Arduino IDE компилировала код для платы «Arduino Uno», предполагалось, что задержка (1000) будет использовать часы с частотой 16 МГц для отсчета времени. Но вместо этого часы с частотой 8 МГц в два раза медленнее, поэтому мы видим 2-секундные мигания.

    Как это исправить?

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

    Одной из настроек фьюза ATmega328p является скорость и источник часов . Таким образом чип узнает, какую скорость и тип генератора он должен использовать.

    Чтобы изменить настройки предохранителей (например, тактовую частоту) на соответствующие им значения Arduino Uno (внешние часы 16 МГц), совершенно новому ATmega328p необходимо передать HEX-файл с новыми настройками внутри.

    Но как отправить HEX-файл, содержащий правильные настройки фьюзов?

    Мы делаем это при «прожиге» загрузчика Arduino (см. следующий раздел)…

    Примечание : Плата «Arduino Uno» не имеет параметров для настройки параметров предохранителей в Arduino IDE. Если вы хотите иметь больший контроль над настройками фьюзов на ATmega328p , то я рекомендую использовать это ядро ​​Arduino.

    Запись загрузчика

    Настройки фьюзов записываются во время процесса «Записать загрузчик».

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

    Если этот пользовательский загрузчик будет сохранен в памяти, а затем запущен, он будет считывать код через контакты UART (Tx/Rx) и сохранять его в памяти.

    Это хорошо для нас, потому что тогда мы можем загружать код через USB-разъем платы Arduino Uno (благодаря встроенному адаптеру USB-UART).

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

    Если Arduino Uno питается через USB, AVR mkII должен быть подключен к разъему ICSP на Arduno Uno.

    Затем следуйте инструкциям на картинке выше, чтобы «записать» загрузчик для Arduino Uno.

    После завершения загрузки загрузчика через SPI встроенный ATmega328p теперь сможет считывать новые скетчи через UART (и, следовательно, через встроенный USB-разъем).

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

    Примечание : запись скетча через SPI сотрет пользовательский загрузчик UART из памяти. Преимущество этого заключается в том, что ваш скетч Arduino начинает работать раньше после сброса (или включения питания), но это также означает, что вы не можете загружать код через UART.

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

    Ардуино как интернет-провайдер

    Если вы прочтете все это, то, возможно, подумаете: «Так что, мне нужно купить один из этих программаторов SPI mkII?»

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

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

    Примечание : новый чип ATmega328p должен быть на плате target . Вот что получит новый загрузчик.

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

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

    Обратите внимание, что у программатора Arduino есть контакт D10 , подключенный к контакту RESET цели . Это делается для того, чтобы плата программатора могла запускать загрузчик производителя (SPI) целевой платы для запуска.

    И теперь, прожиг загрузчика второй Arduino можно сделать в 4 шага:

    1. Загрузите пример скетча «ArduinoISP» на плату программатора
    2. Добавьте конденсатор 10 мкФ между программатором платы RESET и GND контактами
    3. Установите «Программист» Arduino IDE на «Arduino as ISP»
    4. Нажмите «Записать загрузчик» в меню «Инструменты»

    Ниже приведены изображения, показывающие некоторые детали для каждого шага.

    Шаг 1

    Первым шагом является превращение программатора Arduino Uno в системный программатор (ISP). Это делается путем простого добавления некоторого кода, который ведет себя как обычный интернет-провайдер.

    Как и на картинке выше, вы найдете скетч примера ArduinoISP, спрятанный в папке примеров.

    Загрузите этот скетч-пример в программатор , как обычно, и убедитесь, что в качестве цели выбрано «Arduino Uno».

    Шаг 2

    После загрузки примера скетча ArduinoISP добавьте 10-мкФ колпачок между контактами RESET и GND на программаторе .

    Этот конденсатор предотвращает сброс программатора .

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

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

    Этап 3

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

    Есть много программаторов (ISP), которых вы можете выбрать в меню Tools -> Programmer .Там вы найдете Arduino как ISP .

    Примечание : Не путайте с «ArduinoISP», это совершенно другое. Я знаю, это сбивает с толку, но вы хотите выбрать Arduino в качестве ISP .

    Шаг 4

    Наконец, я могу перейти к Tools -> Burn Bootloader .

    Перед нажатием мне нужно убедиться, что в меню «Платы» выбран правильный тип платы target .Для меня это «Arduino Uno», потому что именно на него я записываю загрузчик.

    Вот и все! Теперь цель Arduino (с совершенно новым чипом) имеет правильный загрузчик, правильные настройки предохранителей и может получать код через UART (точно так же, как обычный Arduino Uno).

    На изображении ниже показано краткое изложение того, что описано в этом руководстве.

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

    Что делать, если я хочу запрограммировать макет ATmega328p из предыдущего руководства?

    Я могу использовать метод «Arduino как ISP», как и раньше.Тем не менее, плата target больше не будет другой печатной платой Arduino Uno, а вместо этого будет моей макетной платой ATmega328p .

    Нам необходимо подключить контакты SPI SCK (пин D13 ), MISO (пин D12 ), и MOSI (пин D11 ), а так же 3012 13,1ND 13V . СБРОС контактов, как на изображениях выше.

    Однако это не так сложно, потому что мы используем необработанный пакет.

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

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

    Три контакта SPI находятся в нижнем левом углу корпуса, на физических контактах 19 , 18 и 17 . Я могу подключить их к контактам D13 , D12 и D11 платы программатора .

    RESET на упаковке находится на физическом выводе 1 в верхнем левом углу упаковки.Я могу подключить это к контакту D10 платы программатора .

    Смотрите проводку на картинке ниже.

    С помощью этой проводки я могу записать загрузчик на микроконтроллер target на моей макетной плате (удивительно!). Это установит настройки предохранителя (поэтому он использует внешний генератор) и сохранит загрузчик UART в своей памяти.

    Отлично, мой макетный микроконтроллер загрузился!

    Теперь у меня есть два варианта. Я могу продолжать загружать свой код через SPI, используя мою плату программатора . Или я могу использовать загрузчик Arduino, который теперь сохранен на чипе, для загрузки через UART (используя какой-либо адаптер UART-to-USB).

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

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

    Далее мне нужно найти контакты UART (Tx/Rx) на корпусе микроконтроллера. Глядя на изображение выводов сверху, я вижу, что они находятся на физических контактах 2 (Rx) и 3 (Tx), чуть ниже контакта RESET .

    Я собираюсь подключить туда две перемычки: зеленый для Rx и желтый провод для Tx.

    Эти провода нужно будет подключить к адаптеру UART-to-USB. Они бывают разных форм и типов, но чаще всего имеют 6 штырей подряд.

    Я подключу зеленый провод (Rx) к контакту Tx адаптера, а затем подключу желтый провод (Tx) к контакту Rx адаптера.

    Затем мне, конечно, нужно будет подключить контакт GND адаптера к шине заземления моего макета.

    Наконец, нам нужно сделать еще одно соединение, и оно включает контакт RESET .

    Помните, что адаптер UART-to-USB должен иметь возможность перезапустить ATmega328p , чтобы запустить загрузчик Arduino.Это похоже на нажатие кнопки сброса на микроконтроллере, а затем быстрое отпускание, чтобы он перезапустился.

    Эти адаптеры UART-to-USB имеют контакт RTS , который мы можем использовать для переключения контакта сброса. Однако есть проблема.

    Контакт RTS на адаптере не «быстро» освобождает контакт сброса, а вместо этого некоторое время удерживает контакт сброса.Если бы мы подключили его напрямую к контакту сброса, микроконтроллер остался бы в состоянии сброса, и загрузчик никогда не запустился бы.

    Этому есть простое решение: добавить небольшой конденсатор между выводом RTS на адаптере и выводом RESET на макетном микроконтроллере.

    Примечание : интересно узнать, что Arduino Uno уже имеет этот конденсатор на печатной плате.Он подключен между контактом RTS ATmega8u2 и контактом RESET ATmega328p .

    Ниже показано изображение конденсатора на моей макетной плате, который находится между RTS на адаптере и RESET на микросхеме.

    Наконец, мне просто нужно выбрать порт адаптера UART-to-USB в Arduino IDE, и теперь я могу загрузить код обычным способом на макетную плату через последовательный порт.

    Отлично, теперь я могу загружать код в свой макетный микроконтроллер «обычным» способом (через USB, а затем через UART). Теперь я могу легко использовать кнопку «Загрузить» в среде IDE и легко использовать Serial Monitor для отладки.

    Arduino Uno — Последняя документация PlatformIO

    Платформа

    Atmel AVR: 8-разрядные микроконтроллеры Atmel AVR обеспечивают уникальное сочетание производительности, энергоэффективности и гибкости конструкции.Они оптимизированы для ускорения выхода на рынок и легко адаптируются к новым продуктам. Они основаны на наиболее эффективной в отрасли архитектуре для программирования на языке C и ассемблере

    .

    Микроконтроллер

    АТМЕГА328П

    Частота

    16 МГц

    Вспышка

    31,50 КБ

    ОЗУ

    2КБ

    Поставщик

    Ардуино

    Используйте идентификатор uno для опции платы в «platformio.ini» (файл конфигурации проекта):

     [окружение: уно]
    платформа = atmelavr
    доска = уно
     

    Вы можете переопределить настройки Arduino Uno по умолчанию для каждой среды сборки, используя board_*** вариант, где *** — путь к объекту JSON из Манифест платы uno.json. Например, board_build.mcu , board_build.f_cpu и т. д.

     [окружение: уно]
    платформа = atmelavr
    доска = уно
    
    ; поменять микроконтроллер
    board_build.mcu = atmega328p
    
    ; изменить частоту микроконтроллера
    доска_сборка.f_cpu = 16000000L
     

    Отладка — решение «в один клик» для отладки с нулевой конфигурацией.

    Предупреждение

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

    Вы можете переключаться между инструментами отладки и зондами отладки, используя Опция debug_tool в «platformio.ini» (файл конфигурации проекта).

    Arduino Uno имеет встроенный датчик отладки, а IS READY для отладки.Вам не нужно использовать/покупать внешний отладочный зонд.

    Имя

    Описание

    Ардуино

    Платформа на основе Arduino Wiring позволяет писать кроссплатформенное программное обеспечение для управления устройствами, подключенными к широкому спектру плат Arduino, для создания всех видов творческого кода, интерактивных объектов, пространств или физических ощущений

    Симба

    Simba — это операционная система реального времени (RTOS) и среда сборки, предназначенная для упрощения и переносимости встроенного программирования

    Учебник по программированию ATtiny85: Программирование ATTiny85 | Стрела.ком

    Для новичков в области электроники трудно превзойти такие платы Arduino, как Uno и недавно улучшенная линейка Nano. Эти доски интуитивно понятны, доступны и универсальны.

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

     

    Технические характеристики ATtiny85

    ATtiny85 компании Microchip Technology доступен по цене от 1 до 2 долларов США в зависимости от количества и версии, которую вы выберете, например: 20МУ


    См. соответствующий продукт
    См. соответствующий продукт
    См. соответствующий продукт

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

    Если вас беспокоит энергопотребление, микросхема ATtiny85 может похвастаться впечатляющей энергоэффективностью:

    — Функционирует при напряжении питания от 1,8 до 5,5 В для 10 МГц в реализации «V»
    — Версия 20 МГц по-прежнему может работать от 2,7 V-5,5 В, что позволяет использовать широкий спектр вариантов питания
    — Потребляет ток 300 мкА при работе в режиме изменения напряжения на частоте 1 МГц при 1,8 В или 0,1 мкА при выключенном питании

    Давайте углубимся в энергопотребление: довольно небольшой 750 мАч 3,7 В LiPo теоретически может питать такое устройство, когда он активен более 200 дней (без учета потерь при преобразовании энергии и преобразовании напряжения в половину его нормального значения), а в режиме «Питание- down Mode», значение будет в 3000 раз больше, чем тысячелетие.

     

    ATtiny85 Arduino Учебник

    Теперь, когда вы прониклись идеей этого маленького чипа, с чего начать?


    1. Сопряжение с Arduino IDE

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

    1. Установите Arduino IDE

    2. Перейдите на страницу поддержки микроконтроллера Arduino IDE ATtiny GitHub

    .

    3.Следуйте инструкциям, чтобы добавить эту новую функцию

    .

    4. После правильной установки перейдите к Инструменты > Плата в IDE Arduino, и вы увидите пару вариантов, перечисленных в разделе Микроконтроллеры ATtiny .


    2. Запрограммируйте ATtiny85 с помощью Arduino
    .

    Как вы могли заметить, ATtiny85 не имеет порта для программирования, как это делают Arduino Uno или Nano. Вместо этого вам нужно будет использовать программатор в качестве посредника между компьютером и чипом.Один из вариантов — использовать Arduino Uno в качестве внутрисистемного программатора (ISP). Хотя это самый экономичный вариант, если у вас есть неиспользуемый Uno, другой вариант — приобрести специальное устройство программирования. ATtiny85 подключается непосредственно к устройству, которое подключается к USB-порту вашего компьютера.

    Скорее всего, вам потребуется установить правильный драйвер, особенно если вы используете Windows. Установка правильного драйвера «libusb-win32» является последним шагом.

    Разобравшись с драйверами, выполните следующие действия:

    1.Войдите в свою среду разработки Arduino Tools > Board

    .

    2. Выберите опцию под надписью ATtiny25/45/85

    3. В разделе Tools выберите Processor: ATtiny85 и Clock: Internal 1 MHz . Вы можете заметить, что это немного отличается от той, которую вы обычно выполняете при работе с платами Arduino. Скорость 1 МГц может измениться позже, но эта скорость является хорошей отправной точкой для экспериментов

    4.Измените настройку Programmer на USBtinyISP

    .

    5. Когда вы будете готовы к загрузке, подключите ATtiny85 к специальному разъему

    .

    6. Нажмите клавишу со стрелкой, чтобы начать процесс (выбор порта не требуется)

    А что будем загружать?


    3. Светодиод ATtiny85 мигает

    Одним из преимуществ использования специализированного программатора является то, что он оснащен мигающим светодиодом, подключенным к контакту 0. Видимый свет позволяет легко выполнять традиционный для микроконтроллера «привет, мир».Однако, поскольку ATtiny85 не имеет встроенного светодиода, стандартный скетч Arduino Blink не будет работать. Хорошей новостью является то, что изменить его для работы легко:

    1. Загрузите пример мигания в Arduino IDE

    .

    2. Замените LED_BUILTIN на 0 (число)

    .

    3. Нажмите клавишу со стрелкой или Ctrl+U для загрузки, и вы увидите, как она мигает


    4. Расширенное программирование с помощью ATtiny85

    ATiny85 освободился от программатора, радостно моргает 5 светодиодами

    Мигание светодиода — это хорошо, но настоящая прелесть ATtiny85 в том, что вы можете настроить его для работы практически без присмотра.Есть несколько способов настроить это:

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

    Клип для программирования неправильно расположен для ATtiny85-20PU

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

    Другим вариантом является использование зажима для чипа для легкого подключения и удаления. Этот зажим крепится к бокам ATtiny85, но обратите внимание на размер. Нормальное расстояние между макетными платами составляет 2,54 мм, в то время как большинство зажимов на рынке имеют расстояние 1,27 мм.

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

Ваш адрес email не будет опубликован.