Tabla de contenido:

Arduino independiente 3.3V con reloj externo de 8 MHz que se está programando desde Arduino Uno a través de ICSP / ISP (¡con monitoreo en serie!): 4 pasos
Arduino independiente 3.3V con reloj externo de 8 MHz que se está programando desde Arduino Uno a través de ICSP / ISP (¡con monitoreo en serie!): 4 pasos

Video: Arduino independiente 3.3V con reloj externo de 8 MHz que se está programando desde Arduino Uno a través de ICSP / ISP (¡con monitoreo en serie!): 4 pasos

Video: Arduino independiente 3.3V con reloj externo de 8 MHz que se está programando desde Arduino Uno a través de ICSP / ISP (¡con monitoreo en serie!): 4 pasos
Video: ✅ El Programador que Te Ahorrará gastos en los Proyectos Electrónicos con ATtiny 85 o ATmega 328P PU 2024, Mes de julio
Anonim
Arduino independiente 3.3V con reloj externo de 8 MHz que se programa desde Arduino Uno a través de ICSP / ISP (¡con monitoreo en serie!)
Arduino independiente 3.3V con reloj externo de 8 MHz que se programa desde Arduino Uno a través de ICSP / ISP (¡con monitoreo en serie!)
Arduino independiente 3.3V con reloj externo de 8 MHz que se programa desde Arduino Uno a través de ICSP / ISP (¡con monitoreo en serie!)
Arduino independiente 3.3V con reloj externo de 8 MHz que se programa desde Arduino Uno a través de ICSP / ISP (¡con monitoreo en serie!)

Objetivos:

  • Para construir un Arduino independiente que funcione con 3.3V con un reloj externo de 8 MHz.
  • Para programarlo a través de ISP (también conocido como ICSP, programación en serie en circuito) desde un Arduino Uno (funcionando a 5V)

    Para editar el archivo del cargador de arranque y grabar el cargador de arranque (a través de ISP)

  • Para poder leer información en serie desde el Arduino independiente a través de un cable FTDI

    Para poder leer información en serie desde el Arduino independiente sin el cable FTDI

Preámbulo:

Estaba tratando de construir mi proyecto independiente, pero no vi ninguna guía completa sobre cómo ejecutar, programar y monitorear un Arduino independiente, particularmente uno que funciona con un reloj externo de 8Mhz y 3.3V y programado por un Arduino UNO. He reunido una serie de guías independientes y he tratado de hacer referencia de dónde obtuve la información para dar crédito a quien corresponde. Esta guía es el resultado de muchos días buscando soluciones y encontrando partes de ella a la vez mientras estaba construyendo mi propio proyecto. Además, he vinculado varios productos útiles que vendrían a la mano no porque esté afiliado a alguno de las empresas, sino porque es relevante incluir los elementos específicos a los que me refiero.

Preguntas comunes antes de comenzar:

¿Por qué necesita programarlo con ISP y monitorear a través de FTDI? ¿Por qué no puede programarlo a través de FTDI?

Tendremos que cambiar la configuración de los fusibles grabando un nuevo gestor de arranque y no puede hacerlo a través de la comunicación en serie. Debe grabar el cargador de arranque a través de ISP. Esto también es útil para aquellos que no tienen un chip ATMEGA328 precargado.

¿Por qué no utilizo un cable ISP con monitorización en serie, como este?

Tal vez, como yo, simplemente no tiene uno y, en lugar de esperar a que le envíen uno, ¡le gustaría usar lo que tiene! Resulta que tengo un cable FTDI (aunque al final descubrirás que ni siquiera lo necesitas: simplemente te hace la vida más fácil).

¿No necesito un cambiador de nivel lógico del Uno al Arduino independiente?

Sí, lo haces, pero te mostraré cómo hacer uno tú mismo. Al igual que el cable ISP, resulta que no tengo uno.

Quiero ejecutarlo con energía externa. ¿Cómo puedo hacer eso?

Hay muchas guías que muestran cómo ejecutar un Arduino independiente con la energía de la batería. Escribiré cómo lo hice y lo vincularé aquí [lo insertaré más adelante].

LA GUÍA

Paso 1: construir el Arduino independiente

Construyendo el Arduino independiente
Construyendo el Arduino independiente
Construyendo el Arduino independiente
Construyendo el Arduino independiente

1) Construya el Arduino independiente desde este enlace. La única parte de la guía que necesita son los "Conceptos básicos de ATMEGA8 / 168/328".

  • puede alimentar el Arduino independiente desde 3.3V desde el Arduino Uno. (Puede omitir la primera sección del tutorial titulado "Agregar circuitos para una fuente de alimentación".
  • Sustituya el reloj de 16 MHz por un reloj de 8 Mhz.
  • Agregue límites de 0.1 uF entre: VCC y Gnd (ambos lados) VRef y Gnd.

    • ¡No los tengo incluidos en la imagen, pero los tengo en mis proyectos!
    • Sé que es un oscilador de 16 MHz en la foto. ¡Tomé la foto antes de descubrir todo lo que hice en la guía!

Fuente de imagen de pinout ATMEGA328p aquí.

Sugerencias comunes para la resolución de problemas

  • Asegúrese de haber restablecido el valor alto a través de una resistencia de 10k desde VCC al pin 1 de ATMEGA. Si el pin está conectado a tierra o flotando, no funcionará.
  • Verifique que haya insertado los cables y el oscilador correctamente.
  • Asegúrese de utilizar condensadores de 22pF para el oscilador de 8 MHz. De lo contrario, no funcionará.
  • Asegúrese de que el dispositivo esté encendido.

Paso 2: el cableado del ISP

El cableado del ISP
El cableado del ISP
El cableado del ISP
El cableado del ISP

2) Cree la parte del ISP

Seguirás esta guía aquí con un paso pequeño pero muy importante.

La razón por la que no puede seguir la guía es porque le falta una parte crucial: no puede programar un dispositivo de 3.3V directamente desde las conexiones de 5V. (Al menos, no pude: no funcionaría hasta que hiciera esto). Necesita insertar un cambiador de nivel lógico que cambie las señales de 5V de UNO al Arduino independiente de 3.3V.

Si no tiene una placa de cambio de nivel lógico, puede hacer una usando resistencias. Todo lo que realmente es un cambiador de nivel lógico (siempre que esté cambiando hacia abajo) es un divisor de voltaje. Necesitará 6 resistencias iguales, ni demasiado altas ni demasiado bajas. Usé resistencias de 220 ohmios, pero estoy seguro de que incluso las resistencias de 10k funcionarían.

Para SCK (pin digital 13) y MOSI (pin digital 11), use un divisor de voltaje para cortar el voltaje en un tercio. En esencia, tendrá un Uno SCK y MOSI, luego una resistencia (220 ohmios), luego SCK y MOSI conectados al Arduino independiente y 2 resistencias (440 ohmios en total) a tierra.

Por lo tanto, lea la guía vinculada al comienzo de esta sección, pero incluya divisores de voltaje entre SCK y MOSI. Recuerde, SCK, MISO, MOSI y RESET son los pines 13, 12, 11 y 10 en el Uno, pero son los pines 19, 18, 17 y 1 en el Arduino independiente.

Sugerencias comunes para la resolución de problemas

  • COMPRUEBE EL CABLEADO

    • Si obtiene una firma de dispositivo de todos los 0 cuando intenta escribir un programa, entonces es casi seguro que su cableado está apagado, o el Arduino independiente no está recibiendo energía.
    • Además, asegúrese de tener el cable de reinicio de 10 en el Uno a 1 en el Arduino independiente
  • COMPRUEBE LOS DIVISORES DE TENSIÓN

    Asegúrese de tener divisores de voltaje con una relación de 1: 2 (lado alto: lado bajo) para las resistencias tanto para SCK como para MOSI. P.ej. una resistencia de 220 en el lado de + 5v y luego 2 resistencias de 220 ohmios (440 ohmios en total) hacia tierra con la señal hacia el Arduino independiente en el medio

Paso 3: Edite el archivo del cargador de arranque, grabe el cargador de arranque y cargue su boceto

Edite el archivo del cargador de arranque, grabe el cargador de arranque y cargue su boceto
Edite el archivo del cargador de arranque, grabe el cargador de arranque y cargue su boceto
Edite el archivo del cargador de arranque, grabe el cargador de arranque y cargue su boceto
Edite el archivo del cargador de arranque, grabe el cargador de arranque y cargue su boceto

3) Edite el archivo del cargador de arranque (boards.txt) y grabe el cargador de arranque en el Arduino independiente. Sube tu boceto

Editando el archivo del cargador de arranque

Para que el Arduino independiente se ejecute, tendrá que editar la configuración del fusible de apagón del cargador de arranque. De lo contrario, podrá grabar un gestor de arranque en él, pero no podrá ejecutar ningún boceto.

Puede eliminar la detección de apagones por completo, pero no lo recomendaría. En cambio, lo vamos a bajar de 2.7V (lo que venía en mi chip por defecto) y lo reemplazaremos con 1.8V. Sin embargo, en última instancia, puede elegir qué configuración de caída de voltaje desea utilizando la calculadora de fusibles aquí.

Mi archivo de tableros estaba en la siguiente ubicación:

C: / Archivos de programa (x86) Arduino / hardware / arduino / avr

Sin embargo, es posible que tenga más de un archivo boards.txt en su carpeta de hardware que no sea / arudino /. Vas a editar el archivo boards.txt en la ubicación / arduino / porque vas a modificar la sección ATMEGA328p (3.3V, 8 MHz).

Puede perder el archivo boards.txt editado si reinstala o actualiza el IDE de Arduino (según esta publicación). Esto significa que si actualiza Arduino IDE, tendrá que cambiar esta configuración nuevamente si desea crear otra del mismo Arduino independiente.

En el archivo boards.txt, desplácese hacia abajo o busque "Pro Mini". La sección se titula "pro.name = Arduino Pro o Pro Mini". Desplácese hacia abajo hasta la subsección "pro.menu.cpu.8MHzatmega328 = ATmega328P (3.3V, 8 MHz)".

Busque la línea que dice "pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses = _"

Cambie la configuración a xFE. (pro.menu.cpu.8MHzatmega328.bootloader.extended_fuses = 0xFE).

Guardar y Salir.

Quemando el cargador de arranque

Una vez que haya hecho esto, puede seguir la sección "Instrucciones" en la guía del ISP desde los pasos 1 al 5.

Algunas cosas para aclarar:

  • Cuando cargue el boceto "Arduino como ISP", debe asegurarse de tener seleccionado el puerto COM y el procesador correctos.

    En este caso, significa que ha seleccionado el puerto COM de su Arduino en Herramientas-> Puerto: COM X (Arduino Uno) y la placa es Arduio Uno

  • Seleccione el programador correcto: en Herramientas-> Programador-> Arduino como ISP.

    NO ArduinoISP o ArduinoISP.org

  • Antes de grabar el cargador de arranque, cambie la placa "Pro o Pro Mini" y el procesador a "ATMEGA328p (3.3V, 8 MHz)".

    No verá la sección del procesador hasta que seleccione el tipo de placa correcto

Grabe el gestor de arranque en el Arduino independiente ANTES de intentar escribir bocetos en él.

Subiendo el boceto

Esto es muy importante. Ahora puede programar Arduino: el Uno y el Independiente. Si no carga en el dispositivo correcto, debe repetir la sección anterior y reescribir Arduino como programa ISP en Uno.

Cuando cargue su boceto, asegúrese de hacer clic en Herramientas -> Cargar usando el programador O haga clic en Ctrl + Shift + U. También puede mantener presionada la tecla Mayús y hacer clic en el icono de flecha, pero no haga clic en el icono de flecha sin mantener presionada la tecla Mayús.

Sugerencias comunes para la resolución de problemas

  • Active la salida detallada para solucionar problemas.
  • "¡El firmante del dispositivo es todo 0!" [Es muy probable que esto ocurra].

    • consulte la sección Cableado del ISP. O ha cableado el Arduino independiente incorrectamente o no está encendido.
    • Asegúrese de haber seleccionado el puerto COM y la placa / procesador correctos. Cuando esté grabando el cargador de arranque, DEBE asegurarse de que está grabando el cargador de arranque Pro Mini 3.3V 8 MHz en él o los fusibles no se ajustarán correctamente.
  • "He editado el archivo boards.txt pero no veo las modificaciones"

    Asegúrese de haber editado el archivo boards.txt correcto. Intente actualizar Arduino IDE si las ediciones no funcionan, o elimine otras carpetas en su carpeta / hardware / temporalmente

  • "¡No encuentro la sección pro mini de boards.txt!"

    No está buscando en el archivo boards.txt correcto. Compruebe la carpeta Arduino // hardware / arduino /

Paso 4: comunicación en serie

4) Supervise el dispositivo independiente a través de la comunicación en serie

Realmente puede hacer esto a través de 2 métodos, por lo que si ni siquiera tiene un cable FTDI / placa de conexión, no es el fin del mundo. Y recuerde, el boceto que cargó en el Arduino independiente debe tener declaraciones Serial.print para que pueda leer: si no lo escribió en el programa, ¡no verá nada!

Si no tiene un cable FTDI

Una vez que haya quemado el gestor de arranque y haya escrito el programa que desee, puede (con mucho cuidado y recordando en qué orientación vuelve) quitar el chip DIP ATMEGA328 del Arduino Uno. Recomiendo usar una cabeza plana para esto.

Puede conectar el RX de Arduino independiente al RX de Uno y el TX a TX. Sí, normalmente es lo contrario, pero puede pensar que el Uno "reenvía" la información al monitor en serie del IDE. Es por eso que no conecta RX a TX y TX ro RX en este caso. Cuando esté ejecutando su programa, asegúrese de tener elegido el puerto COM de Arduino Uno y abra el monitor serial. Podrás ver la salida serial del Arduino independiente.

(Esta solución se acredita aquí a Robin2).

Si tiene un cable / placa FTDI

(Estoy usando la placa FTDI de Sparkfun que he convertido a 3.3V usando la almohadilla de soldadura en la parte posterior)

Simplemente conecte el GND de la placa de conexión a la tierra del Arduino independiente y conecte el RX de la placa de conexión al TX de Arduino y el TX a RX. (Si SOLO está monitoreando en serie y no está escribiendo nada, puede simplemente conectar el RX del panel de pruebas a Arduino TX).

Tenga en cuenta que en este punto tiene la opción de alimentar el Arduino independiente a través del Uno O el cable FTDI. ¡No conecte ambas fuentes de alimentación al mismo tiempo! Tenga en cuenta que tendrá que cambiar el puerto COM, ya que será diferente al puerto COM de Arduino Uno.

Sugerencias comunes para la resolución de problemas

  • "¡No veo nada!"

    • Compruebe si tiene habilitado el puerto COM correcto.
    • Compruebe si tiene los controladores FTDI más recientes.
    • ASEGÚRESE DE QUE LA TIERRA ESTÉ CONECTADA.
  • "¡Todo lo que veo es salida de basura en el monitor serial!"

    • Estás obteniendo algo que es una buena señal.
    • Sin embargo, verifique el voltaje de la placa FTDI.
    • El Arduino independiente está emitiendo 3.3V en su TX y es posible que la placa FTDI no lo recoja si espera 5v.
    • Verifique la velocidad en baudios.
    • ¡Asegúrese de tener conexión a tierra y solo una fuente de alimentación conectada! (Es decir, no encienda el Arduino independiente desde el Uno Y su placa FTDI.

Recomendado: