1 votos

Uso de Arduino Mega como placa de desarrollo Atmega2560 AVR con Atmel Studio 7

(actualizaciones al final)

Calificador: Estoy publicando esto aquí y no en el Arduino Stack Exchange porque mi pregunta es sobre el desarrollo de firmware y no el desarrollo de Arduino.

Proyecto: Estoy diseñando una PCB que utilizará un ATmega2560 como CPU.

¿Por qué? Soy un recién graduado BSEE con mucha más experiencia y habilidad para el hardware que el firmware, así que estoy desafiando a mí mismo con los limitados recursos que tengo disponibles para mejorar mi comprensión de uCs y el desarrollo de firmware.

Recursos: un montón de Arduino Megas, algunos LEDs, cables de puente, Atmel Studio 7 (AS7), Arduino IDE, WinAVR, internet.

Hecho hasta ahora: He realizado el proceso ArduinoISP con éxito. Estos son los pasos que he seguido utilizando el IDE de Arduino...

  1. Subido el sketch de ArduinoISP al Programador Mega.
  2. Adjunto 10uF cap entre reset y gnd en Programmer Mega.
  3. Conexiones ICSP de Target Mega cableadas a Programmer Mega.
  4. Puerto COMM izquierdo ajustado a Programador Mega.
  5. Elige "Arduino as ISP" como programador y pulsa "Burned Bootloader".

Pensamientos: Me doy cuenta ahora como yo estaba escribiendo esto que todo lo que hice fue volver a grabar el Arduino Bootloader en el Mega de destino utilizando el "Arduino como ISP" Programador Mega.

Hecho hasta ahora otra vez: Escrito simple "Blink" programa en AS7. Construye.

AVR Blink

Resultado deseado: Mi Mega objetivo para dejar de ser un Arduino Mega y ser una placa de desarrollo ATmega2560 para que pueda hacer el desarrollo de firmware AVR puro obligándome a hacer todas las cosas difíciles que Arduino se encarga de. Estoy tratando de eliminar todo Arduino del proceso de desarrollo que no sea el hardware utilizado para el desarrollo de firmware y "Arduino como ISP" para la programación flash.

Investigación: Todo lo que he encontrado en línea tiene que ver con el uso de AS7 para codificar un "Arduino" AVR uC.

Preguntas:

  1. ¿Puedo usar el programador "Arduino como ISP" Mega para flashear un ATMega2560 en un Arduino Mega sin el Arduino Bootloader en dicho ATMega2560?
  2. ¿Es AVR-GCC lo que utilizaré para generar el archivo binario a partir del código fuente en C que luego flashearé?
  3. ¿Mi ejemplo "Blink" de arriba utiliza algo "Arduino"?
  4. ¿Estoy en lo cierto al pensar que si consigo que mi Arduino Mega no sea reconocido por el IDE de Arduino, pero aún así puedo grabarle código y controlarlo, habré conseguido el "resultado deseado"?

ACTUALIZACIÓN: Estaba teniendo problemas para configurar AVRDude como una herramienta externa en AS7. Seguí todas las instrucciones que pude encontrar cuidadosamente y la salida sólo estaría en blanco. Me di cuenta de que era porque tenía el IDE de Arduino instalado como una aplicación de Windows por lo que AS7 no podía seguir la ruta AVRdude.exe. Ahora estoy teniendo problemas con la apertura AVRdude.conf pero extasiado por lo menos tuve un pequeño éxito.

ACTUALIZACIÓN2: Tenía la ruta equivocada para AVRdude.conf. Usando el IDE de Arduino con la opción "verbose output for upload" seleccionada subí código en blanco y la línea superior del mensaje de salida contenía las rutas que necesitaba.

ACTUALIZACIÓN3: Estaba recibiendo el clásico error stk500_getsync():not in sync y era un problema de velocidad de transmisión. Tenía 115200 que estoy bastante seguro de que es la velocidad de transmisión que Arduino IDE utiliza para cargar un boceto a un Mega, pero el gestor de arranque se quema a una velocidad de 19200 baudios. Desde que estoy usando "Arduino como ISP" se está quemando toda la memoria flash no sólo cargar el código fuente. (Nota: Todavía estaba teniendo problemas de sincronización, incluso después de cambiar la velocidad de transmisión y fue porque las conexiones de la tapa de desacoplamiento en el pin de reinicio del Programador Mega eran incompletas. Doblé los extremos de las patas para que encajara mejor en los cabezales del Mega).

ACTUALIZACIÓN4: Mi programador ArduinoISP funciona pero mi objetivo sigue sin parpadear. Estudié la salida de AVRdude y vi que no podía encontrar el archivo main.hex. Miré en el directorio del proyecto de Atmel studio y no hay archivo main.hex. En el argumento de la herramienta externa tuve que cambiar ItemFileName.hex por TargetName.hex. Así que carga con éxito, pero mi objetivo todavía no parpadea.

ACTUALIZACIÓN5: ¡¡¡¡¡SE BLOQUEA!!!!! Así que me di por vencido en mi búsqueda inicial y trató de hacer sólo un Arduino Mega parpadeo utilizando el otro como un programador ISP. Me di cuenta de que AVRdude lee los valores de los fusibles antes de escribirlos, así que cogí un Arduino Mega que sabía que todavía estaba configurado como Arduino y le cargué mi programa de parpadeo. No empezó a parpadear, pero cogí los valores de los fusibles que leía y los incluí en el argumento de mi herramienta externa. Volví a cargar y huzzah mi mega parpadea. Este es mi argumento (también encontré esto genial enlace que ayuda a entender todo en el argumento)

-U lfuse:w:0xFF:m -U hfuse:w:0xD8:m -U efuse:w:0xFD:m -e -v -patmega2560 -carduino -PCOM11 -b19200 -D -Uflash:w:" $(ProjectDir)Debug\$ (TargetName).hex":i -C "C:\Program Files (x86)\Arduino\hardware\tools\avr/etc/avrdude.conf"

Próximos pasos: Averiguar cómo obtener una sesión de depuración activa en AS7 con el depurador en chip de ATmega2560 (ahora me dirijo a la hoja de datos).

2voto

Farjaad _97 Puntos 1
  1. Claro que sí. Yo nunca he hecho esto, pero Arduino-ISP es compatible con AVRDude. Echa un vistazo a este para más detalles. Incluso la línea de comandos correcta se menciona allí.

  2. Sí, puede hacerlo, por supuesto. Personalmente, incluso prefiero la cadena de herramientas GNU (en la que se incluye avr-gcc) sobre Atmel Studio. Si eliges llamar al compilador manualmente, probablemente querrás usar también un Makefile. Hay ejemplos en la carpeta WinAVR.

  3. Tu ejemplo no utiliza ningún código fuente de Arduino ni llamadas a funciones. Parece perfectamente bien excepto por esta línea: PORTB &= (1 << PB7) . Debería ser así: PORTB &= ~(1 << PB7) . Creo que deberías ser capaz de averiguar por qué.
    Ya que alguien mencionó los símbolos predefinidos y las librerías: Las librerías que usas no son específicas de Arduino, sino de uso común para AVRs en general. Definen las direcciones de los registros del procesador y otras cosas útiles. Dado que Arduino está construido sobre estas mismas librerías, puede ser un poco confuso averiguar esto, pero puedes hacer la prueba tú mismo: Si tu código compila bien con avg-gcc o en Atmel Studio y no incluiste explícitamente #include <Arduino.h> lo has hecho "por las malas" sin la ayuda de Arduino.

  4. Creo que tu Arduino Mega siempre será detectado como tal por tu ordenador, ya que la comunicación USB se realiza mediante un chip separado en la placa Arduino. Sin embargo, si usted es capaz de compilar y cargar el código anterior a la ATmega2560 fuera del IDE de Arduino y se ejecuta como se esperaba, puede estar seguro de que ha eliminado con éxito Arduino.

Algunas notas al margen:

  • El desarrollo de AVR SIN Atmel Studio parece más fácil en una máquina Linux, pero no es imposible en Windows. Si decides usar Atmel Studio, estás atado a Windows, pero no necesitas manejar el proceso de construcción completamente por tu cuenta.
  • Un programador dedicado facilita las cosas, pero tu solución Arduino-ISP también funciona.
  • También podrías probar otros AVR en una protoboard. De esta forma, verás fácilmente las diferencias de hardware entre un AVR puro y una placa Arduino. Yo recomendaría un ATmega328p, similar al utilizado por el Arduino Uno.

0voto

e-r Puntos 11

Una vez que tengas el archivo .hex creado, puedes cargarlo a través de los pines SPI (SCK, MOSI, MISO, Reset, Power, Gnd) usando un Programador. Un Programador toma el Reset bajo y entonces accede a la memoria y a los fusibles más o menos directamente. Los fusibles tienen que ser configurados para que coincidan con el entorno de hardware para la fuente de reloj para uno, y para la dirección de inicio a utilizar para otra cosa (sólo software, gestor de arranque + software, tamaño del gestor de arranque).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X