Otra cosa que debe considerar es si realmente necesita un cambio de nivel. Muchos chips tienen pines de entrada tolerantes a 5V incluso cuando funcionan a un voltaje más bajo, como 3.3. La CPU atmega también interpreta cualquier cosa por encima de 0.6 * Vcc o 3V para un arduino como un nivel lógico alto, por lo que una señal de 3.3V puede conducir directamente un pin arduino sin cambio de nivel.
Suponiendo que está utilizando un arduino de 5V y necesita hablar con una parte de 3.3V, si la parte tiene entradas tolerantes a 5V (muchas lo hacen hoy en día), solo conéctelas y funcionará. Si su línea bidireccional es un diseño de colector abierto, como i2c, donde los dispositivos solo bajan la línea, entonces solo conecte las resistencias pull up a 3.3V en lugar de 5V y las cosas simplemente funcionarán.
De lo contrario, todo lo que necesita hacer es asegurarse de que la línea no supere los 3.3V, puede hacerlo con una resistencia y Zener, colocar una resistencia en la línea Arduino y luego un Zener para sujetar el voltaje a 3.3V. (fuente: repetae.net )
Puede sentirse tentado a vivir peligrosamente y simplemente usar la resistencia de 10k y nada más. La razón de que esto (¡a veces!) Funcione es que hay un diodo de sujeción dentro del chip receptor que desvía el exceso de voltaje a vcc o 3.3V. Este diodo se quemará si intenta pasar toda la línea de 3.3V hasta 5V a través de él (además de cualquier daño causado por tirar de esa línea a 5V), sin embargo, con la resistencia no fluirá mucha corriente y asumiendo su línea de 3.3V tiene una carga no trivial, no cambiará sustancialmente el nivel de su línea de alimentación, pero hay muchas advertencias. Por lo tanto, en general, no haga esto a menos que tenga un bus local aislado de 3.3V y realmente no pueda ahorrar los dos centavos adicionales para el zener. Solo lo menciono porque lo verán en esquemas para tableros de ruptura muy baratos que obtienes en ebay y podrías tener la tentación de copiarlo, simplemente no dejes que se cuela más allá del tablero en un diseño de producción. :)
Edit se dio cuenta de que estaba usando el nuevo arduino de 3.3V, así que simplemente invierta lo que dije anteriormente, el truco de la resistencia zener todavía funcionará, aunque aparentemente algunas de las líneas de E / S en el debido pueden ser 5v tolerantes, parece haber algún desacuerdo en los foros El teensy 3.1 también es una pequeña placa ARM que tiene todos los pines tolerantes a 5V y es menos de la mitad del costo del IMHO debido y mejor diseñado http://www.pjrc.com/store/teensy31.html