Подсистема питания в микроконтроллере
Для питания любого МК требуются, как минимум, два провода: положительный («плюс», «Power supply») и отрицательный («минус», «Ground reference»). Обозначают их в даташитах и на схемах следующими сокращениями (Рис. 2.8):
- Vcc (Voltage Collector-to-Collector) или VDD (Voltage Drain-to-Drain);
- GND (GrouND) или Vss (Voltage Source-to-Source).

Внутреннее сопротивление МК обозначается переменным резистором Rx. Почему переменным? Потому, что ток потребления МК варьируется по мере исполнения программы. Зависит он также от режима работы, напряжения питания, температуры, тактовой частоты, нагрузки на выходные линии. В «спящем» режиме ток составляет единицы микроампер, в рабочем — десятки миллиампер, в максимально нагруженном — 0.1 . 0.3 А. Конкретные значения приводятся в даташите.
Таблица 2.4. Варианты обозначения выводов питания МК
Пары условных обозначений в даташитах
Несколько замечаний о принятых в международной инженерной практике условностях [2-3]. Напряжение на выводе биполярного транзистора по отношению к общему проводу GND обозначается буквой «V» (англ. «Voltage») и одним из подстрочных индексов: «В» (англ. «Base», база), «С» (англ. «Collector», коллектор), «Е» (англ. «Emitter», эмиттер). К примеру, Vc — это напряжение на коллекторе относительно GND. Напряжение между двумя выводами транзистора обозначается двойным индексом: VCE — это напряжение между коллектором и эмиттером.
Индекс, образованный двумя одинаковыми буквами указывает на источник питания: Vcc — положительный, VEE — отрицательный контакт. Образно можно представить себе транзистор проводимости п—р—п, у которого коллектор соединяется с питанием (С-С), а эмиттер с «массой» (Е-Е). Транзисторы проводимости р—п—р в эту стройную теорию не помещаются, сказывается тот факт, что они изначально по технологическим причинам были меньше распространены.
Для полевых ^-канальных транзисторов существуют аналогичные названия, соответственно, VDD (плюс питания, напряжение «сток — сток», «Drain-to-Drain») и Vss (минус питания, напряжение «исток — исток», «Source-to-Source»).
Поскольку современные МК состоят из полевых транзисторов, то логично было бы их выводы питания обозначить парой «^dd’^ss^» а не «^cc’GND», как у микросхем ТТЛ-логики. Однако, здесь начинается самое интересное (Табл. 2.4). Единообразие отсутствует даже в М К одной фирмы и одного семейства.
Пример 1. Микросхема Z86L33 фирмы Zilog, выполненная в корпусе с 28 выводами, имеет название цепей питания «^dq-^ss»’ а та же микросхема в корпусе с 40 выводами — «KCC-GND».
Пример 2. В семействе ATmega фирмы Atmel принято обозначение «KCC-GND» (далее в книге как основное), а в семействе ARM той же фирмы «Kdd-GND».
Пример 3. МК К1816ВЕ49 имеет два вывода питания, один из них Vcc является основным, а другой VDD служит для подключения резервной батареи.
Наверное, дальше всех в казуистике названий продвинулась микросхема TMS320F фирмы Texas Instruments, имеющая вывод общего провода с «двойной фамилией» KSS1AGND.
Тем, кто часто работаете разными семействами МК, пригодится простое мнемоническое правило — поскольку за буквой «С» латинского алфавита сразу следует буква «D», значит Vcc и VDD относятся к одной и той же цепи, т.е. к питанию. Вывод GND ни с чем не спутаешь, это «земля», «общий провод». Остаётся обозначение Vss, которое методом исключения приравнивается к GND.
Кстати, слово «вывод» (англ. «pin» — булавка) употребляется в электронике для микросхем, транзисторов, конденсаторов, диодов, резисторов, оптопар, катушек индуктивности. Слово «контакт» — для разъёмов, переключателей, джамперов, реле, перемычек, а вот сленговые названия «ноги, ножки» более характерны человеку, нежели электронному изделию.



Организация питания в МК
Двухпроводное питание современным МК досталось по наследству от «прадедушек» i8048/i8051. Сейчас оно в основном применяется в малогабаритных МК с числом выводов 6. 18, например, в Atmel ATtiny, Microchip PIC10/12. Мера вынужденная, т.к. свободных выводов катастрофически не хватает.
С развитием технологии в состав М К стали вводить аналоговые узлы АЦП/ЦАП, которые весьма чувствительны к помехам. Произошёл естественный переход на трёх- (Рис. 2.9), четырёх- (Рис. 2.10, а. в) и многопроводные (Рис. 2.11, а, б) схемы питания.
Добавление цепей AVCC (Analog УСС) и AGND (Analog GND) позволяет развязать между собой аналоговые и цифровые части микросхемы, уменьшить импульсные помехи, повысить инструментальную точность каналов АЦП и ЦАП.
Переменные резисторы ЯА и RD отличаются между собой по сопротивлениям. Во времени они тоже изменяются по разным законам. Например, в рабочем режиме «цифровой» ток значительно больше «аналогового». Следовательно, RA больше, чем Rd. В ждущем режиме ситуация может измениться с точностью до наоборот.


Резисторы Rg, Ry — это омические сопротивления, непосредственно измеренные тестером между выводами микросхем. Их наличие или отсутствие не поддаётся логическому предсказанию и обычно не указывается в даташитах. Например, в одном и том же семействе Atmel ATmega у микросхем ATmega8 и ATmega 16 питание выполняется, соответственно, по схемам, изображённым на Рис. 2.10, в и Рис. 2.10, б.
В каждом конкретном случае разобщённость внутренних цепей надо проверять экспериментально, не надеясь на знаменитый славянский «авось». Абсолютные значения сопротивлений резисторов RG, Rw у разных фирм отличаются, что связано с особенностями технологии изготовления.
Многопроводные схемы особенно характерны для 16- и 32-битных МК, у которых питание разделяется на несколько потоков. А именно: ядро процессора, периферийные буферы, аналоговая часть, система фазовой автоподстройки частоты (ФАПЧ), генераторный блок и т.д. Названия цепей встречаются самые экзотические: VDDA2, KDD18, KDDC0RE, К33, DVCC, VDDAKSS4, DVSS, KSSA. Рекордсменом в этой области можно считать М К семейства Atmel АТ91 САР, где в одном корпусе насчитывается 12 неповторяющихся названий выводов питания и 8 вариаций названий общего провода. Каждая из силовых цепей в свою очередь продублирована несколькими одноимёнными выводами с разных сторон четырёхгранного корпуса, что позволяет равномернее распределить токовую нагрузку.
Фильтрация помех
Если посмотреть на осциллограмму тока потребления МК, то в ней можно заметить низкочастотную (НЧ) и высокочастотную (ВЧ) составляющие. Как следствие, колебания тока приводят к появлению НЧ- и ВЧ-помех на зажимах питания. Для их ослабления используют стандартные решения в виде связки конденсаторов (Рис. 2.12, Рис. 2.13), 1С- и ДС-фильтров (Рис. 2.14, Рис. 2.15).
Неполярные конденсаторы С1, C3 ослабляют ВЧ-помехи. Их наличие обязательно возле любого МК, причём максимально близко от выводов питания (не более 50 мм). Конденсаторы должны быть керамические, например, К10-17 или поверхностно монтируемые чип-коденсаторы ходовых размеров 0603. 1206.
Базовый номинал ёмкости 0.1 мкФ выбран условно, как легко запоминающийся. Устройство будет нормально функционировать и при 0.068 мкФ, и при 0.15. 0.22 мкФ. Иногда параллельно конденсатору С1 ставят ещё одну неполярную ёмкость 1000 пФ, которая снижает уровень радиоизлучений. Обычно такой способ применяют в профессиональной аппаратуре, чтобы войти в допуск при проверках изделия на электромагнитную совместимость и радиопомехи.


Полярный конденсатор С2 желательно использовать танталовый (а не алюминиевый), поскольку он лучше подавляет импульсные помехи. При выборе ёмкости можно руководствоваться эмпирическим правилом, которое заимствовано из многолетней практики применения сетевых источников питания — 1000 мкФ на каждый ампер тока нагрузки. К примеру, если цифровая часть МК потребляет ток 10. 30 мА, то достаточно поставить конденсатор С2 ёмкостью 10. 30 мкФ с рабочим напряжением не менее 6.3 В. Знатоки рекомендуют выбирать более высоковольтные конденсаторы с напряжением 10. 16 В, поскольку повышается надёжность в эксплуатации и, главное, снижается внутренний импеданс, что позволяет лучше фильтровать помехи.
Конденсатор С2 обязателен при батарейном питании в качестве накопителя энергии, а также при значительных колебаниях и скачках напряжения. В некоторых случаях его функцию выполняет конденсатор фильтра сетевого выпрямителя или стабилизатора напряжения. Как вариант, конденсатор С2 может физически размещаться вблизи других цифровых микросхем и косвенно воздействовать на цепь питания МК.
Катушка индуктивности L1 развязывает цифровую и аналоговую части по высокой частоте. Если её не ставить, то может ухудшиться точность измерения АЦП и стабильность порога срабатывания аналогового компаратора. Как ни парадоксально, но значительную часть помех по питанию создают внутренние цифровые узлы МК, поэтому 1С- и /?С-фильтры защищают контроллер от . самого себя. Номинал индуктивности L1 не особо критичен и может варьироваться в широких пределах.
Ферритовая «бусинка» FBI (Ferrite Bead) представляет собой проводник, пропущенный через ферритовое кольцо или цилиндр. Этот элемент способствует снижению высокочастотных излучений, которые можно зафиксировать лишь специальными измерительными радиоприёмниками в экранированной «безэхо-вой» камере. Такие испытания обязательны при сертификации продукции.
В любительской практике фильтр FBI ставится редко, разве что в связной спортивной аппаратуре, где помехи от МК могут существенно повлиять на качество принимаемого радиосигнала и значительно ухудшить чувствительность.
Avcc на схеме что это
Всем доброго дня.
В Меге 8 есть вывод AVCC и AREF
как я понял AREF это опорное напряжение АЦП.
тогда что за напряжение AVCC ? обязательно ли его подавать с VCC?
_________________
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет
_________________
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Обзор представленных в Компэл новых серий семейств DDRH и RSDH на DIN-рейку и на шасси для высоковольтных сетей постоянного тока с диапазоном входных напряжений от 150 до 1500 В. Могут применяться для станций зарядки электромобилей и электробусов, ж/д транспорта, систем хранения энергии, альтернативной энергетики, телекоммуникационных центров и центров обработки данных.
Ведущий производитель источников питания MORNSUN выпустил серию ИП на DIN-рейку LI100-20BxxPR3 c выходами на 12, 15, 24 и 48 В. Высокоэффективные и защищенные от помех источники питания со стабильными рабочими параметрами широко используются в составе оборудования для промышленной автоматизации, различных производственных машин, рельсовых систем транспортировки и другого оборудования, работающего в условиях неблагоприятной окружающей среды.
Правильное подключение микроконтроллера
На первый взгляд вроде бы простая тема, но многие начинающие радиолюбители которые только начали изучать микроконтроллеры довольно часто задают одни и те же вопросы. К примеру, как подключить светодиод, как обработать события нажатия клавиш, для чего нужны выводы AGND и AREF, AVCC. И раз эти вопросы так часто задают, то тема еще не понятна или не полностью раскрыта и имеет смысл дать исчерпывающий ответ на вопрос «Как правильно подключить микроконтроллер?».
Питание микроконтроллера
Микроконтроллеры в зависимости от модели и серии питаются от напряжения величиной от 1.8 до 5 Вольт. Все микроконтроллеры AVR работают от напряжения в 5 Вольт. Поэтому можно считать что практически у всех микроконтроллеров напряжение питания 5 В, плюсовой вывод на микроконтроллере обозначается как Vcc. Нулевой вывод или еще его называют земля корпус, минусовой вывод обозначается как GND. Если взять блок питания от компьютера то черный провод это GND, а красный это +5 В это и есть Vcc. Если питаем от батареек то минус батарее это GND а плюс это Vcc. Главное чтобы напряжение питания с батареек было в диапазоне напряжения микроконтроллера, это интервал можно посмотреть в документации на МК.
- –1.8 — 5.5V (ATtiny2313V)
- –2.7 — 5.5V (ATtiny2313)
- –ATtiny2313V: 0 — 4 MHz @ 1.8 — 5.5V, 0 — 10 MHz @ 2.7 — 5.5V
- –ATtiny2313: 0 — 10 MHz @ 2.7 — 5.5V, 0 — 20 MHz @ 4.5 — 5.5V
Operating Voltage это как раз и есть тот диапазон напряжения в котором возможно нормальная работа МК. Существуют низковольтные серии (ATtiny2313V) у которой минимальное напряжение заметно ниже.
Speed Grades это максимально возможные частоты работы МК в зависимости от напряжения которое к нему подвели. Здесь видно, чем ниже напряжение тем меньше максимальная работа МК.
Для того чтобы нам МК начал работать то на него достаточно подать напряжение в 5 В. Как и говорилось ранее один провод кидаем на Vcc а другой на землю — к выводу GND. Некоторые микроконтроллеры имеют несколько выводов Vcc и также несколько GND. Это сделано не для того чтобы вам было делать печатные платы и удобства монтажа а для того чтобы подвести напряжение к камню равномерно, т.е. равномерно запитать весь кристалл. Это делается для того чтобы внутренний линии кристалла не перегружались. К примеру вы взяли МК с квадратным корпусов TQFP у него выводы Vcc и GNВ находятся со всех сторон. С одной стороны вы подвели питание, т.е. задействовали всего лишь 2 вывода питания а с другой стороны вы подключили на порты кучу светодиодов и взяли и зажгли их разом. Получается что внутренние линии МК перегружены, в результате камень офигеф от такой нагрузки выходит из строя. Поэтому если у контроллера есть несколько выводов питания то запитать нужно все выводы Vcc и GND.
Помимо выводов предназначенных для питания МК есть еще выводы AGND и AVCC — это выводы питания АЦП (аналого-цифрового преобразователя). АЦП это довольно точный измеритель напряжения, по этой причине его можно запитать через фильтры. Для того чтобы помехи которые довольно часто бывают в цепях питания не влияли на результаты измерения. По этой причине в некоторых схемах производят разделение земли, а на вывод AVCC подается напряжение через фильтрующий дроссель. А если вы не планируете пользоваться АЦП и вам не нужны точные измерения, то на AVCC можно подать те же +5 В что и на Vcc, а вывод AGND подключить к земле. Подключать выводы AVCC и GND нужно обязательно!
В микроконтроллере Atmega8 есть одна ошибка на уровне топологии чипа — выводы VCC и AVCC связаны друг с другом на уровне кристалла и между ними сопротивление 5 Ом. К примеру, в чипах Atmega16 и Atmega168 выводы VCC и AVCC связаны между собой и их сопротивление составляет порядка десяток МОм. В документации по этому поводу ничего не сказано. Поддержка Atmel на это ответила что в чипе есть недочет и выводы VCC и AVCC соединенны между собой внутри камня. По этой причине ставить фильтрующий дроссель на AVCC для ATmega8 нет смысла, но запитывать вывод AVCC нужно в любом случае.
Схема подключения микроконтроллера AVR
Эта упрощенная схема подключения микроконтроллера так сказать необходимы минимум для запуска контроллера, по хорошему лучше добавить несколько внешних элементов. Провод показанный пунктиром от источника питания к БП необязателен. Если ты питаешь МК от внешнего источника то это провод лишний. Но лучше питать всю схему от одного источника — так больше вероятность того что все прошьется успешно. Для учебных целей схема подключения питания самый раз, светодиодиком там помигать или еще чего.
Вывод AREF это вход опорного напряжения АЦП, туда подается напряжение относительно которого будет считать АЦП. Можно использовать внутренний источник опорного напряжения величиной в 2.56 В либо использовать напряжение AVCC. На вывод AREF рекомендуется подключать конденсатор, это улучшает качество опорного напряжения АЦП и как в следствии правильность измерения АЦП. На входе в AVCC установлен дроссель и конденсатор между AVcc и GND. Также между выводами GND и VCC ставят керамический конденсатор номиналов в 100 нФ как можно ближе к выводам питания микросхемы — он сглаживает краткие импульсы помехи, которые получаются в результате работы самих микросхем. Также между выводами VCC и GND устанавливают конденсатор емкость в 47 мкФ для сглаживания более сильных бросков напряжения.
В МК AVR есть внутренняя схема сброса и вывод reset внутри уже подтянут сопротивлением в 100 кОм к выводу Vcc. Но этой подтяжки не хватает, получается что микроконтроллер «выход» в сброс от незначительного потенциала на выводе. К примеру от прикосновения пальцем вывода RST, а иногда от случайного касания самой платы. Поэтому имеет смысл дополнительно подтянуть этот вывод резистором в 10 кОм. Меньшее значение резистора лучше не брать, потому что если вы используйте внутрисхемный программатор то он не сможет пересилить подтяжку и прошить микроконтроллер. Поэтому значение в 10 кОм в самый раз.
Схема сброса микроконтроллера
После того как схема вклчючена, изначально конденсатор C12 разряжен и напряжение на RST почти равно нулю и в результате микроконтроллер не запускается. Получается что ему после запуска схемы постоянный сброс. С течением времени происходит заряд конденсатора через резистор, после того как он заряжится на выводе RST появится логическая единица МК запустится. Ну а скнопкой всю понятно она разряжает конденсатор и происходит перезапуск микроконтроллера.
Задержку перед стартом МК легко посчитать по формуле как T=R*C при данных значения получается приблизительно одна секунда. Для чего эта задержка? — спросите вы. А для того чтобы МК не запускался раньше времени чем все устройства на плате запитаются в перейдут в установившийся режим работы. К примеру, в старых МК (AT89C51) если нет такой цепочки которая делает изначальный сброс, то МК мог вообще не запуститься.
В МК AVR такую задержку перед стартом можно сделать программно чтобы он подожда секунду и потом только запускался. Поэтому можно обойтись и без конденсатора. А кнопку можно оставить — на свое усмотрение.
Тактирование микроконтроллеров
Тактовый генератор это своего рода сердце микроконтроллера. По кажлому «тику» или импульсу тактового генераора происходи какая нибудь операция — передаются какие либо данные по шинам и регистрам, работают таймеры, переключаются порты ввода/вывода. Чем больше тактовая частота тем больше энергии нужно микрокнтроллеру.
Импульсы формируются тактовым генератором с определенной скоростью (частотой). Сам генерато может быть как может быть как внутренний так и внешний. Все это гибко настраивается.
- внутреннего генератора с внутренней задающей RC цепочкой. При таком тактировании никакой обвязки не нужно. К выводам XTAL1 и XTAL2 можно ничего не подключать, их можно использовать как обычные порты ввода/вывода. Внутренний RC генератор можно настроить на 4 значения частоты;
- внутреннего генератора с внешней задающей RC цепочкой. Тактирование аналогично предидущему способоу, только вот задающая RC цепочка находится не внтури МК, а снаружи, такая схема позволяет изменять частоту прямо на ходу. Изменение задающей частоты происходит путем изменения значения сопротивления;
- внутреннего с внешним задающим кварцем. В этом случае снаружи МК цепляют кварцевый резонатор с небольшой обвязкой кварца из двухконденсаторов. Если используется кварц(резонатор) с частотой менее 1 МГц то конденсаторы можно и не ставить.
- внешнего генератора. Это когда импульсы поступают на вход МК от внешнего генератора. Такое тактирование применяют когда нужно чтобы несколько независимых микроконтроллера работали синхронно от одного генератора.
У каждого способа тактирование есть свои достоинства. Если мы используем внутренюю или внешнюю RC цепочку то у нее есть один недостаток — » плавание частоты в зависимости от температуры. И мы не можем максимально развить максимальную частоту. Если использовать кварц то он занимает 2 ножки микроконтроллера. На кварце можно развить максимальную частоту. Частота тактирования микроконтроллера зависит от того какой кварц мы подключили.
Посмотреть способы тактирования МК можно в даташите System Clock and Clock Options. Если в кратце, то выбор способа тактирования осуществлятеся путем выставления определенных Fuse битов. Но если вы пока еще не ознакомились с ними, то лучше пока туда не лезть и использовать выбранный по умолчанию способ тактирование. По умолчанию в МК выбран внутренний генератор. Если не правильно выставить Fuse биты можно «залочить» МК и он превратиться в мертвеца и вернуть его к жизни будет совсем не просто, но все же возможно.
Подключаем к микроконтроллеру кнопки и светодиоды
Микроконтроллер если к нему не подкючены какие либо внешние устройства не представляет собой ничего интересного, кусок кремния который тикает там что то себе под нос! Друго дело когда мы может что то понажимать, объяснить ему что «мол вот я нажал кнопку давай делай что нибудь!» а он нам в ответ может что включить, пропищать и как то с реагировать.
Для того чтобы подключить нашу всеми любимую кнопку нам нужно сначала выбрать ножку на которую мы его будем цеплять. Один конец кнопки мы кидаем на землю а другой к ножке МК. Сам вывод к которому подключения кнопка нужно настроить на вход с включением внутренних подтягивающих резисторов (PORTx=1 DDRx=0). Получается что если кнопка не нажата то входе будет высокий уровень напряжения через подтягивающий резистор. Если мы считаем это значения через PINx то он будет возвращать 1. Если мы нажимаем кнопку то вывод подтягивается к земле и напряжение на нем становится равным нулю, PINx возвращает 0. По этому значению мы и определяем нажата ли кнопка или нет.
В дополнении к внутреннему подтягивающему резистору можно подключить еще внешний резистор (на схеме показан пунктиром). Дело в том что внутренняя подтяжка слабовата порядка 100 кОм. Поэтому наведенное на этом выводе какое либо напряжение может привести к ложному срабатыванию. Довольно часто эти внутренние сопротивление сгорают от каких либо наводок. Микроконтроллер работает как и работал только вот без этой подтяжки. Поэтому рекомендуется ставить свою внешнюю подтяжку сопротивлением в 10 кОм. Таким образом можно подстраховатся даже, даже если внутреняя сгорела то у вас все будет работать должным образом.
Для того чтобы подключить светодиод можно использовать две схемы подключения порт-земля и порт-питание. В первом случае для того чтобы зажечь светодиод нужно на вывод к которому подключили светодиод подать высокий уровень (логическую единицу). Для второго случае когда светодиод подключен к выводу Vcc нужно наоборот подать другой уровень низкий (логический ноль). Для микрокнтроллеров абсолютно неть разницы куда вы будете подключать светодиод к земле или к Vcc. Можно применять как одну так и другую схему подключения светодиода к микрокнтроллеру AVR в зависимости от разводки печатной платы. Программно разницы тоже особо нет.
Сначала нам нужно настроить порт на выход для этого в регистр DDRx запичываем 1. Далее записываем в порт PORTx нужный нам уровень высокий или низкий.
Светодиод к выводам МК нужно цеплять черех резистор. Максимальный ток вывода МК порядка 20-30 мА. А для нормального свечения светодиода нужно 3. 15 мА. А когда мы подклчаем светодиод с низким прямым сопротивлением, то мы можем его в лучшем случае просто спалить, а в худшем спалить сам вывод микроконтроллера. Поэтому ток через светодиод нужно ограничивать подключаю последовательно светодиоду сопротивление.
Напряжение на ноге микроконтроллера около 5 В. Для нормального горения светодиода нужно что на нем падение напряжения было приблизительно 2.5 В. Получается что такое же напряжение должно быть и ограничивающем сопротивлении 5-2.5=2.5. Предположим что ток протекающий через диод 5 мА. Знаем ток в цепи и падение напряжения на резисторе находим по закону Ома требуемое сопротивление резистора R=U/I=2.5/5e-3=500 Ом. Ближайшее значение 510 Ом, но можно взять и другие хоть от 220 Ом до 1 кОм. Гореть светодиод будет хорошо.
Если вы захотели подключить несколько светодиодов, то вам нужно вешать сопротивление на каждый светодиод. Если установить всего один общий резистор на все светодиоды то каждый светодиод получит меньше тока, а если уменьшить сопротивление резистора для того чтобы все горели в нормальный «накал» то в случае зажигания всего лишь одного светодиода он может выйти из строя либо сгорит порт.
Иногда бывают такие случаи когда мы установили микрокнтроллер, памяти нам хватает и быстродействие на высоте, но вот с ножками беда-не хватает нам ног для установки дополнительных устройст, кнопок или потребителей. Многие видят выход только в одном-установкой другого камня с большим числом ног. Но не каждый знает что есть несколько приемов как можно программно сэкономить на железе.
Это прием заключается в том что мы динамически меняем назначение выводов с течением времени. К примеру какой либо вывод работает на шину, а вслучае когда нам шина не нужна, то этот вывод мы можем использовать для других нужд. Например мы обрабатывать события нажатия кнопки. Переключения между назначением вывода происхоид сотни или даже тысячу раз в секунду и тем самым создается впечатление что одни вывод работает сразу двум назначения.
Но при такой программной реализации вывода порта нужно следовать определенным правилам:
Те назначения котоые вы планируете применять не должны друг другу мешать. Их нужно разделить таким образом чтобы одна функция (смежная) не изменяла результат работы другой функции (проверяемой).
Например, допустим у нас есть один вывод к которому мы подключили какой либо датчик либо кнопку. С датчика может придти сигнал 0 или 1, а в активном режиме Hi-Z в случае когда на датчик не послали сигнал Enable. А при нажатии на копку придет сигнал 0,
Основную часть времени МК установлен на вход Hi-Z и мы получаем сигнал с датчика на него же подан сигнал enable. Если нам нужно узнать состояние кнопки, то мы убираем enable и его выходы становятся в режим Hi-Z и нам не мешают. Далее мы переводим вывод МК в редим Pull-Up и опрашиваем нет ли у нас на входе вывода нуля — это сигнла нажатой кнопки. После того как мы это проверили мы снова переводим МК в Hi-Z и отправляем сигнал enable на датчик. Эта последовательность действий повторяется несколько раз в секунду.
При таком способе подключения могут возникнуть противоречия
Логическое противоречие
На линии может быть 0 в двух случаях от подключенного датчика и от нажатой кнопки. Если нажать кнопку то показания датчика исказятся, поэтому нужно знать когда происходит опрос датчика и в этот момент не нажимать кнопку. А для того чтобы те данные которые идут с датчика не принять за сигнал нажатия кнопки в тот интервал времени когда мы опрашиваем датчик, мы просто не опрашиваем кнопку.
Электрическое противоречие
Если с датчика поступает высокий уровень и мы нажимаем кнопку, то на одном выводе у нас сразу встретятся 0 и 1,Vcc и GND. В результате у нас датчик «заснет вечным сном» а кнопка как жили так и будет. Программым методом это противоречие не решить, а определить можно ли нажимать кнопку или нет в определенный момент времени на глаз просто не возможно, и в каком месте сейчас выполняется программа тоже не узнать. Электрическое противоречие можно решить только схемотехническим путем. Нам нужно в цепь где у нас кнопка добавить резистор. Значение резистора определяется через максимальтный ток самого низковольтного вывода (датчика или ножки).
К примеру если у нас на выводе васит датчик у которого вывод может дать не больше чем 10 мА. То нам нужно чтобы ток через датчик не был больше этой величины в случае нажатия кнопки. При напряжении в 5 В получаем сопротивление в 510 Ом. Таким образом даже если у нас с датчика идет высокий уровень, и в этот момент времени нажимается кнопка то ничего страшного не произойдет и датчик не сгорит и искажения уровня сигнала тоже не произойдет.
Примеры использования нескольких функций на одной ножке
Разъем ISP в некоторых схемах занимает 3 вывода микроконтроллера MOSI,MISO,SCK. У меня практически все платы имеют такой разъем и в него у меня вставлен программатор. Во время отладки платы я прошиваю МК по несколько раз. И это очень удобно, мне не приходится каждый раз когда мне нужно прошить МК его вытаскивать втавлять в колодку программатора и далее обратно.
На эти три разъема можно подключить, к примеру кнопки. И мониторить их состояние в прогамме. Самое главное не нажимать эти кнопочки во время заливки прошивки в микроконтроллер. Также с целью экономии выводов на эти выводы можно прицепить светодиоды. Правда если использовать программатор Громова то он может не корректно сработать. А если использовать программатор USBasp то проблем возникнуть не должно. В процесе прошивки светодиоды на выводах MOSI,MISO,SCK будут забавно моргать:)
В общем на эти вывод можно цеплять не только кнопки и светодиоды ну и что нибудь другое. Главное чтобы это устройство в процессе прошивки не начало чудить. К примеру если на этих вывода у вас находится релюшка которая управляет большой нагрузкой, то в процессе прошивки реле просто офигеет от потока данных как и высоковольтная нагрузка. В общем нужно понимать как это работает и не цеплять на эти выводы что попало. Можно подклчить символьный LCD дисплей типа HD44780 который использует шинный интерфейс для работы (схема ниже)
Установленные резисторы по 10 кОм отделяют линию программатора от основной схемы. Резисторы ограничивают возможные другие уровни от дисплея на выводах ISP разъема, программатор их пересиливает и шьет микрокнтроллер. А на работу дисплея эти резисторы особоне не оказывают влияния.
Подключение двух светодиодов на один вывод
В данной схеме два светодиода подкючены на одну ножку порта, такая схема позволяет упростить печатную плату, не придется тажить еще одну шину к каждому светодиоду. Для того чтобы зажечь верхний сетодиод нужно на вывод Pxy подать логический 0, а для того чтобы зажечь нижний то подать высокий уровень. Если мы хотим зажечь сразу оба светодиода та нам нужно перевести вывод МК в режим Hi-Z как будто его нет, в этом случае появится сквозной ток через оба светодиода и они оба загорят. Или можно бысто зажигать то один то другой, визуально они будут оба гореть. Минус схемы в том что погасить сразу два диода нельзя.
Подключение двух светодиодов по схема PORT-PORT
В это схеме ничего сложного нет — меняя состояние выводов то в 1 то в 0 мы меняем напрявление тока включает то идин то другой диод. Для того чтобы погасить оба светодиода то нам нужно подать сразу на оба вывода либо высокое состояние 11 либо низкое это 00. Для того чтобы зажечь сразу два светодиода нам нужно сделать динамическую индикацию, быстро меняя состония обеих ножек с высокого на низкий. Если взять 3 вывода и использовать тот же принцип смены состояния ножек то можно подключить шесть светодиодов.
В данной схеме кнопки опрашиваются поочередно. Один вывод подтягивает внутренее сопротивление а другая дает 0. Нажатие кнопки дает 0 на подтянутом выводе а это фиксирует программа, таким образом,меняя роли выводов опрашивается каждая кнопка. Если у нас используется 6 выводов, то действуем по следующей схеме: одну ножку подтягиваем, другую делаем нулем а из третьей делаем состояние Hi-Z. Но тут тоже есть один минус. Допустим мы хотим опросить кнопку «В». Для этого верхнюю линию подтягиваем, среднюю делаем нулем, а нижнюю не задействуем в процессе или выставляем ее в стостоянии Hi-Z. Далее если мы нажмем на копку «B» то верхняя линия подтянится к нулю и программа поймет что нажата именно кнопка «B». В том случае если одновременно будут нажаты кнопки «E» и кнопка «Б» то верхняя линия такжн подтяница к 0 и программа поймет что была нажата кнопка «В», хотя мы ее не нажимали.
К минусам такой схемы можно отнести не правильная обработка событый нажатия кнопок в случае одновременного нажатия нескольких кнопок.
Схема подключения кнопки с светодиода к одному выводу
Эта схема работает также в динамическом режиме.Для того чтобы отобразить состояние светодиода мы можем подать 0 — диод горит, либо перевести вывод в состояние Hi-Z — диод не горит. А для того чтобы опросить кнопку нам нужно временно на несколько микросекунд перевести вывод в режим входа с подтягом и опрашивать кнопку. В том случае когда горит светодид т.е. на выводе высокий уровень, то нажимать кнопку нельзя, в противном случае сгорит порт а это нам совершенно не нужно.