Среда, 24.04.2024, 09:34
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Меню сайта
Реклама Google
Форма входа
Категории раздела
Это нужно знать! [17]
Изучаем AVR [30]
Программаторы [12]
Необходимое ПО [8]
Готовые устройства [73]
Справочная [38]
Инструмент [0]
Технология [8]
Литература [0]
Arduino скетчи [18]
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Микроконтроллеры - это просто!
Главная » Статьи » Arduino скетчи

Порты ввода-вывода Arduino

Различные устройства и приборы подключаются к микроконтроллеру через порты ввода-вывода. Микроконтроллер, являющийся ядром Arduino, - это 8-битный микроконтроллер, и поэтому его порты ввода-вывода также являются 8-битными. Это общий принцип, и хотя теоретически порт ввода-вывода 8-битного микроконтроллера может быть и 16-ти, и 32-х, и 64-битным, но практического смысла оснащать 8-битный микроконтроллер не 8-битным портом ввода-вывода нет, поскольку для чтения или записи данных в такой порт пришлось бы использовать несколько команд ассемблера, то есть операция обмена данными с таким портом производилась бы только за несколько тактов.

Порт ввода-вывода обычного назначения (GPIO - General Purpose Input/Output) представляет собой несколько выводов (пинов) микроконтроллера по числу бит, то есть в данном случае это 8 выводов. Если посмотреть на плату Arduino, то с одной стороны находятся две группы по 8 контактов, обозначенные как цифровые (Digital), а с другой стороны две группы по 6 контактов, одна из которых - это контакты напряжений питания и пин сброса (Reset), а вторая - это 6 контактов, обозначенных как входы для аналоговых сигналов (Analog In).

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

Как правило высокому уровню напряжения соответствуют напряжение, равное или чуть меньше, чем напряжение питания микроконтроллера (для Arduino это +5 вольт), а низкому уровню соответствует либо уровень земли (0 вольт), либо небольшое напряжение (например, +0,2 или +0,6 вольт). Половина напряжения высокого уровня называется высоким нулём (Hi-Z).

Для логических микросхем существует ряд электрических стандартов напряжений, основанных на технологии, по которой данная микросхема выполнена. Например, TTL, CMOS и т.п. Если две микросхемы с одинаковым напряжением питания выполнены по разным технологиям (например, одна из их CMOS, а другая TTL), то они как правило логически совместимы между собой, если речь идёт только о сигналах 1 или 0. Но уровень сигнала Hi-Z у них может отличаться, что может потребовать их электрического согласования.

Например, уровень Hi-Z микросхемы, которая получает сигнал равен +2В, а уровень Hi-Z микросхемы, которая сигнал то принимает, то передаёт +2,4В). Таким образом вторая микросхема передаёт сигнал первой,  и затем переводит порт в состояние ввода данных, то есть у неё на выводе уровень Hi-Z +2.4В. А первая читает порт, а там логическая единица.

Но на практике с подобными проблемами можно столкнуться, разве что пытаясь передать сигнал с выхода микросхемы с напряжением питания +3,3В на вход микросхемы с напряжением питания +5В. Если у второй уровень Hi-Z составляет 2В, то электрического согласования не потребуется, а если 2,4В, то потребуется поставить между этими выводами схему согласования уровней на полевом транзисторе.

Тем не менее, при подключении микросхем друг к другу это следует учитывать, поскольку мне приходилось сталкиваться например с тем, что микросхема питается от напряжения +5В, а логическая единица у неё +3,2В, и хотя она при этом работает, но нагревается во время работы градусов до 60 по Цельсию. То есть напряжение питания +5В, а порты ввода-вывода, хоть и совместимые с 5-вольтовой логикой, но трёхвольтовые, то есть для работы с такой микросхемой лучше использовать микроконтроллер с напряжением питания +3,3В (прим. Это так называемый электрический стандарт интерфейса PCI).

Микроконтроллер Arduino, кстати, вполне может работать на частоте 8МГц и с напряжением питания +3,3В, но в конструктиве Arduino такая возможность не предусмотрена, поэтому к Arduino лучше подключать микросхемы 5-вольтовой логики.

Всего микроконтроллер ATmega328p (как и ATmega168) в корпусе PDIP имеет три порта ввода-вывода. Они обозначены, как порты B, С и D:

  • Порт D - это группа выводов Digital с номерами от 0 до 7.
  • Порт B - это 5 выводов Digital с номерами от 8 до 13. Им соответствуют 5 младших бит порта B (старшие 2 вывода используются для подключения кварцевого резонатора 16 МГц).
  • Порт С - это группа выводов Analog In. Им соответствуют 6 младших бит порта C (7-й бит используется как сигнал Reset, 8-й бит не используется).

Таким образом всего Arduino имеет 20 контактов ввода-вывода обычного назначения (GPIO).

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

  • USART -- универсальный синхронный и асинхронный последовательный приёмник и передатчик (Universal Synchronous and Asynchronous serial Receiver and Transmitter). Выводы Digital с номерами 0 (приёмник) и 1 (передатчик). Он используется, например, для подключения Arduino к компьютеру через USB, но не напрямую, а посредством микрохемы переходника USB-to-serial.
  • Master/Slave SPI -- последовательный периферийный интерфейс (Serial Peripheral Interface). Выводы Digital с номерами от 10 до 13. В режиме slave (подчинённый) он позволяет программировать Arduino через ICSP с помощью программатора. В режиме master (мастер) он позволяет подключать к Arduino различные устройства с интерфейсом SPI - например использовать Arduino как программатор или подключить к Arduino флешку формата SD Card или MMC.
  • TWI -- двухпроводной интерфейс (Two-Wire Interface), совместимый с интерфейсом I2C. Выводы Analog In с номерами 4 и 5. Он позволяет подключать к Arduino, например LCD-дисплеи или микросхемы памяти EEPROM.
  • ADC -- аналого-цифровой преобразователь или АЦП (Analog-to-Digital Converter). Он позволяет подключать к Arduino аналоговые приборы. Например, потенциометры, датчики (сенсоры), микрофон и т.п. Всего у микроконтроллера Arduino шесть 10-битных аналоговых входов - группа контактов Analog In.
  • Аналоговый компаратор (AIN). Выводы Digital с номерами 6 (позитивный вход) и 7 (негативный вход). Если напряжение на позитивном входе компаратора превышает напряжение на негативном входе, то микроконтроллер может генерировать специальное прерывание, либо использовать этот сигнал для детектора фронтов на 16-битном таймере . В качестве негативного входа вместо вывода Digital 7 может быть использован любой из выводов группы Analog In. Позволяет Arduino измерять частоту и уровень аналогового сигнала.
  • PWM -- широтно-импульный модулятор или ШИМ (Pulse Width Modulation). Выводы Digital c номерами 3, 5, 6, 9, 10, 11. Позволяет микроконтроллеру Arduino генерировать аналоговые сигналы с разрядностью от 2 бит с частотой 250 кГц до 8 бит с частотой 15625 кГц. Всего микроконтроллер Arduino имеет 6 ШИМ-модуляторов, по 2 на каждый из 3 таймеров.
  • ICP -- модуль захвата ввода (Input Capture Unit). Вывод Digital с номером 8. Позволяет Arduino измерять частоту и цикл заполнения цифрового сигнала.
  • T0 и T1 -- Источники внешнего тактового сигнала для таймеров-счётчиков 0 и 1. Выводы Digital с номерами 4 и 5. Позволяют подключать к Arduino, например, микросхемы часов реального времени или синхронизировать Arduino с устройствами, работающими на частотах, которые не кратны системной частоте Arduino 16 Мгц (например, 5 МГц или 1.8432 МГц).

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

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

 

Порты ввода-вывода микроконтроллера Arduino MEGA 2560

Микроконтроллер ATmega2560 имеет отличное от микроконтроллера ATmega328P число пинов ввода-вывода и большее количество портов. Они обозначены как порты A, B, C, D, E, F, G, H, J, K и L:

  • Порт F - это группа выводов ANALOG IN с номерами A0..A7.
  • Порт K - это группа выводов ANALOG IN с номерами A8..A15.
  • Порт A - это группа выводов DIGITAL с номерами 22..29.
  • Порт B - это группа выводов DIGITAL с номерами 53..50 и группа выводов PWM с номерами 10..13.
  • Порт C - это группа выводов DIGITAL с номерами 37..30.
  • Порт D - это группа выводов COMMUNICATION с номерами 21..18 и вывод DIGITAL с номером 38 (PD7).
  • Порт E - это группа выводов PWM с номерами 0, 1 и 5, 2, 3 (PE3..PE5).
  • Порт G - это группа выводов DIGITAL с номерами 41..39 и вывод PWM с номером 4 (PG5).
  • Порт H - это выводы COMMUNICATION с номерами 17 и 16 и группа выводов PWM с номерами  6..9 (PH3..PH6).
  • Порт J - это выводы COMMUNICATION с номерами 15 и 14.
  • Порт L - это группа выводов DIGITAL с номерами 49..42.

Таким образом плата Arduino MEGA 2560 имеет 70 контактов ввода-вывода общего назначения (GPIO).

Категория: Arduino скетчи | Добавил: Alex (01.06.2014)
Просмотров: 4636 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024