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.