Aggiungere una MCU compatibile all'IDE

Un paio di anni fa misi a punto una tecnica per usare l'ATmega328 (senza la P finale) al posto dell'ATmega328P (quello di Arduino UNO/Duemilanove). Ho ripreso la cosa per risolvere l'ultimo problema. Mi spiego. Attualmente ho configurato AVRDUDE.CONF affinché sia riconosciuto l'ATmega328; in queste condizioni ho replicato la board Arduino, cambiando la sola mcu (ho tolto la "p") e riesco a caricare il bootloader "optiboot" di Arduino UNO. Poi inserisco il chip al posto dell'originale di Arduino UNO, ma se tento di inviare uno sketch tramite IDE/USB ottengo un errore di non riconoscimento dell'MCU e relativo elenco delle MCU riconosciute. Però se seleziono Arduino UNO originale (con il 328P) tutto funziona regolarmente. Quindi la modifica dell'AVRDUDE.CONF risolve il problema del caricaento del bootloader ma non quello del successivo caricamento dello sketch. Per dare una dritta importante a chi volesse aiutare, basta fare una semplicissima prova: 1 - aprire il file boards.txt (con IDE chiusa) e alla voce "uno.build.mcu=atmega328p" della board di Arduino UNO togliere la "p" finale 2 - eseguire ora IDE, aprire il solito blink e lanciare la sola compilazione. 3 - esce immediatamente un errore di mcu non riconosciuta ed un elenco di quelle riconosciute.

Ecco, a me serve poter aggiungere qualche voce in quell'elenco, ma non so dov'è né come si fa, posso solo dire che avrdude.conf non c'entra nulla; credo che sia il programma di compilazione, non so nient'altro.

x iscrizione

Avrdude.conf contiene tutti i parametri necessari ad avrdude per poter inviare correttamente un firmware, per poter cambiare un fuse o quant'altro. Contiene infatti gli indirizzi dei registri, la dimensione delle memorie, i parametri per poter scrivere sul micro, la sua firma ecc...

Questo è quello per un 328P:

#------------------------------------------------------------
# ATmega328P
#------------------------------------------------------------

part
    id            = "m328p";
    desc      = "ATMEGA328P";
    has_debugwire = yes;
    flash_instr       = 0xB6, 0x01, 0x11;
    eeprom_instr  = 0xBD, 0xF2, 0xBD, 0xE1, 0xBB, 0xCF, 0xB4, 0x00,
              0xBE, 0x01, 0xB6, 0x01, 0xBC, 0x00, 0xBB, 0xBF,
              0x99, 0xF9, 0xBB, 0xAF;
    stk500_devcode    = 0x86;
    # avr910_devcode  = 0x;
    signature     = 0x1e 0x95 0x0F;
    pagel     = 0xd7;
    bs2           = 0xc2;
    chip_erase_delay  = 9000;
    pgm_enable = "1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 1",
         "x x x x x x x x x x x x x x x x";

    chip_erase = "1 0 1 0 1 1 0 0 1 0 0 x x x x x",
         "x x x x x x x x x x x x x x x x";

    timeout   = 200;
    stabdelay = 100;
    cmdexedelay   = 25;
    synchloops    = 32;
    bytedelay = 0;
    pollindex = 3;
    pollvalue = 0x53;
    predelay  = 1;
    postdelay = 1;
    pollmethod    = 1;

    pp_controlstack =
    0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
    0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
    0x66, 0x76, 0x67, 0x77, 0x6A, 0x7A, 0x6B, 0x7B,
    0xBE, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay  = 100;
    progmodedelay = 0;
    latchcycles       = 5;
    togglevtg     = 1;
    poweroffdelay = 15;
    resetdelayms  = 1;
    resetdelayus  = 0;
    hvleavestabdelay  = 15;
    resetdelay        = 15;
    chiperasepulsewidth   = 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

    memory "eeprom"
    paged       = no;
    page_size   = 4;
    size        = 1024;
    min_write_delay = 3600;
    max_write_delay = 3600;
    readback_p1 = 0xff;
    readback_p2 = 0xff;
    read = " 1 0 1 0 0 0 0 0",
           " 0 0 0 x x x a9 a8",
           " a7 a6 a5 a4 a3 a2 a1 a0",
           " o o o o o o o o";

    write = " 1 1 0 0 0 0 0 0",
             " 0 0 0 x x x a9 a8",
        " a7 a6 a5 a4 a3 a2 a1 a0",
        " i i i i i i i i";

    loadpage_lo = " 1 1 0 0 0 0 0 1",
              " 0 0 0 0 0 0 0 0",
              " 0 0 0 0 0 0 a1 a0",
              " i i i i i i i i";

    writepage = " 1 1 0 0 0 0 1 0",
            " 0 0 x x x x a9 a8",
            " a7 a6 a5 a4 a3 a2 0 0",
            " x x x x x x x x";

    mode        = 0x41;
    delay       = 20;
    blocksize   = 4;
    readsize    = 256;
    ;

    memory "flash"
    paged       = yes;
    size        = 32768;
    page_size   = 128;
    num_pages   = 256;
    min_write_delay = 4500;
    max_write_delay = 4500;
    readback_p1 = 0xff;
    readback_p2 = 0xff;
    read_lo = " 0 0 1 0 0 0 0 0",
          " 0 0 a13 a12 a11 a10 a9 a8",
          " a7 a6 a5 a4 a3 a2 a1 a0",
          " o o o o o o o o";

    read_hi = " 0 0 1 0 1 0 0 0",
          " 0 0 a13 a12 a11 a10 a9 a8",
          " a7 a6 a5 a4 a3 a2 a1 a0",
          " o o o o o o o o";

    loadpage_lo = " 0 1 0 0 0 0 0 0",
              " 0 0 0 x x x x x",
              " x x a5 a4 a3 a2 a1 a0",
              " i i i i i i i i";

    loadpage_hi = " 0 1 0 0 1 0 0 0",
              " 0 0 0 x x x x x",
              " x x a5 a4 a3 a2 a1 a0",
              " i i i i i i i i";

    writepage = " 0 1 0 0 1 1 0 0",
            " 0 0 a13 a12 a11 a10 a9 a8",
            " a7 a6 x x x x x x",
            " x x x x x x x x";

    mode        = 0x41;
    delay       = 6;
    blocksize   = 128;
    readsize    = 256;

    ;

    memory "lfuse"
    size = 1;
    min_write_delay = 4500;
    max_write_delay = 4500;
    read = "0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0",
           "x x x x x x x x o o o o o o o o";

    write = "1 0 1 0 1 1 0 0 1 0 1 0 0 0 0 0",
             "x x x x x x x x i i i i i i i i";
    ;

    memory "hfuse"
    size = 1;
    min_write_delay = 4500;
    max_write_delay = 4500;
    read = "0 1 0 1 1 0 0 0 0 0 0 0 1 0 0 0",
           "x x x x x x x x o o o o o o o o";

    write = "1 0 1 0 1 1 0 0 1 0 1 0 1 0 0 0",
             "x x x x x x x x i i i i i i i i";
    ;

    memory "efuse"
    size = 1;
    min_write_delay = 4500;
    max_write_delay = 4500;
    read = "0 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0",
           "x x x x x x x x x x x x x o o o";

    write = "1 0 1 0 1 1 0 0 1 0 1 0 0 1 0 0",
             "x x x x x x x x x x x x x i i i";
    ;

    memory "lock"
    size = 1;
    min_write_delay = 4500;
    max_write_delay = 4500;
    read = "0 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0",
           "x x x x x x x x x x o o o o o o";

    write = "1 0 1 0 1 1 0 0 1 1 1 x x x x x",
             "x x x x x x x x 1 1 i i i i i i";
    ;

    memory "calibration"
    size = 1;
    read = "0 0 1 1 1 0 0 0 0 0 0 x x x x x",
           "0 0 0 0 0 0 0 0 o o o o o o o o";
    ;

    memory "signature"
    size = 3;
    read = "0 0 1 1 0 0 0 0 0 0 0 x x x x x",
           "x x x x x x a1 a0 o o o o o o o o";
    ;
;

Certo, se togli una "P" fai pochi danni perché a parte perderti le funzioni del core Picopower, poi tutto il resto è uguale. Ma aggiungere una MCU che non è presente diventa un altro paio di maniche, devi conoscere tutti quei parametri. Quindi, certo che avrdude.conf c'entra: altrimenti come può avrdude "sapere" come accedere a quella MCU?

E poi va visto se il compilatore supporta questa MCU. E poi serve un core da inserire nell'IDE di Arduino, ma questo è un altro paio di maniche. Discorso fatto

[quote author=Michele Menniti link=topic=202624.msg1493202#msg1493202 date=1386111149] Ecco, a me serve poter aggiungere qualche voce in quell'elenco, ma non so dov'è né come si fa, posso solo dire che avrdude.conf non c'entra nulla; credo che sia il programma di compilazione, non so nient'altro. [/quote]

C'è un problema di fondo per il 328 senza p, e ne avevamo già parlato molti mesi fa, il suo core è leggermente diverso da quello del 328p, ovvero ci sono differenze nel set di istruzioni assembly, in particolare la jmp e la call che esistono solo su i processori con la p. L'avrgcc utilizzato da Arduino non supporta il 328 e anche se è possibile compilare per questo usando il 328p non vi è certezza che poi il programma funziona correttamente. Diverso è il discorso per il 1284 e 1284p dove il core è identico, ovvero il set di istruzioni assembly è lo stesso, nel primo semplicemente non sono disponibili i registri per il picopower, cosa che va gestita a cura di chi realizza il software quindi ininfluente ai fini della compilazione, male che vada il 1284 semplicemente non entra in sleep a bassissimo consumo. Detto in altre parole, non è possibile usare il 328 senza p per Arduino, che poi si può forzare la cosa ignorando la differenza dei core compilando per 328p e facendo affidamento sul fatto che spesso la cosa funziona lo stesso è un conto, però non è il modo corretto di fare le cose.

Allora, grazie per gli interventi, la mia richiesta si basa su due dati di fatto: 1 - Quando ho trovato il modo di mettere il bootloader sul 328 e di poterlo utilizzare con Arduino, c'era un utente che ne aveva comprati e venduti a decine; ho avuto moltissimi riscontri positivi sul buon funzionamento del micro, anche se privo delle funzioni picopower. Aggiungo che Niki77 fece delle prove estremamente approfondite dimostrando che quel paio di funzioni mancanti (o apparentemente tali) non creavano problemi a compilazione e funzionamento, ma non chiedetemi altro.... Quindi non dovendo produrre nulla di industriale a me sta bene così 2 - Per il 1284 invece ho il placet di Astro e questo mi basta e avanza.

@ Leo: [ti devo una mail... te la mando dopo]: in AVRDUDE bastano 5 righe aggiuntive con parametri che mi sono noti, quello è un problema già risolto, ma riguarda esclusivamente il bootloader, in generale il caricamento di un file già compilato. Purtroppo il compilatore NON FA RIFERIMENTO a avrdude.conf e quindi il suo "aggiornamento" segue per forza di cose una strada diversa, che non conosco e che vorrei conoscere. Riguardo gli altri dubbi che hai espresso: 1 - il compilatore è ASSOLUTAMENTE compatibile con i due modelli di mio interesse (notizia certa!) 2 - non ho bisogno di alcun core aggiuntivo in quanto sono più che sufficienti quelli di Arduino UNO per il 328 e quello di Sanguino o Mighty per il 1284.

In definitiva, cari amici, ciò che Vi chiedo nasce da certezze quasi assolute, quindi non dovete cercare di dissuadermi con motivazioni tecniche, perché sono questioni già affrontate e risolte. Dovreste aiutarmi a capire DOVE è localizzato l'elenco delle mcu accettate dal compilatore e come questo elenco può essere aggiornato, tutto il resto non mi è utile. Potete aiutarmi in tal senso?

[quote author=Michele Menniti link=topic=202624.msg1493634#msg1493634 date=1386148924] Dovreste aiutarmi a capire DOVE è localizzato l'elenco delle mcu accettate dal compilatore e come questo elenco può essere aggiornato, tutto il resto non mi è utile. Potete aiutarmi in tal senso? [/quote]

Non puoi semplicemente aggiornare l'elenco delle mcu supportate dal compilatore, non si tratta solo di qualche parametro relativo ad indirizzi, velocità dimensioni memoria come nel caso di avrdude, il compilatore deve sapere tutto del micro, sopratutto deve sapere quali sono le istruzioni assembly disponibile e cosa fanno. In pratica ti serve un compilatore che supporta anche il 328 senza p per avere la certezza al 100% che i programmi funzioneranno sempre senza sorprese strane. So perfettamente che c'è chi ha fatto svariate prove con il 328 compilando per il 328p senza riscontrare, apparentemente, problemi, però la domanda da 1.000.000 di Euro è "come puoi avere la certezza che la cosa sia fattibile sempre e comunque ?", che i due core sono differenti è un dato di fatto, non una congettura, mentre per il 1284 e 1284p i due core sono perfettamente identici il che rende possibile compilare per il 1284 con il 1284p con la certezza che non ci saranno mai problemi, anche se usi i due registri mancanti nel 1284 non succede nulla, semplicemente non puoi usare le modalità picopower.

Va bene, lasciamo perdere il 328, che poi in realtà mi è servito solo come base di partenza; sul 1284 invece non ci sono problemi. Allora resta la questione iniziale: allo stato attuale devo usare una board basata sul 1284 per caricare il bootloader e poi una basata sul 1284p per caricare lo sketch. Io voglio superare la necessità di usare due board diverse. Per raggiungere tale scopo devo per forza spiegare al compilatore che il 1284p ed il 1284 sono identici e che può stare tranquillo. C'è un modo per farlo? :sweat_smile:

[quote author=Michele Menniti link=topic=202624.msg1493711#msg1493711 date=1386151925] Per raggiungere tale scopo devo per forza spiegare al compilatore che il 1284p ed il 1284 sono identici e che può stare tranquillo. C'è un modo per farlo? :sweat_smile: [/quote]

No, al compilatore devi dire che è un 1284p, non puoi in nessun modo cambiare questa cosa, a meno che non ti va di metterti a leggere i sorgenti del avrgcc e "divertirti" ad aggiungere al parser anche ATMEGA1284 e lo dichiari identico al 1284p, buon divertimento :grin: Come ti avevo già suggerito l'unica soluzione possibile è vedere se esiste un modo, dalla board virtuale di Arduino, per passare a avrdude un nome processore diverso da quello del compilatore, il problema è tutto qui. Non mi pare di avere mai visto un elenco di tutte le possibili opzioni della board virtuale, ovviamente sono dipendenti dalla versione dell'IDE, magari un modo c'è per fare questa "magia" :)

astrobeed: [quote author=Michele Menniti link=topic=202624.msg1493711#msg1493711 date=1386151925] Per raggiungere tale scopo devo per forza spiegare al compilatore che il 1284p ed il 1284 sono identici e che può stare tranquillo. C'è un modo per farlo? :sweat_smile:

No, al compilatore devi dire che è un 1284p, non puoi in nessun modo cambiare questa cosa, a meno che non ti va di metterti a leggere i sorgenti del avrgcc e "divertirti" ad aggiungere al parser anche ATMEGA1284 e lo dichiari identico al 1284p, buon divertimento :grin: [/quote] questa tua faccina verde non mi suggerisce nulla di buono, quindi la soluzione è questa e da quanto capisco è un lavoro immane, se è così non è cosa per me, quindi sarò costretto a rinunciare =(

Come ti avevo già suggerito l'unica soluzione possibile è vedere se esiste un modo, dalla board virtuale di Arduino, per passare a avrdude un nome processore diverso da quello del compilatore, il problema è tutto qui. Non mi pare di avere mai visto un elenco di tutte le possibili opzioni della board virtuale, ovviamente sono dipendenti dalla versione dell'IDE, magari un modo c'è per fare questa "magia" :)

su questa cosa ho molti dubbi, io avrdude lo addestro come voglio per nuove mcu, ma avrdude non viene toccato nella fase di compilazione. Allora forse potrei invertire la cosa: non potendo agire sul compilatore potrei provare a vedere se posso assegnare alla stessa mcu 1284p due diverse signature :D In questo modo userei sempre la sigla 1284p, anche per la 1284; il compilatore è felice e avrdude trova corrispondenza nella signature. Ma si può fare questa cosa? :astonished:

[quote author=Michele Menniti link=topic=202624.msg1493762#msg1493762 date=1386153865] questa tua faccina verde non mi suggerisce nulla di buono, quindi la soluzione è questa e da quanto capisco è un lavoro immane, se è così non è cosa per me, quindi sarò costretto a rinunciare =( [/quote]

La modifica vera e propria è semplice, poche righe di codice, però tocca perdere una marea di tempo per trovare dove fare la modifica e altrettanto per riuscire a ricompilare il tutto, inoltre alla fine ottieni una versione non standard di avrgcc che deve andare a sostituire quella fornita con Arduino, cosa che non tutti sono disposti a fare.

su questa cosa ho molti dubbi, io avrdude lo addestro come voglio per nuove mcu, ma avrdude non viene toccato nella fase di compilazione

Non ci siamo capiti, per il 1284 no P devi inserire come nome processore nella board ATMEGA1284p altrimenti il compilatore non lo riconosce, su questa cosa non c'è nessuna possibilità di intervento. Per la programmazione dello sketch tramite bootloader non ci sono problemi perché sebbene ad Avrdude dici che sta usando un 1284p lui ottiene dal bootloader, che è un emulazione di un programmatore hardware, la signatura del 1284p e non quella del 1284 perché è un valore inserito nel bootloader stesso, non viene letto quello reale del micro. Il problema si pone solo ed esclusivamente per caricare il bootloader tramite sketch ISP, in questo caso la signature è quella reale del micro, è lui a fornirla via ISP, e avrdude deve sapere che sta programmando un 1284 invece di un 1284p, pertanto è necessario usare una board virtuale dedicata alla sola programmazione via ISP del 1284, vale anche se usi un vero programmatore hardware e non solo per lo sketch ISP. In pratica è quello che stai già facendo, ovvero hai una board virtuale che ti permette di caricare sketch tramite bootloader sul 1284 e 1284p, una board virtuale per il solo 1284 per la programmazione ISP tramite Arduino o altro programmatore. Tu vuoi "la botte piena e la moglie ubriaca" perché desideri una sola board virtuale per il 1284 e il 1284p valida per il bootloader e l'ISP :) , unica strada, semplice, possibile è esplorare le opzioni della board virtuale, ammesso che sono di più di quelle apparenti, e vedere se c'è un modo per bypassare la questione, però alla fine avrai sempre due board virtuali diverse, una per il 1284 e una per il 1284p, perché devi comunque fare distinzione dei parametri da inviare a avrgcc e avrdude. Una possibile soluzione alternativa, ma c'è da lavorare abbastanza, è modificare lo sketch ISP in modo che se la signature letta, è lui che esegue fisicamente l'operazione per poi passarla ad avrdude per la verifica, è quella del 1284 la cambia con quella del 1284p, in questo modo si "fa fesso" avrdude e hai una sola board virtuale per 1284/1284p, ovviamente la cosa è valida solo con lo sketch ISP, per usare altri programmatori hardware rimane indispensabile una board virtuale dedicata al 1284.

No, ormai mi è chiaro tutto ed infatti, come hai evidenziato, è già ciò che sto facendo e che appunto vorrei botte+moglie :D Il fatto che si tratti di soluzioni che deviano lo standard per me è un concetto relativo, ossia sapendo che la 1.0.5 è l'ultima versione e non ce ne saranno altre, io metto a disposizione il materiale per fare questo lavoro, a chi serve lo usa, chi non lo vule non lo usa, non devo vendere nulla nel senso stretto del termine, ma solo suggerire. Ma quando scrivi

tocca perdere una marea di tempo per trovare dove fare la modifica e altrettanto per riuscire a ricompilare il tutto

la considerazione è semplice: io non sono in grado e nemmeno chiederei a nessuno di perdere tanto tempo, mi tengo la moglie sobria :grin: Stesso discorso per l'Arduino ISP, anche a fare la variazione, considerando che io non vorrei limitarmi al solo 1284 perché mi risulta che esistono (da verificare) altre situzioni molto simili alla 1284/1284p, risolverei un solo problema e NON IL PROBLEMA, quindi non mi serve. Tempo fa BrainBooster realizzò una versione dell'IDE con un flag per ignorare l'errore di signature, funzionava benissimo con i tiny2313/4313 che l'avevano persa, ma anche lì, cambia versione e che fai? Però visto che questa è l'ultima della serie potrebbe essere la soluzione ideale, quasi quasi gli scrivo :)

Astro, invece a te continuo a ricordare la promessa di risolvere il problema dell'altro Topic, l'errore di verifica del 2560, tra un paio di giorni dovremmo essre nel fatidico fine settimana XD

[quote author=Michele Menniti link=topic=202624.msg1493845#msg1493845 date=1386158018] Stesso discorso per l'Arduino ISP, anche a fare la variazione, considerando che io non vorrei limitarmi al solo 1284 perché mi risulta che esistono (da verificare) altre situzioni molto simili alla 1284/1284p, risolverei un solo problema e NON IL PROBLEMA, quindi non mi serve. [/quote]

La modifica allo sketch ISP è l'unica strada relativamente semplice da seguire, sono poche righe di codice da sistemare. Quello che tu chiami il PROBLEMA non ha una soluzione perché se il compilatore non supporta un certo modello di micro non c'è nulla da fare se non sostituire/aggiornare il compilatore. Dal mio punto di vista dire che un programma compilato per un certo modello di processore leggermente diverso da un "altro sembra" funzionare pure su quest'ultimo non è una cosa accettabile per un normale utilizzo, anche amatoriale, perché so perfettamente che prima o poi salta fuori il crash del micro.

Questa è la funzione tramite la quale lo sketch ISP legge la signature e la invia a Avrdude, basta leggerla per intero prima di inoltrarla e se corrisponde ad un certo valore/i la si cambia con un altra.

void read_signature() {
  if (CRC_EOP != getch()) {
    error++;
    Serial.print((char) STK_NOSYNC);
    return;
  }
  Serial.print((char) STK_INSYNC);
  uint8_t high = spi_transaction(0x30, 0x00, 0x00, 0x00);
  Serial.print((char) high);
  uint8_t middle = spi_transaction(0x30, 0x00, 0x01, 0x00);
  Serial.print((char) middle);
  uint8_t low = spi_transaction(0x30, 0x00, 0x02, 0x00);
  Serial.print((char) low);
  Serial.print((char) STK_OK);
}

ricompilando GCC ad una versione più recente (sicuramente già la 3.4.0.65) avrai il supporto per il 328

lesto:
ricompilando GCC ad una versione più recente (sicuramente già la 3.4.0.65) avrai il supporto per il 328

Confermo …
dando da terminale il comando : “avr-gcc --target-help” si ha la lista delle MCU supportate. La versione 4.7.2 (quello dell’ultima toolchain se non vado errato) riporta :

nown MCU names:
  avr1 avr2 avr25 avr3 avr31 avr35 avr4 avr5 avr51 avr6 avrxmega1
  avrxmega2 avrxmega3 avrxmega4 avrxmega5 avrxmega6 avrxmega7 at90s1200
  attiny11 attiny12 attiny15 attiny28 at90s2313 at90s2323 at90s2333
  at90s2343 attiny22 attiny26 at90s4414 at90s4433 at90s4434 at90s8515
  at90c8534 at90s8535 attiny13 attiny13a attiny2313 attiny2313a attiny24
  attiny24a attiny4313 attiny44 attiny44a attiny84 attiny84a attiny25
  attiny45 attiny85 attiny261 attiny261a attiny461 attiny461a attiny861
  attiny861a attiny87 attiny43u attiny48 attiny88 at86rf401 ata6289
  at43usb355 at76c711 atmega103 at43usb320 attiny167 at90usb82 at90usb162
  atmega8u2 atmega16u2 atmega32u2 atmega8 atmega48 atmega48a atmega48p
  atmega88 atmega88a atmega88p atmega88pa atmega8515 atmega8535 atmega8hva
  at90pwm1 at90pwm2 at90pwm2b at90pwm3 at90pwm3b at90pwm81 atmega16
  atmega16a atmega161 atmega162 atmega163 atmega164a atmega164p atmega165
  atmega165a atmega165p atmega168 atmega168a atmega168p atmega169
  atmega169a atmega169p atmega169pa atmega32 atmega323 atmega324a
  atmega324p atmega324pa atmega325 atmega325a atmega325p atmega325pa
  atmega3250 atmega3250a atmega3250p atmega3250pa atmega328 atmega328p
  atmega329 atmega329a atmega329p atmega329pa atmega3290 atmega3290a
  atmega3290p atmega3290pa atmega406 atmega64 atmega640 atmega644
  atmega644a atmega644p atmega644pa atmega645 atmega645a atmega645p
  atmega649 atmega649a atmega649p atmega6450 atmega6450a atmega6450p
  atmega6490 atmega6490a atmega6490p atmega16hva atmega16hva2 atmega16hvb
  atmega16hvbrevb atmega32hvb atmega32hvbrevb atmega64hve at90can32
  at90can64 at90pwm161 at90pwm216 at90pwm316 atmega32c1 atmega64c1
  atmega16m1 atmega32m1 atmega64m1 atmega16u4 atmega32u4 atmega32u6
  at90usb646 at90usb647 at90scr100 at94k m3000 atmega128 atmega1280
  atmega1281 atmega1284p atmega128rfa1 at90can128 at90usb1286 at90usb1287
  atmega2560 atmega2561 atxmega16a4 atxmega16d4 atxmega16x1 atxmega32a4
  atxmega32d4 atxmega32x1 atxmega64a3 atxmega64d3 atxmega64a1 atxmega64a1u
  atxmega128a3 atxmega128b1 atxmega128d3 atxmega192a3 atxmega192d3
  atxmega256a3 atxmega256a3b atxmega256a3bu atxmega256d3 atxmega128a1
  atxmega128a1u

Guglielmo

Visto che Michele usa solo Windows meglio ancora l'ultima toolchain Atmel, che è sicuramente meglio della distro ufficiale gnu, dove c'è il supporto al 328 no P e al 1284 no P, così risolve tutte le questioni, ovviamente tocca sostituire la toolchain di Arduino con questa.

astrobeed: .... ovviamente tocca sostituire la toolchain di Arduino con questa.

... con tutti gli innumerevoli casini che l'ultima versione della toolchain comporta ]:D ]:D ]:D

Guglielmo

P.S. : Installala e prova a compilare qualche cosa che usi la libreria WiFi o la libreria Ethernet (... gli esempi di libreria vanno bene)

Grazie ragazzi, comincio a vedere una qualche luce XD
Allora, io giorni fa avevo scaricato sia AVRDUDE 6.0.1 che la Toolchain 6.1.
In AVRDUDE.CONF ci sono 328, 328p, 1284p, il 1284 riesco ad aggiungerlo senza nessun particolare problema.
Mi pare di capire che prendendo il contenuto della toolchain 6.1 e mettendolo al posto della corrispondente parte dell’IDE risolverei il problema del compilatore in quanto esso riconosce sia 328 che 1284 noP. Solo che, provando ora seguire le istruzioni scritte all’epoca ora mi trovo una situazione diversa e non riesco a capire cosa estrapolare e dove metterlo.
Riguardo Arduino ISP non mi sento di metterci mano, troppo inesperto, ma la cosa sarebbe comoda se qualcuno mi aiutasse la sola prima volta, la mia idea sarebbe questa:
nel punto in cui legge la signature, subito dopo richiama una funzione con la quale verifica che la sign è quella del 1284 e la “trasforma” in quella del 1284p; in tal modo nel tempo posso andare in questa funzione ed aggiungere nuove righe per nuove mcu compatibili. In fondo questo è un banale sketch, non devo fare manovre strane o compilazioni

@ Guglielmo: potrebbe essere un fattore di incompatibilità Linux o sei certo che la cosa riguardi anche Windows?

[quote author=Michele Menniti link=topic=202624.msg1494123#msg1494123 date=1386170751] @ Guglielmo: potrebbe essere un fattore di incompatibilità Linux o sei certo che la cosa riguardi anche Windows? [/quote]

Salvo miei (possibili) errori, SI.

Ho provato la cosa su tutti e tre gli ambienti (Mac, Linux e Win 7) e su tutti e tre presenta gli stessi identici problemi ... :(

Guglielmo

Allora, fino a prova contraria l'unica strada possibile resta quella di aggiungere alcune righe ad ArduinoISP, a questo punto chiedo a Astro se può farlo lui quando prenderà in mano lo studio dell'errore dell'atmega2560; se le due cose non riguardassero invece gli stessi file aspetto sempre anima volenterosa disposta a modificare ArduinoISP, naturalmente le prove le faccio io. :)

gpb01: Ho provato la cosa su tutti e tre gli ambienti (Mac, Linux e Win 7) e su tutti e tre presenta gli stessi identici problemi ... :(

In particolare che errori ? Ho provato adesso a sostituire la toolchain standard di Arduino, IDE 1.0.5, con l'ultima di Atmel, la 3.4.2.1573 (versione per windows), e non mi ho nessun problema nemmeno compilando software molto complessi come Marlin per la 3D printer. Magari se mi alleghi lo sketch che ti da errori provo a ricompilarlo.