Saltar al contenido

¿Cómo puedo detectar qué placa arduino (o qué controlador) en el software?

Solución:

Tiempo de ejecución

Que yo sepa, no puede detectar el tipo de placa, pero puede leer la ID del dispositivo ATmega. Compruebe esta pregunta cómo se puede hacer: ¿Se puede leer la firma de un dispositivo ATmega o ATtiny mientras se ejecuta? Sin embargo, tenga en cuenta que al usar este método, cambiarán varias asignaciones de registros, no solo el pinout. Por lo tanto, su código puede volverse significativamente más complejo. La ventaja es que si se las arregla para evitar todas las asignaciones de registro cambiantes y otras dependencias de hardware, puede usar un solo archivo .hex para programar sus dispositivos directamente desde avrdude.

Tiempo de compilación

Otra forma de averiguar el tipo de placa / controlador es en tiempo de compilación. Básicamente, compila partes del código o establece macros según el tipo de dispositivo configurado en el IDE de Arduino. Consulte este fragmento de código para ver un ejemplo:

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
#define DEBUG_CAPTURE_SIZE 7168
#define CAPTURE_SIZE 7168
#elif defined(__AVR_ATmega328P__)
#define DEBUG_CAPTURE_SIZE 1024
#define CAPTURE_SIZE 1024
#else
#define DEBUG_CAPTURE_SIZE 532
#define CAPTURE_SIZE 532
#endif

El fragmento de código se copió descaradamente de https://github.com/gillham/logic_analyzer/wiki Verifique ese código para ver algunos trucos más específicos del dispositivo.

Dependiendo del sistema operativo de su host, los tipos de controlador admitidos se pueden encontrar en el siguiente archivo:

  • Linux: /usr/lib/avr/include/avr/io.h
  • Ventanas: ...Arduinohardwaretoolsavravrincludeavrio.h

El uso del preprocesador C (mediante el cual se maneja el código anterior) probablemente esté fuera del alcance de este sitio. http://stackoverflow.com sería el mejor lugar para preguntas detalladas.

Si está en Linux, puede encontrar fácilmente todos los tipos de controladores compatibles escribiendo:

grep 'defined (__AVR' /usr/lib/avr/include/avr/io.h | sed 's/^[^(]*(([^)]*))/1/'

Como se indica en la especificación de hardware de Arduino, el IDE de Arduino ahora define una macro para cada placa, como se define en boards.txt build.board propiedad. Ese valor se agrega a ARDUINO_ así, por ejemplo, las macros para los tableros que le interesan son:

  • Uno: ARDUINO_AVR_UNO
  • Mega 2560: ARDUINO_AVR_MEGA2560
  • Vencer: ARDUINO_SAM_DUE

Ejemplo de cómo puede usar estas macros en su código:

#if defined(ARDUINO_AVR_UNO)
//Uno specific code
#elif defined(ARDUINO_AVR_MEGA2560)
//Mega 2560 specific code
#elif defined(ARDUINO_SAM_DUE)
//Due specific code
#else
#error Unsupported hardware
#endif

Una forma fácil de rastrear la placa es usar una biblioteca como ArduinoManager. Con esto, puede obtener fácilmente el nombre y las características de la placa https://github.com/backupbrain/ArduinoBoardManager

Utiliza la técnica descrita anteriormente para revelar mucha información sobre casi todas las placas Arduino, por lo que es excelente para hacer proyectos que pueden implementarse en muchos entornos diferentes.

Simplemente descargue e inclúyalo en su proyecto Arduino.

#include "ArduinoBoardManager.h"

ArduinoBoardManager arduino = ArduinoBoardManager(); // required if you want to know the board name and specific features

void setup() {
  Serial.begin(9600);

  Serial.print("Board is compatible with Arduino ");
  Serial.println(arduino.BOARD_NAME);

  Serial.println("Speed/SRAM/Flash: ");
  Serial.print(ArduinoBoardManager::MAX_MHZ);
  Serial.println(ArduinoBoardManager::SRAM_SIZE);
  Serial.println(ArduinoBoardManager::FLASH_SIZE);

  // Board features (multiple serial ports on Mega, for example)
  if (arduino.featureExists(ArduinoBoardManager::FEATURE_MULTIPLE_SERIAL)) {
    Serial.println("Your board supports multiple serial connections");
  }

}

void loop() {
}

La salida resultante en Arduino Uno es:

Board is compatible with Arduino UNO

Speed/SRAM/Flash: 
16000000
2048
33554432

El proceso para hacer esta biblioteca (incluido el código de ejemplo) para determinar un modelo y versión de placa Arduino se describe en detalle en mi blog.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *