¿Cómo se debe pasar de usar un Arduino como programador a un programador externo?

La segunda parte de una serie de tres partes sobre la transición de Arduino a un microcontrolador AVR simple y los componentes de soporte mínimos ( parte uno , parte tres )

He visto a mucha gente preguntar esto en Internet, así que aquí va:

Ya sé programar y usar un barebones ATmega328 con un Arduino como programador . Ahora quiero empezar a usar un programador externo con el IDE de Arduino.

¿Cómo debo proceder en esta transición? ¿Qué debo aprender? (Sería bueno si se proporcionara un mini-tutorial para algunas de las porciones como parte de la respuesta)

+1, un excelente candidato para una pregunta de referencia, espero algunas respuestas bien estructuradas y detalladas que sean fáciles de seguir para un principiante, y no respuestas de "grabado en un tablero".
Estoy confundido. Quiere pasos para pasar de una metodología a otra. ¿Qué esperas como respuesta? Los tutoriales para usar directamente un programador externo están bien, los tutoriales reales.
@AshRj: La transición y comenzar de nuevo son dos cosas diferentes. Si uno sabe cómo usar un Arduino, necesitará saber cuáles serán las diferencias en los distintos códigos (y los conceptos básicos del uso de un programador).
@Manishearth ¿Qué quiere decir con 'sin gestor de arranque'?
@Polar: Básicamente, no quiero que el cargador de arranque de Arduino esté allí para ayudarme (lo que sucede si usa un Arduino como programador), solo quiero un ATmega simple en el que todo el código sea mi código.
@Manishearth Entonces, ¿está buscando solo 1 y 0 proporcionados por usted (es decir, para aprovechar al máximo la memoria disponible)?
@Manishearth EDITAR: Creo que acabo de encontrar un método con Google :) Si puedo entenderlo, lo publicaré como respuesta.
@Polar: Por supuesto, habrá un compilador en el medio. Cuando normalmente codifica un Arduino, es a través de UART (Rx/Tx) porque el cargador de arranque le permite hacer esto. Por otro lado, si usa un programador externo, no necesita el cargador de arranque Arduino (puede escribir el suyo propio), ya que lo programa a través de IRS (MISO/MOSI/SCK),
@Manishearth No te preocupes, sabía que necesitarías un compilador. Solo quería aclarar lo que quiso decir sin un cargador de arranque: hay una parte en el sitio de Arduino aquí con instrucciones. Entonces, ¿para qué sirve realmente el gestor de arranque? ¿Es exactamente lo mismo que su equivalente principal (es decir, computadora)?
@Polar: podría cargar un programa directamente en los bits iniciales de la memoria del programa si quisiera. Básicamente, el gestor de arranque de Arduino comprueba primero si se envían datos a través de UART (si los hay, se reprograma con el programa que se envía). Si no lo hay, ejecuta el último programa cargado. No es necesario. Puedo simplemente escribir un cargador de arranque simple que diga "ir a la ubicación de memoria X y comenzar a ejecutar". O bien, podría simplemente escribir el programa donde estaba el gestor de arranque.
¿Hasta qué punto quieres el tutorial? ¿Sería compilar el archivo hexadecimal con el IDE, encontrar el archivo hexadecimal y luego usar un programador como USBtiny? Creo que la pregunta podría ser un poco más generalizada y útil si fuera "¿Cómo uso un programador externo con una placa Arduino?" Me parece que eso es lo que buscas y sé que otros hacen lo mismo (soy uno de ellos).
@JamesC4S: Sí, eso. Por cierto, como mencioné, si el tutorial fuera demasiado largo, algunos enlaces y una idea general de la situación estarían bien.
@Manishearth ¿El mini-tutorial que proporcioné ayudó en algo?
@Manishearth Creo que sería útil aclarar que la pregunta (como ha evolucionado) es usar el IDE de Arduino pero con un programador externo. Me tomó un minuto entender la pregunta tal como está ahora.
@Robert: Sí, eso es porque mi intención original era que las partes 1 y 2 estuvieran en esta pregunta. Todavía los estoy arreglando, los dividí después de obtener la respuesta.
@Robert: Aclarado :)

Respuestas (1)

Nota: este minitutorial se basa en la información oficial aquí en el sitio de Arduino. También implica el uso del IDE oficial de Arduino.

Nota 2: Los enlaces proporcionados a los productos pueden ser enlaces de Farnell (ya que contienen hojas de datos) o las páginas reales del producto en el sitio web del fabricante.


Paso 1: Obtenga un programador externo

Lo primero que hay que tener en cuenta es que necesitas un programador externo para evitar el bootloader y recuperar los 1K o 2K de memoria que ocupa (12,5% de la memoria total ). Puede usar un AVR-ISP , un STK-500 o un programador de puerto paralelo; el sitio oficial de Arduino tiene instrucciones para esto aquí . Tenga en cuenta que no puede comunicarse con la placa a través del programador paralelo; el consejo es usar un cable serie para eso. El principal beneficio de usar un programador paralelo es que son mucho más baratos que los demás si está dispuesto a soldar un poco; solo necesita algunas (3) resistencias y algunos conectores, mientras que un ISP puede configurarlo de nuevo. a £30/$50 (la tasa de conversión es aproximada).


Paso 2: edite el archivo de preferencias de Arduino

A continuación, deberá configurar el IDE de Arduino para permitirle eludir el gestor de arranque. ¡Asegúrate de NO tener abierto el IDE de Arduino! El archivo de preferencias preferences.txtse puede encontrar en las siguientes ubicaciones, según su sistema operativo:

  • C:\Documents and Settings\<Username>\Application Data\Arduino\preferences.txt(ventanas)
  • /Users/<Username>/Library/Arduino/preferences.txt(Mac)
  • ~/.arduino/preferences.txt(linux)

Para acceder al archivo de preferencias en Windows, vaya al menú de inicio y luego vaya a %appdata%(NB: no uso Windows regularmente, no dude en corregirme). Luego navegue a Arduino y luego apreferences.txt

En Mac, usa Terminal y haz lo siguiente:

cd ~/Library/Arduino
open .

O en Finder, use Ir a (Cmd-Shift-G) e ingrese ~/Library/Arduino. Ambos te llevan a una ventana del Finder con preferences.txtin.

En los sistemas Unix, las carpetas que comienzan con '.' (como .cache, .git) están ocultos de forma predeterminada, por lo que en Linux deberá usar la Terminal e ingresar:

cd ~/.arduino
nautilus .

Nota: Puede reemplazar nautilus con gnome-open si lo desea. Sé que ambos funcionan en las versiones comunes de Linux, pero es posible que tenga problemas con algunas de las versiones más "exóticas".

Una vez que haya encontrado el preferences.txtarchivo, ábralo y cambie el upload.usingde bootloaderal nombre de uno de los programadores en el ./hardware/programmers.txtsubdirectorio. Si solo desea eliminar el gestor de arranque de una placa, ./hardware/boards.txtpuede cambiar el <board>.upload.usingparámetro y todas las demás placas seguirán utilizando el gestor de arranque. Luego simplemente guarde el archivo relevante y ciérrelo (mi Arduino se bloqueó y casi pierdo la respuesta, posiblemente porque olvidé hacer esto).


Paso 3: sube el boceto

Una vez que haya editado el archivo relevante, abra el IDE de Arduino nuevamente y cargue el boceto como de costumbre. Si acaba de editar ./hardware/boards.txt, entonces solo ese tablero en particular no tendrá el cargador de arranque, pero si editó preferences.txt, todos los tableros no tendrán el cargador de arranque.


Paso 4: Reemplace el gestor de arranque

Si desea volver a tener el cargador de arranque en sus tableros (por cualquier motivo), primero elimine el <board>.upload.usingparámetro o upload.usingvuelva a configurarlo bootloader. Luego, deberá volver a grabar el cargador de arranque en las placas afectadas; esta respuesta explica razonablemente bien un método para hacerlo, y hay un método más fácil para cargar el cargador de arranque Arduino solo con un ISP (que debería tener desde antes) en el sitio oficial aquí .

Supongo que no estaba claro, edité la pregunta para que esto fuera evidente: quería descartar más o menos el IDE por completo (lo que significa que tienes que aprender otro lenguaje de programación. Sin embargo, como ya has publicado una respuesta, yo Es posible que solo haga eso como una pregunta separada.
@Manishearth Ah, lo editaré para reflejar eso si quieres. Por otra parte, nos vendría bien más preguntas...
Le preguntaré a otra, esto se volverá demasiado amplio si meto eso.
@Manishearth Está bien :)