Aggiungere una MCU compatibile all'IDE

[quote author=Michele Menniti link=topic=202624.msg1494138#msg1494138 date=1386171476] 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 [/quote]

Tra cinque minuti arriva :) E' una cosa semplicissima da fare.

astrobeed: 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.

Come ti ho detto, prova a compilare un esempio delle librerie WiFi e Ethernet ... e vedi quello che succede ...

Guglielmo

Edit : QUI quello che succede ... nel thread su MAC, ma anche su Linux e Win la stessa cosa ...

astrobeed: [quote author=Michele Menniti link=topic=202624.msg1494138#msg1494138 date=1386171476] 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

Tra cinque minuti arriva :) E' una cosa semplicissima da fare. [/quote] DANKE! ma riesci anche a dare un'occhiata all'altra questione o non c'entra nulla?

Detto fatto, in allegato lo sketch ISP che “frega” avrdude dicendogli che il 1284 è un 1284p, la board da utilizzare sia per caricare gli sketch che per la programmazione ISP è unica ed è quella per il 1284p.
La questione del 2560 è molto, ma molto, più subdola e serve una verifica strumentale tramite debug jtag per verificarla, ovvero ci mi ci devo dedicare seriamente.

Questa è la modifica fatta:

void read_signature() {
  if (CRC_EOP != getch()) {
    error++;
    Serial.print((char) STK_NOSYNC);
    return;
  }
  
  Serial.print((char) STK_INSYNC);
  
/*
  // parte originale
  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);
  */  
   // versione modificata
  // se la signature è 0x1e9706 viene modificata in 0x1e9705
  uint8_t high = spi_transaction(0x30, 0x00, 0x00, 0x00);
  uint8_t middle = spi_transaction(0x30, 0x00, 0x01, 0x00);
  uint8_t low = spi_transaction(0x30, 0x00, 0x02, 0x00);
  
  if (high== 0x1e && middle == 0x97 && low == 0x06) low = 0x05;
    
  Serial.print((char) high);
  Serial.print((char) middle);
  Serial.print((char) low);
  // fine modifica
  
 Serial.print((char) STK_OK); 
 }

ArduinoISP_1284.rar (3.99 KB)

Aspettate a cantar vittoria. Aggiornando ad una versione troppo recente della toolchain, il core Arduino diventa obsoleto, leggi: incompatibile con il compilatore nuovo, e diverse cose iniziano a dare problemi durante la compilazione, vedere segnalazione di Guglielmo.

cosa che però è risolvibile aggiornando a mano le librerie, gira un thread nella sezione inglese (occhio che morde)

leo72: Aspettate a cantar vittoria.

Io non canto vittoria, semplicemente ho fatto una prova veloce, se compilo il web server ethernet nessun errore, se compilo il web server wifi ho questo errore. Purtroppo il core di Arduino è agganciato, anche nella 1.5.5, al vecchio avrgcc 4.3.2 con tutti i problemi che questo si trascina dietro e di compatibilità con le versioni più recenti della toolchain.

D:\Elettronica\Arduino\arduino-1.0.5\libraries\WiFi\WiFi.cpp: In member function 'uint8_t* WiFiClass::macAddress(uint8_t*)':
D:\Elettronica\Arduino\arduino-1.0.5\libraries\WiFi\WiFi.cpp:144:1: error: unable to find a register to spill in class 'POINTER_REGS'
D:\Elettronica\Arduino\arduino-1.0.5\libraries\WiFi\WiFi.cpp:144:1: error: this is the insn:
(insn 36 26 27 2 (set (reg:QI 23 r23)
        (mem/c:QI (plus:HI (reg/f:HI 28 r28)
                (const_int 2 [0x2])) [9 S1 A8])) D:\Elettronica\Arduino\arduino-1.0.5\libraries\WiFi\WiFi.cpp:142 28 {movqi_insn}
     (nil))
D:\Elettronica\Arduino\arduino-1.0.5\libraries\WiFi\WiFi.cpp:144: confused by earlier errors, bailing out

lesto: cosa che però è risolvibile aggiornando a mano le librerie, gira un thread nella sezione inglese (occhio che morde)

Sicuramente si, però ti rendi conto che è un lavoro inutile fino a che in Arduino home non decidono di passare ad una toolchain più recente per le loro distro ?

@lesto: Ma se devi metter mano a mezzo core di Arduino, allora il gioco non vale la candela. Tanto vale prendere (per chi ha Windows) AvrStudio e lavorare da lì.

@astrobeed: è qui il problema, il core diventa obsoleto e diverse cose non vanno

leo72: @astrobeed: è qui il problema, il core diventa obsoleto e diverse cose non vanno

Benissimo, organizziamo una petizione con millemila firme da sottoporre a Massimo affinché si decidano ad aggiornare core e toolchain, sono anni che sono legati alla 4.3.2, nessuna faccina perché sono molto serio su questa cosa.

Grazie Astro! il principio applicato mi è chiarissimo, quindi se devo aggiungere qualche altra MCU identica ad una già esistente (appunto tipo 1284/1284p) ora so come fare. A questo punto dovrei poter usare la stessa board 1284p sia per bl che per sketch, e senza modificare avrdude.conf, giusto?

@ Leo: al di là dello scambio tra loro personalmente ho scartato questa opzione perché troppo "onerosa"; con questa cosa dello sketch ArduinoISP io ho risolto il problema, quindi non tocco proprio nulla :D

Si perché per AvrDude il micro sarà sempre un 1284p.
Una cosa che mi è venuta in mente adesso, potrebbe essere necessario inserire un delay di qualche microsecondo tra le varie letture sulla SPI, se vedi che avrdude fornisce spesso errore di signature, indipendentemente dal micro scelto, aggiungi questi delay.

astrobeed: Benissimo, organizziamo una petizione con millemila firme da sottoporre a Massimo affinché si decidano ad aggiornare core e toolchain, sono anni che sono legati alla 4.3.2, nessuna faccina perché sono molto serio su questa cosa.

Pronto a firmarla ... ... ma non so se ci daranno ascolto ... così tutti presi dalla TRE e dalla GALILEO ]:D ]:D ]:D

Guglielmo

gpb01: ... ma non so se ci daranno ascolto ... così tutti presi dalla TRE e dalla GALILEO ]:D ]:D ]:D

Gli conviene darci ascolto, in fin dei conti sono i nostri soldi che pagano i loro stipendi, possiamo sempre indire uno sciopero degli acquisti di nuove schede Arduino per tot tempo, vedrai come ci danno retta subito :grin:

Sono favorevole ad una richiesta di aggiornamento della toolchain e relativa rivisitazione del core, anche alla luce dell'annosa questione del 2560, dove non mi pare ci sia mai stato un chiarimento.

Le ultime Toolchain ufficiali ATMEL sono le 3.4.x
http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORLINUX.aspx
http://www.atmel.com/tools/ATMELAVRTOOLCHAINFORWINDOWS.aspx
in particolare le 3.4.2.
E’ uscita anche la 3.4.3 che usa avrgcc 4.8.1 al posto del 4.7.2 , link precedenti e → http://distribute.atmel.no/tools/opensource/Atmel-AVR-GNU-Toolchain/3.4.3/

Ma i MAC cosa usano?

il problema sollevato è: retocompatibilità quali bug risolvono (e a "loro" di supportare il 328 non frega, essendo non "loro") quali bug introducono

PaoloP: ... Ma i MAC cosa usano?

In che senso ??? Su MAC nell'IDE c'è la stessa Toolchain che c'è su Linux e su Win ...

... mentre ti ricordo, qui sul forum, un mio lungo thread dove alla fine a ... "10 mani" ... si riuscì a compilare la 3.4.2 (c*he Atmel non da pre-compilata*) anche su MAC ;)

Guglielmo

gpb01:
si riuscì a compilare la 3.4.2 (che Atmel non da pre-compilata) anche su MAC :wink:

Infatti il vero problema è “compilare il compilatore” :smiley:

astrobeed: [quote author=Michele Menniti link=topic=202624.msg1494219#msg1494219 date=1386174533] Grazie Astro! il principio applicato mi è chiarissimo, quindi se devo aggiungere qualche altra MCU identica ad una già esistente (appunto tipo 1284/1284p) ora so come fare. A questo punto dovrei poter usare la stessa board 1284p sia per bl che per sketch, e senza modificare avrdude.conf, giusto?

Si perché per AvrDude il micro sarà sempre un 1284p. Una cosa che mi è venuta in mente adesso, potrebbe essere necessario inserire un delay di qualche microsecondo tra le varie letture sulla SPI, se vedi che avrdude fornisce spesso errore di signature, indipendentemente dal micro scelto, aggiungi questi delay.

[/quote] ok, in pratica nel gruppo originale ogni lettura è intervallata da un serial.print, mentre nel "tuo" le letture sono in successione senza intervallo; nel caso in cui avessi problemi le separo con un piccolo ritardo, chiaro! :) Grazie ancora.

Parlate di petizioni, poi nessuno organizza nulla, finisce a scherzo/spam come ogni cosa. Un suggerimento: qualcuno che sa come fare potrebbe indire tale petizione (potete anche mettere il mio nome come "organizzatore", così nessun timore di vendette, io tanto non ne ho ;)) su un blog o dove volete e i vari utenti "firmano" anche col il solo nick del Forum. Ma la questione è: a quanto arriviamo? 100-200 firme? Bisogna trovare una piattaforma nota ed eclatante, dove arrivino anche gli utenti non iscritti al Forum, che sono 1000 volte superiori agli iscritti. my cent