Еще одна вещь, которую вы должны рассмотреть, это то, нужно ли вам вообще менять уровень. Многие микросхемы имеют входные контакты, допускающие 5 В, даже при работе с более низким напряжением, например 3,3. Процессор atmega также интерпретирует все, что выше 0,6 * Vcc или 3 В для Arduino, как логический максимум, поэтому сигнал 3,3 В может напрямую управлять выводом Arduino без смещения уровня.
Предполагая, что вы используете 5 В arduino и вам нужно поговорить с частью 3.3 В, если часть имеет входы с допустимым напряжением 5 В (многие делают это в настоящее время), просто подключите их, и это будет работать. Если ваша двунаправленная линия имеет конструкцию с открытым коллектором, такую как i2c, где устройства только опускают линию, тогда просто подключите подтягивающие резисторы к 3,3 В вместо 5 В, и все будет работать.
В противном случае все, что вам нужно сделать, это убедиться, что линия не поднимается выше 3,3 В, вы можете сделать это с помощью резистора и стабилитрона, установить резистор на линию Arduino, а затем стабилитрон, чтобы зафиксировать напряжение до 3,3 В. (источник: repetae.net )
У вас может возникнуть соблазн жить опасно и просто использовать резистор 10 кОм и ничего больше. Причина, по которой это (иногда!) Работает, заключается в том, что внутри приемного чипа находится зажимной диод, который подает избыточное напряжение до VCC или 3,3 В. Этот диод сгорит, если вы попытаетесь протянуть всю линию 3,3 В до 5 В через него (в дополнение к любому повреждению, вызванному вытягиванием этой линии до 5 В), однако с резистором не будет течь большой ток и предполагается, что ваша линия 3,3 В имеет нетривиальную нагрузку, это существенно не изменит уровень вашей линии электропередачи, но есть много предостережений. Так что, в общем, не делайте этого, если у вас нет локальной изолированной шины 3,3 В и вы не можете сэкономить лишние два цента для стабилитрона. Я упоминаю об этом только потому, что вы увидите это в схемах для дешевых дешевых секционных досок, которые вы получаете на ebay, и у вас может возникнуть желание скопировать их, просто не позволяйте ему проскользнуть мимо макета в производственный дизайн. :)
Эдит только что заметил, что вы используете более новую версию 3.3 В Arduino, поэтому просто инвертируйте то, что я сказал выше, уловка с резистором Зенера все еще будет работать, хотя, очевидно, некоторые из линий ввода / вывода из-за этого могут быть 5 В, возможно, есть некоторое разногласие на форумах. Teensy 3.1 также представляет собой симпатичную маленькую плату ARM, которая имеет все толерантные выводы 5 В и стоит меньше половины стоимости должного и лучше разработанного IMHO http://www.pjrc.com/store/teensy31.html