Identificare modello Arduino

Se io facessi un firmware che può girare tanto su arduino mega1280 quanto su arduino mega2560 quanto su arduino uno/2009 (con atmega328) come faccio, che voi sappiate, a sapere quale processore monta questa scheda? Quale ATMEL? Mi pare che l'IDE imposta una variabile costante o qualcosa del genere....lo sapete?

Non capisco il Tuo desiderio.
Vuoi che il IDE riconosca in automatico quale scheda é collegata oppure hai un Arduino e non sai che controller monta?
L'arduino non ha un firmware; ha un bootloader che si attiva dopo un reset e controlla se é da caricare un programma; gestisce il caricamento, salta nel programma e non viene piú chiamato.

Non puoi compilare un sketch che funzioni sia sul ATmega328 che sul ATmega1280/2560.

Ciao Uwe

Non mi sono spiegato!

Lo sketch lo sò che lo devo compilare differentemente se per installarlo su Uno o su Mega, ma il software può essere lo stesso, ma ricompilato due volte: la 1° per Uno, la 2° per Mega!!

E all'interno dello sketch ho bisogno di sapere qual è la macchina su cui se stesso sta girando, perchè lo deve comunicare al server (via Ethernet Shield) che deve capire tramite il "modello di CPU" quanti In/Out possiede e quanta RAM/EEPROM ha!

Basta che inserisci un codice che invia una stringa differente in base all'arduino collegato. Quando carichi lo sketch inserisci poi la stringa corretta. Fai cioè una stringa di benvenuto che contiene tale dato.

Dal codice ATmegaBOOT_168.c:

/* define various device id's */

/* manufacturer byte is always the same */

#define SIG1	0x1E	// Yep, Atmel is the only manufacturer of AVR micros.  Single source :(



#if defined __AVR_ATmega1280__

#define SIG2	0x97

#define SIG3	0x03

#define PAGE_SIZE	0x80U	//128 words



#elif defined __AVR_ATmega1281__

#define SIG2	0x97

#define SIG3	0x04

#define PAGE_SIZE	0x80U	//128 words



#elif defined __AVR_ATmega128__

#define SIG2	0x97

#define SIG3	0x02

#define PAGE_SIZE	0x80U	//128 words



#elif defined __AVR_ATmega64__

#define SIG2	0x96

#define SIG3	0x02

#define PAGE_SIZE	0x80U	//128 words



#elif defined __AVR_ATmega32__

#define SIG2	0x95

#define SIG3	0x02

#define PAGE_SIZE	0x40U	//64 words



#elif defined __AVR_ATmega16__

#define SIG2	0x94

#define SIG3	0x03

#define PAGE_SIZE	0x40U	//64 words



#elif defined __AVR_ATmega8__

#define SIG2	0x93

#define SIG3	0x07

#define PAGE_SIZE	0x20U	//32 words



#elif defined __AVR_ATmega88__

#define SIG2	0x93

#define SIG3	0x0a

#define PAGE_SIZE	0x20U	//32 words



#elif defined __AVR_ATmega168__

#define SIG2	0x94

#define SIG3	0x06

#define PAGE_SIZE	0x40U	//64 words



#elif defined __AVR_ATmega328P__

#define SIG2	0x95

#define SIG3	0x0F

#define PAGE_SIZE	0x40U	//64 words



#elif defined __AVR_ATmega162__

#define SIG2	0x94

#define SIG3	0x04

#define PAGE_SIZE	0x40U	//64 words



#elif defined __AVR_ATmega163__

#define SIG2	0x94

#define SIG3	0x02

#define PAGE_SIZE	0x40U	//64 words



#elif defined __AVR_ATmega169__

#define SIG2	0x94

#define SIG3	0x05

#define PAGE_SIZE	0x40U	//64 words



#elif defined __AVR_ATmega8515__

#define SIG2	0x93

#define SIG3	0x06

#define PAGE_SIZE	0x20U	//32 words



#elif defined __AVR_ATmega8535__

#define SIG2	0x93

#define SIG3	0x08

#define PAGE_SIZE	0x20U	//32 words

#endif

queste definizioni sono in avr-libc e vengono definite automaticamente grazie all'argomento -D da passare al compilatore, ma questo lo fa arduino ide in automatico.

Ciao.