Автор: Илья Дубков. Категория: Блог.
Иногда возникают ситуации, когда на Arduino уже не хватает пинов ввода-вывода для подключения всего, что душе угодно, или необходимо сосредоточить некоторое количество кнопок\светодиодов на удалении от контроллера. На помощь приходит микросхема PCF8674 — удаленный 8-битный расширитель портов ввода-вывода для шины i2c. Сегодня мы пристально ее рассмотрим, подключим и закодим. Поехали!
Шина i2c (произносится как «ай-ту-си») — это последовательный интерфейс для связи микросхем друг с другом. Для передачи данных используются две линии: SDA (данные) и SCL (тактирование). На шине всегда присутствует одно ведущее устройство, которое инициирует все акты передачи данных, и некоторое количество ведомых. Эта шина адресная, и каждое ведомое устройство имеет свой адрес. При инициации чтения или записи ведущим устройством каждое ведомое устройство слушает линию данных, и если узнает свой адрес, то начинает передачу, а остальные при этом замолкают.
Не будем сегодня подробно разбираться с принципом работы шины, остановимся на конкретной микросхеме — PCF8574. Распространены микросхемы от двух производителей: Texas Instruments и NXP. Различий между ними я не нашел (кроме цены) 😀
Микросхема PCF8574 имеет:
Пример схемы включения PCF8574 для управления разными подсистемами:
Несколько комментариев по поводу схемы:
Возьмем микросхему в корпусе DIP, поскольку для монтажа на беспаечную макетку использовать такой корпус удобнее всего. Посмотрим распиновку микросхемы. Выводов всего 16, они нумеруются с верхнего левого по кругу. Определить, где верх, помогает «ключ» — специальная выемка в корпусе.
Традиционно для таких микросхем питание и земля — это 16-я и 8-я ноги. Пины ввода-вывода по четыре слева и справа. Адресные пины — это 1, 2, 3. Пины 14 и 15 — это шина i2c, а 13-й пин — прерывание.
Давайте начнем сборку нашей суперсхемы с четырьмя входами и четырьмя выходами на макетке. Возьмем Arduino nano и расширитель портов PCF8574, который воткнем в макетку.
Подключим питание с Arduino на макетку на длинные рельсы, чтобы было удобно выполнять подключение всего остального. Подсоединим 16-й пин микросхемы на питание, 8-й пин на землю:
Теперь подключим линии шины i2c. Для этого соединим пины 14 и 15 через рещисторы 10 кОм с питанием, чтобы обеспечить подтяжку, а после этого прицепим их напрямую к пинам A4 и A5 на Arduino:
Теперь подсоединим четыре светодиода длинными ножками через резисторы к пинам 9, 10, 11, 12 — это будут наши выходы. Короткие ножки светодиодов соединим с землей. Пины 4, 5, 6, 7 соединим с питанием через резисторы 10 кОм, обеспечив подтяжку вверх, после чего подключим к ним кнопки одним концом — это будут наши входы. Кнопки другим концом посадим на землю:
Наша суперсхема готова! Я спаял ее на маленькой макетке, чтобы выглядело аккуратно:
Время программировать!
Для работы с микросхемой можно использовать готовую библиотеку, заботливо написанную хорошим человеком. Очень удачная, на мой взгляд, вот эта библиотека. Благодаря этой библиотеке «расширенные» пины можно читать и писать точно также, как цифровые пины Arduino. Скачаем ее и установим.
Для продолжения работы нам все таки придется узнать, какой адрес все-таки имеет наша микросхема. Микросхема может маркирована как PCF8574, а может быть как PCF8574A, это влияет на адрес. Взглянем на таблицу:
Пока ничего не понятно. Чтобы разобраться, сначала определимся, что у нас микросхема с буквой А, а потом рукой напишем на месте L нули, на месте H — единицы, а на месте A2, A1 и A0 напишем те значения, которые мы сами установили (все нули):
Получилось двоичное число 0111000 или шестнадцатеричное 38. При написании кода принято двоичные числа начинать с префикса 0b, а шестнадцатеричные — с 0x. Соответственно, адрес нашей схемы будет записываться как 0b0111000 или 0x38.
Начнем с подключения библиотеки. Напишем инклуд для самой библиотеки и еще для библиотеки Wire, над которой она надстроена:
#include <Wire.h> #include "PCF8574.h"
Теперь создадим объект класса PCF8574, через который мы будем взаимодействовать с нашей микросхемой:
Если мы будем подключать несколько одинаковых микросхем, мы просто создадим несколько объектов с разными именами, так программа будет понимать, с какой именно мы собираемся общаться.
Внутри setup() инициализируем микросхему, задав ее адрес:
Настроим «расширенные» пины 0, 1, 2, 3 как входы с подтяжкой:
expander.pinMode(0,INPUT_PULLUP); expander.pinMode(1,INPUT_PULLUP); expander.pinMode(2,INPUT_PULLUP); expander.pinMode(3,INPUT_PULLUP);
Теперь настроим пины 4, 5, 6, 7 как выходы:
expander.pinMode(4,OUTPUT); expander.pinMode(5,OUTPUT); expander.pinMode(6,OUTPUT); expander.pinMode(7,OUTPUT);
Функции pinMode() совпадают с обычными арудиновскими. Единственное, что они вызываются как методы объекта expander. То же самое и с функциями digitalRead() и digitalWrite() — будем их использовать как обычно.
Внутри loop() напишем поочередный опрос кнопок и зажигание светодиодов. Если кнопка не нажата (читается 1), то пишем в соответствующий светодиод LOW, в противном случае пишем HIGH.
for (int i=0; i<4; i++){ if (expander.digitalRead(i)>0) expander.digitalWrite(i+4, LOW); else expander.digitalWrite(i+4, HIGH); }
В итоге должен получиться вот такой код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <Wire.h> #include "PCF8574.h" PCF8574 expander; void setup(){ expander.begin(0x38); expander.pinMode(0,INPUT_PULLUP); expander.pinMode(1,INPUT_PULLUP); expander.pinMode(2,INPUT_PULLUP); expander.pinMode(3,INPUT_PULLUP); expander.pinMode(4,OUTPUT); expander.pinMode(5,OUTPUT); expander.pinMode(6,OUTPUT); expander.pinMode(7,OUTPUT); } void loop(){ for (int i=0; i<4; i++){ if (expander.digitalRead(i)>0) expander.digitalWrite(i+4, LOW); else expander.digitalWrite(i+4, HIGH); } }
Вот так весело и просто у нас получился такой удаленный «пульт», который мы можем запрограммировать как хотим:
По нашему опыту, даже при удалении расширителя порта на три метра от Arduino, все прекрасно работает, при условии, что не забыли поставить подтягивающие резисторы на сигнальные линии шины i2c, и провод экранирован.
Метки: программирование, Arduino, код, i2c, Texas Instruments, PCF8574
arduinonsk.ru
Но настали черные дни, когда мне перестало хватать выходных сигналов Arduino Nano, когда я занимался созданием устройства для тестирования шаговых двигателей. (TODO: вставить ссылку на статью о тестере ШД, когда будет готова). Моё устройство для тестирования ШД в результате вышло довольно комплексным — двухстрочный дисплей 1602 с системой меню, управляемое полнофункциональной клавиатурой 4×4, 3 цифровых разряда для установки величины микрошага ШД, сигналы Step и Dir для шагового двигателя, и тп. Казалось бы, самое время мигрировать на другую версию Arduino. Но моя природная лень воспротивилась этой миграции. И ленивая голова стала искать решение.
Было принято решение искать решение на базе уже того, что есть. Перебирая платки и детальки из наборов, я заметил 16ти-пинового черного «жука». Сначала в одном наборе, потом в другом. Решил поинтересоваться, что же это за деталь, и зачем её добавляют в наборы. Зачем её кладут в кит-наборы, я не понял, но саму микросхему нашел на сайте NXP.
Оказалось, что это довольно интересная микросхема — сдвиговый регистр с последовательным входом и параллельным выходом.
Условное обозначение микросхемы 74НС595 (из даташита)
Контакт | Наименование | Описание и подключение |
---|---|---|
10 | ~MR | Master Reset — сброс, активный уровень низкий. В идеальном случае неплохо бы сделать схему сброса, которая сначала подает низкий уровень на этот вход, а затем переводит его в единичное состояние. Но можно не возиться, и подключить его на +5В. В этом случае на выходе до первой записи будут случайные значения |
13 | ~OE | Output Enable — разрешение выхода, активный уровень низкий. При подаче 0 на выходы подается содержимое регистра, при подаче 1 — выходы отключаются, переводятся в Z-состояние, что позволяет использовать одну шину попеременно разным устройствам. Подключаем на землю, если не нужно управлять состоянием выходов |
14 | DS | Serial Data In — последовательный вход. На этот вход следует подавать значение входного сигнала до подачи тактового сигнала сдвига SHCP |
11 | SHCP | Shift Register Input clock — тактовый вход сдвигового регистра. Для вдвигания бита в регистр следует подать переход с 0 на 1. Когда возвращать в 0 — на усмотрение. Можно — сразу же, можно — непосредственно перед вдвиганием. В первом случае можно считать, что переключение происходит по фронту прямого сигнала, во втором — по спаду инверсного. См. также ниже замечания по быстродействию. Также по приходу этого сигнала изменяется значение последовательного выхода Q7/S |
12 | STCP | Storage Register Clock Input — тактовый вход регистра защелки. По фронту данного импульса происходит перенос значения со сдвигового регистра на параллельные выходы Q0-Q7 |
9 | Q7S | Serial Data Output — последовательный выход. На него выводится значение старшего разряда сдвигового регистра. Данный выход может использоваться для масштабирования сдвигового регистра до 16ти-разрядной, 24х-разрядной и т.д. схемы |
15, 1-7 | Q0, Q1-7 | Выходы регистра-защелки. Сигнал на них переносится с внутреннего сдвигового регистра по приходу сигнала STCP |
8 | GND | Питание — общий провод |
16 | VCC | Питание — + |
Что более важно, так это блокировочные конденсаторы. Без них схема может работать не так, как задумано, и более того, непредсказуемо. Теоретически, в цепи питания каждого корпуса нужно ставить 0.1мкФ конденсатор. Это значение ёмкости я вычислил как среднее по интернету. Моя схема вполне заработала и без него. Чтобы уточнить, залез было в библию схемотехника, чтобы уточнить — Хилл и Хоровиц, «Искусство схемотехники» — это почти как «Искусство Программирования» Дональда Кнутта, но только для железячников (к слову, Хилл и Хоровиц гораздо ближе к народу, Кнутт через-чур умничает) — но там блокировочными конденсаторами похоже называют развязывающие по входам конденсаторы. Жаль, хорошая книга, но очень отстала уже от жизни. У меня второе или третье русское издание конца 90ых или начала 0ых годов, оригинал скорее всего ещё лет на 10 старше. На третьем, розовом томе, обнаружил наклейку — «14руб» — как же дешево тогда всё было, по современным меркам. А прошло-то всего 15 лет или чуть больше. Аж ностальгия замучала.
Быстродействие Arduino Nano и библиотеки Arduino в плане скорости переключения выходов и обработки входов по моим наблюдениям где-то посередине от единиц килогерц до десятков килогерц. Так что, на мой взгляд, при написании кода для управления сдвиговым регистром 74HC595 нет нужды озадачиваться какими-либо задержками при установке управляющих сигналов.
Другое дело, что для 8ми разрядного последовательного расширителя следует делить максимальную доступную на Ардуино частоту переключения выходов — установили DS, установили SHCP в 1, сбросили SHCP (в 0) — 8 раз, и установка/сброс STCP. Итого, на вскидку, 3*8 + 2 = 26 операций digitalWrite. Итого выходит примерно в 25 раз медленнее, чем может сама Ардуинка.
При масштабировании до 16ти, 24х или 32х выходов замедление будет соответственно примерно 3*16 + 2 = 50, 3*24 + 2 = 74 и 3*32 + 2 = 98 раз.
Для управления чем-то действительно быстрым, очевидно, такой расширитель на сдвиговом регистре 74HC595 не подходит, но, в некоторых применениях, для задания редко меняющихся статичных сигналов вполне подходит. Так, например, я использовал такой расширитель для задания 3х-разрядного режима микрошага для установки режима микрошага для драйвера ШД DRV8825 в тестере для шаговых двигателей. К слову, мне это пока не особо пригодилось — шаговики из матричных принтеров ужасно работают в микрошаговом режиме, по крайней мере, под управлением драйвера DRV8825 — так, например, в режиме микрошага 1/2 половина шага какая-то вялая и не уверенная, только вторая половина бодрая и мощная. Поэтому при использовании микрошага при малейшем усилии на ось ШД он первые пол-шаги начинал пропускать. Остальные режимы микрошага я как-то после этого и не исследовал на имеющихся принтерных ШД.
Если не управлять прямо сигналами регистра 74HC595 — ~MR, ~OE с Ардуино, то достаточно только трех выходов Ардуино для управления сигналами DS, SHCP и STCP сдвигового регистра, чтобы при помощи микросхемы 74HC595 превратить их в 8 или 16 или больше выходных сигналов.
Для мультиплексирования нескольких расширителей на базе 74HC595 можно пойти двумя путями: 1) для каждого расширителя сигнала выделить отдельный latch сигнал — т.е. все регистры на шине параллельно сдвигают поступающие данные, и, соответственно, сдвигают значения на выходах внутреннего сдвигового регистра, но только один передает значение из внутреннего сдвигового регистра на выходы микросхемы; 2) сигналы сдвига передаются только на один из расширителей, а перенос значений сигналов на выход происходит одновременно для всех модулей расширения.
Я больше склонен использовать вариант, когда во внутренних сдвиговых регистрах может находится всё, что угодно (вариант 1), а на выходе зафиксировано какое-то из предыдущих значений, и вот почему: при переносе значений из внутреннего сдвигового регистра на выход могут происходить неконтролируемые переходы из 0 в 1 и обратно, какой-то дребезг сигнала, даже если исходное значение во внутреннем регистре и на выходе одно и то же. И, на мой взгляд, операцию переноса состояния внутреннего регистра сдвига на выходы 74HC595 следует использовать как можно реже.
trampampamparam.livejournal.com
Каждый порт контроллируется тремя регистрами, каждый из которых отвечает за определенное состояние. Регистр DDR определяет, какой вывод входной, а какой выходной (INPUT OUTPUT). Регистр PORT устанавливает вывод в соответствующее состояние HIGH или LOW, и регистр PIN читает состояние входного выводаr.
Регистры DDR и PORT могут быть как прочитаны, так и записаны. Регистр PIN отвечает за состояние входынх портов, поэтому может быть лишь прочитан.
PORTD отвечает за выводы 0 — 7
DDRD — Регистр направления порта D -чтение/запись
PORTD — Регистр данных порта D — чтение/запись
PIND — Регистр входных данных порта D — чтение/запись
PORTB отвечает за выводы 8 — 13 Два старших бита (6 и 7), отвечающие за выводы кварца незадействованы.
DDRB — Регистр направления порта B -чтение/запись
PORTB — Регистр данных порта B — чтение/запись
PINB — Регистр входных данных порта B — чтение/запись
PORTC отвечает за аналоговые выводы 0 — 5. Выводы 6 & 7 доступны только на Arduino Mini
DDRC — Регистр направления порта C -чтение/запись
PORTC — Регистр данных порта C — чтение/запись
PINC — Регистр входных данных порта C — чтение/запись
Каждый бит в этих регистрах отвечает за соответствующий вывод, т.е. младший бит у DDRB, PORTB, и PINB ссылается на вывод PB0 (цифровой вывод 8). Для полного соответствия регистровых битов выводам МК посмотрите назначение выводов вашего МК.
Примеры:
Следует помнить, что выводы 0 и 1 задействованы последовательным портом и работа с ними возможна только в том случае, если отладки и последовательный порт не требуются.
DDRD это регистр направления выводов для порта D (Arduino цифровые выводы 0-7). Биты этого регистра контролируют, как вывод регистра PORTD будет сконфигурирован — input или output, например:
DDRD = B11111110; // устанавливает выводы от 1 до 7 как выходные, вывод 0 — входной
//Ознакомьтесь с битовыми операциями
PORTB это регистр для установки выходных портов.;
PORTD = B10101000; // устанавливает цифровые выводы 7,5,3 HIGH
Вы сможете видеть только 5В на выводе всегда, не вжно, использовали ли вы регистр DDRD или функцию pinMode ().
PINB это регистр состояния входных выводов. Он может прочесть одновременно прочесть состояние всех выводов порта.
Конечно, с одной стороны данный мометод работы с портами имеет ряд мутных недостатков:
Программный код становится более сложным для поиска ошибок и менее понятным для остальных людей. Эти операции выполняются за считанные такты микропроцессора, однако вам может потребоваться несколько часов, чтобы найти, что рабоотает неправильно и исправить это!.
Код становится менее переносимым — сказывается привязка к конкретному микроконтроллеру. Используя функции digitalRead () и digitalWrite (), очень просто перенести код на другой микроконтроллер. Одним из способов решения могут стать макроопределения #ifdef, с помощью которых возможно написание универсального кода, который, в зависимости от МК, будет сам решать — как ему компилироваться.
При прямом доступе к портам можно совершить ошибки. Например,строка DDRD = B11111110; оставит вывод 0 как входной. Мы помним, что на нем у нас висит приемная линия последовательного порта. Вы представляете что может случиться если мы возьмем и сделаем его как выходной? Мы нарушим работу нашего порта.
Разумеется, чтобы работать с прямым доступом к портам надо разбираться, как это работает. Ведь прямой доступ имеет определенные преимущества:
Вы можете изменить состояние сразу всех портов одновременно, не прибегая ко всяким изощренным циклам и проч. Если вы посмотрите на исходники Arduino в lib/targets/arduino/wiring.c, вы увидите, что digitalRead () и digitalWrite () представляют собой кучу строк кода, которые буду скомпилированы в несколько команд процессора. Каждая команда процессора требует один такт тактового генератора 16Мгц. Прямой доступ в портам позволяет выполнить те же операии за много меньшее количество тактов, обеспечивая высокое быстродействие.
Иногда требуется одновременно изменить состояние каких-то выводов и любая задержка, обеспечиваемая функцией digitalWrite () может привести к каким-либо проблемам. Используя регистры прямого доступа вы избегаете этих проблем.
Если вас стесняют рамки имеющейся памяти программ, то можно использовать трюки, уменьшающие итоговый размер программы. Описание цикла, изменяющего состояние портов требует большого количества строк кода. Иногда подобные вещи критичны, и именно из-за них зависит — влезет программа в МК или нет.
Манипуляции с портами, Описание языка Arduino
06.04.2011, 18425 просмотров.
arduino.net.ua
Самовывозом можно забрать заказ после подтверждения менеджером. Пожалуйста, оформляйте заказы заранее.
|
arduino.ua
Самовывозом можно забрать заказ после подтверждения менеджером. Пожалуйста, оформляйте заказы заранее.
|
arduino.ua
В этой инструкции, для примера, рассмотрим начало работы в операционной системе Windows. Для операционных систем Microsoft (Windows 2000/Vista) различия незначительны, они в основном относятся к названиям вкладок в Диспетчере устройств. В прочих операционных средах, таких как Linux, FreeBSD, Mac OS X и т.д, порядок настройки значительно отличается. При необходимости организовать работу с этим программным обеспечением, рекомендуем искать ответы на вопросы на основном сайте разработчика //www.arduino.cc .
В качестве подключаемой платформы возьмём Arduino Uno. Разница с другими платами у неё минимальна.
Кабель для связи с ПК
Для передачи данных с персонального компьютера на Arduino, необходимо подыскать соответствующий кабель. С отдельными платами кабель не поставляется, только есть в стартовом наборе Arduino для практикующего конструктора-программиста.
Arduino Uno, Arduino Mega 2560 соединяются кабелем со штекерами USB тип А. Такой кабель часто применяется для подключения принтера или сканера.
Arduino Leonardo, Arduino Due для подключения имеют гнездо micro USB тип В.
Arduino Nano, Freeduino Nano подключаются через гнездо mini USB тип B.
Для подключения Freeduino MaxSerial потребуется кабель последовательного порта 9M-9F.
Установка Arduino IDE
Arduino IDE — интегрированная среда разработки софта для Arduino устройств, устанавливаемая на компьютер.
В зависимости от модели платы важно правильно выбрать подходящую версию Arduino IDE:
Частичная несовместимость ПО стала следствием разногласий между отцами-основателями Arduino итальянцами Массимо Банзи и Джанлука Мартино, которые не смогли договориться о дальнейшем курсе развития компании. Завод, на котором разрабатывают и производят оригинальные платформы Arduino, под управлением Джанлука Мартино откололся от головной компании Arduino LLC и стал самостоятельной компанией Arduino SRL (ранее Smart Projects Srl).
Запуск Arduino IDE
После запуска успешно установленной Arduino IDE, должна открыться графическая консоль, как на картинке внизу.
Возникла неполадка: Arduino IDE не запускается.
Способ устранения.
Скорее всего, на компьютере установлена неподходящая виртуальная среда JRE (Java Runtime Environment), необходимая для запуска графических приложений.
Возвратитесь к переустанавке Arduino IDE: на этот раз инсталлятор развернет работу по настройке JRE.
Подключение плат Arduino к компьютеру
После успешного запуска среды разработки Arduino IDE пришло время связать какую-то платформу Arduino с компьютером. Как вы уже знаете, подключение плат Arduino к ПК выполняется через USB-кабель.
Соединив консоль Arduino с ПК, на ней загорится один светодиод «ON», и начнёт мигать другой «L». Это означает, что через кабель подано питание и микроконтроллер начал выполнять предустановленную на заводе программу Blink (мигание).
Остается только узнать, какой номер COM-порта присвоил компьютер нашей плате Arduino, что важно для корректной работы программного обеспечения Arduino IDE с новым устройством.
Номер COM-порта можно узнать в «Диспетчере устройств», вкладка «Порты (COM и LPT)».
На системах Windows скорее всего нашей Arduino Uno с последовательным интерфейсом присвоится один из портов COM1 или COM2. Для Ардуино с USB-контроллером портом ввода будет COM4, COM5, COM6 или выше.
На системах Linux последовательным портом будет USB0 либо USB1.
Высветилось новое устройство Arduino в «Диспетчере устройств» — значит, операционная система распознала нашу плату, нашла для неё подходящий USB-драйвер и присвоила номер её интерфейсу. При совместном подключении ещё одной платы Arduino, ей присвоиться уже другой номер порта.
Возникла неполадка: при подключении платы Arduino к компьютеру, в Диспетчере устройств она не появляется.
Способы устранения:
Настройка Arduino IDE
В открытой Arduino IDE, заходим: Инструменты > Порт > выбираем номер порта COM — сообщаем программе номер порта, к которому подключена микропроцессорная платформа Arduino.
Чтобы у прошивающей программы Arduino IDE не осталось никаких сомнений, с чем ей предстоит работать, указываем тип нашей подключенной платы. Для этого переходим по меню: Инструменты > Плата > выбираем тип своей платы Arduino.
Возникла неполадка: во вкладке Порт нет ни одного COM-порта.
Способ устранения.
Очевидно, нарушено соединение устройства Arduino с компьютером. Верните устойчивое соединение с ПК.
Или нет драйвера. Скачать можно в конце статьи.
Как проверить подключение устройства Arduino
Все числовые данные, поступающее через COM-порт, выводятся в Монитор порта во всё той же удобной графической среде Arduino IDE. Следовательно, нажав соответствующую иконку «Монитор порта» в верхнем правом углу консоли или найдя соответствующий пункт в меню Сервис, по изменяющимся числам в открывшимся окошке можно убедиться, что через USB-кабель передаются данные, а значит, и плата Arduino надежно подключена.
Обратите внимание, что в нижней части окошка Монитора порта выводится информация о скорости работы с COM-портом «19200 baud» (19200 бит/сек). Такая скорость задана по умолчанию в предустановленном скетче на плате Arduino. В этом скетче есть строка Serial.begin(19200), в которой можно задать любую требуемую скорость передачи, но это возможно только при работе через USB-кабель. Ежели передача данных идет через радиоканал Bluetooth, то скорость обмена с COM-портом должна быть задана заранее, точно такой же, какую мы выбираем при отладке Bluetooth-модуля.
Возникла неполадка: невероятно тормозит Arduino IDE при навигации по меню.
Способ устранения.
В Диспетчере устройств, во вкладке Bluetooth Serial отключите Bluetooth-соединение с мобильным телефоном. Все внешние подключения через Bluetooth значительно пожирают объем виртуальной памяти.
Загрузка первого скетча
Соединение установлено, среда разработки настроена — теперь в ваших руках отлаженный инструмент для прошивки любых микроконтроллеров AVR серии: ATtiny, ATmega, AT90S, AT90CAN, AT90PWM.
В среде разработки Arduino IDE есть много готовых образцов для различных задач, но для проверки отзывчивости платы на перепрошивку достаточно внести небольшие изменения в предустановленную программу Blink (мигание светодиода «L» на плате).
Достаточно в открытом эскизе Blink внести свои изменения в строчке delay(1000), нажать «Вгрузить» и засечь изменения в работе платы Arduino.
Установив delay(500) — светодиод «L» будет мигать в два раза чаще, с задержкой в пол секунды.
Задав delay(100) — светодиод «L» будет загораться и гаснуть в 10 раз быстрее, чем по заводской настройке, то есть каждые 100 миллисекунд.
Возникла неполадка: при загрузке скетча всплыла ошибка вида «not in sync».
Способ устранения.
Значит, подключенная платформа Arduino не была распознана операционной системой. Вернитесь к пунктам установки правильного номера COM-порта и модели платы в меню Инструменты Arduino IDE.
Да и напоследок, если вы купили плату Arduino на каком-нибудь онлайн китайском рынке, то очень часто возникают проблемы при подключении платы – просто она не определяется. Чтобы решить эту проблему умельцами был создан драйвер . СКАЧАТЬ
Автор: Виталий Петрович.
volt-index.ru
Arduino Uno — флагманская платформа для разработки на базе микроконтроллера ATmega328P. На Arduino Uno предусмотрено всё необходимое для удобной работы с микроконтроллером: 14 цифровых входов/выходов (6 из них могут использоваться в качестве ШИМ-выходов), 6 аналоговых входов, кварцевый резонатор на 16 МГц, разъём USB, разъём питания, разъём для внутрисхемного программирования (ICSP) и кнопка сброса.
Для работы с платой Arduino Uno в операционной системе Windows скачайте и установите на компьютер интегрированную среду разработки Arduino — Arduino IDE.
Сердцем платформы Arduino Uno является 8-битный микроконтроллер семейства AVR — ATmega328P.
Микроконтроллер ATmega16U2 обеспечивает связь микроконтроллера ATmega328P с USB-портом компьютера. При подключении к ПК Arduino Uno определяется как виртуальный COM-порт. Прошивка микросхемы 16U2 использует стандартные драйвера USB-COM, поэтому установка внешних драйверов не требуется.
VIN: Напряжение от внешнего источника питания (не связано с 5 В от USB или другим стабилизированным напряжением). Через этот вывод можно как подавать внешнее питание, так и потреблять ток, если к устройству подключён внешний адаптер.
5V: На вывод поступает напряжение 5 В от стабилизатора платы. Данный стабилизатор обеспечивает питание микроконтроллера ATmega328. Запитывать устройство через вывод 5V
не рекомендуется — в этом случае не используется стабилизатор напряжения, что может привести к выходу платы из строя.
3.3V: 3,3 В от стабилизатора платы. Максимальный ток вывода — 50 мА.
GND: Выводы земли.
IOREF: Вывод предоставляет платам расширения информацию о рабочем напряжении микроконтроллера. В зависимости от напряжения, плата расширения может переключиться на соответствующий источник питания либо задействовать преобразователи уровней, что позволит ей работать как с 5 В, так и с 3,3 В устройствами.
Цифровые входы/выходы: пины 0
–13
Логический уровень единицы — 5 В, нуля — 0 В. Максимальный ток выхода — 40 мА. К контактам подключены подтягивающие резисторы, которые по умолчанию выключены, но могут быть включены программно.
ШИМ: пины 3
,5
,6
,9
,10
и 11
Позволяют выводить 8-битные аналоговые значения в виде ШИМ-сигнала.
АЦП: пины A0
–A5
6 аналоговых входов, каждый из которых может представить аналоговое напряжение в виде 10-битного числа (1024 значений). Разрядность АЦП — 10 бит.
TWI/I²C: пины SDA
и SCL
Для общения с периферией по синхронному протоколу, через 2 провода. Для работы — используйте библиотеку Wire
.
SPI: пины 10(SS)
, 11(MOSI)
, 12(MISO)
, 13(SCK)
.
Через эти пины осуществляется связь по интерфейсу SPI. Для работы — используйте библиотеку SPI
.
UART: пины 0(RX)
и 1(TX)
Эти выводы соединены с соответствующими выводами микроконтроллера ATmega16U2, выполняющей роль преобразователя USB-UART. Используется для коммуникации платы Arduino с компьютером или другими устройствами через класс Serial
.
Имя светодиода | Назначение |
---|---|
RX и TX | Мигают при обмене данными между Arduino Uno и ПК. |
L | Светодиод вывода 13 . При отправке значения HIGH светодиод включается, при отправке LOW – выключается. |
ON | Индикатор питания на плате. |
Разъём USB Type-B предназначен для прошивки платформы Arduino Uno с помощью компьютера.
Разъём для подключения внешнего питания от 7 В до 12 В.
ICSP-разъём предназначен для внутрисхемного программирования микроконтроллера ATmega328P.
С использованием библиотеки SPI
данные выводы могут осуществлять связь с платами расширения по интерфейсу SPI. Линии SPI выведены на 6-контактный разъём, а также продублированы на цифровых пинах 10(SS)
, 11(MOSI)
, 12(MISO)
и 13(SCK)
.
ICSP-разъём предназначен для внутрисхемного программирования микроконтроллера ATmega16U2.
Микроконтроллер: ATmega328
Тактовая частота: 16 МГц
Напряжение логических уровней: 5 В
Входное напряжение питания: 7–12 В
Портов ввода-вывода общего назначения: 20
Максимальный ток с пина ввода-вывода: 40 мА
Максимальный выходной ток пина 3.3V: 50 мА
Максимальный выходной ток пина 5V: 800 мА
Портов с поддержкой ШИМ: 6
Портов, подключённых к АЦП: 6
Разрядность АЦП: 10 бит
Flash-память: 32 КБ
EEPROM-память: 1 КБ
Оперативная память: 2 КБ
Габариты: 69×53 мм
wiki.amperka.ru