Topic permanente di programmazione newbie

BrainBooster: quindi l'output che si vede nel video è letto con una di quelle due modalità no?

Colpa della traduzione di google, sono andato a leggere il testo originale in Inglese, i link è sempre meglio metterli al sito originale e non tramite traduttore proprio per evitare le cavolate che questo combina vanificando eventuali ricerche nel testo. In effetti in fondo ci sono due screen capture, dove fa vedere un ATtiny 13 con signatura 0xFFFFFF, letto tramite HVSP, e brickato viene ripristinato introducendo manualmente il modello, però nella schermata successiva risulta si ripristinato, ma la signature rimane 0xFFFFFF il che crea non pochi problemi quando vai a programmarlo tramite ISP. Dopo provo a mandare un richiesta all'assistenza tecnica di Atmel per chiedere lumi su questa cosa della signature alterabile e se c'è un modo per ripristinarla.

io ho guardato in giro e credo che il problema sia causato da una cancellazione del registro di calibrazione dell'oscillatore interno e per riscriverlo bisogna applicare un clock con un quarzo esterno o altro di 1MHz. Ma non ho ancora avuto modo di cercare per bene.

Bene ragazzi, grazie di aver preso in cura il problema. Sul datasheet non mi pare si parli di scrittura della signature, i link non li guardo perché l'inglese mi è amico tanto quanto il polacco, quindi sarebbe inutile, però sono pronto ad ogni prova possibile, datemi indicazioni e sarà fatto. Confermo che con l'ISP è impossibile lavorare con ujna signature FF FF FF, ho provato a metterla in AVRDUDE.CONF e l'IDE si incazza come una bestia, segno che controlla prima se c'è un 1E iniziale. Con lo stesso metodo invece ho programmato regolarmente il 4313, ma non riesco ad integrarlo come supporto diretto, posso farlo solo dicendo al CONF che ho un tiny2313 con una signature, flash e fuse diversi; ho provato a duplicare le righe nel conf ma evidentemente l'elenco dei micro va aggiornato in qualche altra parte (ma dove?), comunque il link di BB sul 4313 lo guardo, lì dovrei capire qualcosa in più. Non credo sia possibile mettere un quarzo, i pin XTAL1 e 2 sono impegnati da segnali di programmazione e comunque ora non posso fare più niente sull'hw, al di là di una prova al volo; se poi il micro è comunque inutilizzabile via ISP non mi serve a niente. @ Astro: prova a vedere, aspetta la risp di ATMEL, se c'è qualcosa che posso fare io la faccio, anche perché sarebbe spettacolare implementare un recupero del genere; se invece non c'è nulla e vuoi comunque dare un'occhiata te lo spedisco.

Ieri comunque è successo, poi ho ricostruito, che col fatto di usare alternativamente Arduino UNO+ISP per mettere lo sketch e l'HV Programmer per cancellarlo, ad un certo punto ho notato che Win impiegava oltre un minuto per riconoscere l'USB di turno, e siccome deve fare un secondo riconoscimento di conferma mi è capitato di fare operazioni nelle fasi intermedie; dopo il fattaccio ho riavviato (e mi è uscito un errore di sistema di scrittura, stranissimo) e per tutta la sera ho rifatto i giochi col 4313 (non volevo aver costruito uno spara-micro), le USB sono andate benissimo, addirittura manco le ho scollegate a volte, senza avere più problemi.

Oggi pomeriggio implemento il lock bit, intanto datemi tutte le info possibili riguardo il recupero del 2313 e l'implementazione del 4313. Grazie!

Menniti quando dicevo "un quarzo o altro" in verità volevo dire che basta dare un clock stabile da 1 a 4mhz sul pin del clock dell'ic , poi cancellare tutto e provare a riprogrammare il fuse CLSEL. ... tel'avevo messo anche tradotto in italiano il link :D e neanche lo guardi? =( guarda almeno il video :D

BrainBooster: Menniti quando dicevo "un quarzo o altro" in verità volevo dire che basta dare un clock stabile da 1 a 4mhz sul pin del clock dell'ic , poi cancellare tutto e provare a riprogrammare il fuse CLSEL. ... tel'avevo messo anche tradotto in italiano il link :D e neanche lo guardi? =( guarda almeno il video :D

BB non prendere per il c...., mi sono fidato di quanto commentava Astro, ora al lavoro, pomeriggio mi guardo il filmino :P Ho scaricato invece il core tiny, ma sei sicuro che si tratti di una versione modificata dell'originale? Ricordo che per diverso tempo Leo fece riferimento ad un core che dava parecchi problemi, non vorrei che si trattasse di quello :disappointed_relieved: C'è un modo per capire questa cosa secondo te? comunque pomeriggio faccio qualche prova anche con questo, mi sa che questo pomeriggio durerà fin o alle tre di stanotte :sweat_smile:

Quella è una versione abbastanza antica (usala solo per il 4313), ricorda che se stai facendo esperimenti con avrdude devi anche modificare avrdude.conf per fargli riconoscere il 4313.

Ho la risposta di Atmel, la signature si trova in una zona protetta della flash ed è accessibile esclusivamente tramite le varie modalità di programmazione con gli specifici comandi. Se durante un erase della flash si verificano rilevanti spike, non mi hanno chiarito cosa intendono con rilevanti, sull'alimentazione del micro per quanto sia un evento rarissimo è possibile che venga cancellata anche la zona della flash dove si trova la signature, il motivo per cui leggi 0xffffff è proprio perché 0xff è il valore tipico di una cella flash appena cancellata. Non esiste nessun modo per ripristinare il corretto valore della signature, il micro rimane perfettamente funzionante e utilizzabile, però potrebbero esserci problemi con alcuni software e tool hardware per la programmazione perché se leggono il valore 0xffffff lo interpretano come micro non riconosciuto o guasto e non consentono di procedere ad una programmazione forzata. Morale della favola, non solo gli AVR è possibile brickarli sbagliando i fuse, ma è anche possibile cancellare la signature.

BB scusa ma dove lo vedi il problema risolto? in quel video prima mostra degli errori perché non c'è alcun micro, poi mostra la lettura di un attiny45 buono, poi mette un tiny2313 con signature FFFFFF e mostra che riesce a programmare i fusebit, e la novità dov'è? Tutto questo l'ho fatto già ieri sera; nemmeno lui è riuscito a rimettere a posto la signature, infatti se guardi attentamente lui ha tagliato la parte di verifica, ma è rimasto un fotogramma in cui c'è sempre FFFFFF, hai capito il furbo polacco? :stuck_out_tongue_closed_eyes:

riguardo il tuo ultimo post, che leggo al volo, come già detto (ma tu mi ignori e poi t'incavoli che non leggo quel che mi dici :P) AVRDUDE.CONF l'ho modificato ma non gliene f... niente, segno che il 4313 lo devo elencare da qualche altra parte; col core sono a posto, va benissimo quello del 2313, l'ho provato, dovete solo insegnarmi come aggiungere un micro all'elenco, ripeto che farlo nel solo AVRDUDE.CONF non basta.

@Astro: ok, grazie, ho spiegato prima i casini che sono successi quindi è tutto giustificato, sono tranquillo perché non è dipeso dal programmatore ma dal casino tra le usb, inoltre un suo problema doveva averlo perché come ho scritto ieri sera appena l'ho messo nell'ISP si è accesa debolmente una delle spie collegate ai MISO, MOSI, SCLK, quindi c'era qualcosa che non andava. Come immaginavo e avevo letto non c'è modo di ripristinarlo, e per usarlo si può solo programmarlo in modalità HV, cosa che ancora non ho fatto, lo conservo per "usi futuri" :) GRAZIE!

:D quella del frame non l'avevo vista... ma quando parli di inserire nell'elenco, a cosa ti riferisci?

menniti: nemmeno lui è riuscito a rimettere a posto la signature, infatti se guardi attentamente lui ha tagliato la parte di verifica, ma è rimasto un fotogramma in cui c'è sempre FFFFFF, hai capito il furbo polacco? :stuck_out_tongue_closed_eyes:

Se guardi in fondo all'articolo, ci sono pure due immagini molto eloquenti dice chiaramente che la signature non viene ripristinata, semplicemente che riesce a riprogrammare i fuse in HV rendendo il micro nuovamente utilizzabile, prima era brickato.

Come immaginavo e avevo letto non c'è modo di ripristinarlo, e per usarlo si può solo programmarlo in modalità HV, cosa che ancora non ho fatto, lo conservo per "usi futuri" :) GRAZIE!

Forse mi sono spiegato male, il micro puoi riprogrammarlo come ti pare, ISP incluso, solo che non tutti i software, e/o programmatori hardware, lo permettono perché quando leggono 0xffffff sulla signature non consentono di continuare.

menniti: Ho scaricato invece il core tiny, ma sei sicuro che si tratti di una versione modificata dell'originale? Ricordo che per diverso tempo Leo fece riferimento ad un core che dava parecchi problemi, non vorrei che si trattasse di quello :disappointed_relieved:

Il core a cui facevo io riferimento in passato era quello di Saporetti, che consigliavo di non usare perché molto limitato. Il core Tiny che ha modificato Brain mi pare che sia stato toccato solo nei file pins_arduino.c e pins_arduino.h per inserire il riconoscimento del 4313 ed il setup della piedinatura. Non vedo però le modifiche da apportare ad avrdude.conf per fargli riconoscere il micro.

menniti: EDIT: ho provato a cambiare in AVRDUDE.CONF la signature (tecnica adottata con successo per il 328 noP) in FF FF FF ma niente da fare. Il messaggio " use -F to override this check." significa che posso bypassare il controllo, ma come devo usarlo questo parametro, forse si riferisce alla riga di comando?

Sì, questi sono parametri da dare ad avrdude via terminale. Il parametro "-F" forza il programma a saltare i check di verifica di cui parlava astrobeed: alle volte riesci a portare a termine un'operazione di scrittura, ma non sempre con -F risolvi tutto, andrebbe visto che controlli avrdude salta usando quel parametro.

@ BB e Astro: ok, la signature non si ripristina e qui ormai ci siamo arrivati tutti, perfino io…. Riguardo la programmazione ti sei spiegato benissimo, io mi riferivo al fatto che l’IDE è evidentemente uno di quei programmi che NON permette la programmazione del micro e quindi per me l’unica possibilità resta l’HV o il Dragon, quando finalmente troverò il tempo di metterlo in moto (erano questi gli usi futuri a cui mi riferivo) @ Leo e BB: quindi ora vorrei poter aggiungere una board per programmare correttamente il 4313 (mi basta 1MHz); da quanto ho capito i file da modificare sono tre: – AVRDUDE.CONF: qui (come feci allora col 328noP) mi limito a fare un copincolla del 2313 ed a modificare nome, descrizione e signature; Vi ricordo che ieri, semplicemente modificando la signature ho programmato il 4313 con la board ed il finto boootloader del 2313, cambiando solo il valore del LFuse che, peraltro, non ha alcuna importanza per gli sketch; quindi la manovra su AVRDUDE in linea di massima va; poi non scordiamo tutto ciò che disse Astro a proposito di questo tipo di operazioni barbariche, ma visto che ieri ho fatto lampeggiare tre led senza questioni, a me basta. – pins_arduino.c e pins_arduino.h: anche qui posso fare un copincolla del 2313 modificando le sole info varianti, ho già verificato che la pinature è identica e le assegnazioni dei pin sono perfettamente compatibili -boards.txt: e anche qui una nuova board a partire dalla 2313 in cui modifico i vari attributi, l’LFuse (giusto per esattezza) e il nome dell’mcu, mentre lascio inalterato il bootloader che, a farla sporca, forse potrei copiare e rinominare opportunamente nella cartella specifica. La questione è: tutto ciò mi evita l’errore dell’IDE che ogni volta mi strapazza le vecchie che mi dice che non conosce il 4313 e mi mostra l’infinito elenco di quelli che dice di conoscere? A voi l’ardua sentenza.

@ Leo: l'IDE nel messaggio sembra chiaro: usare -F significa non controllare la signature, che altro dovrebbe fare/non fare?

Menniti, non credo che basti solo cambiare il nome al 2313 in 4313 e incollare, questo è un estratto dal mio avrdude.conf

#------------------------------------------------------------
# ATtiny4313
#------------------------------------------------------------

part
     id            = "t4313";
     desc          = "ATtiny4313";
     has_debugwire = yes;
     flash_instr   = 0xB2, 0x0F, 0x1F;
     eeprom_instr  = 0xBB, 0xFE, 0xBB, 0xEE, 0xBB, 0xCC, 0xB2, 0x0D,
                 0xBA, 0x0F, 0xB2, 0x0F, 0xBA, 0x0D, 0xBB, 0xBC,
                 0x99, 0xE1, 0xBB, 0xAC;
     stk500_devcode   = 0x23;
##   Use the ATtiny26 devcode:
     avr910_devcode   = 0x5e;
     signature        = 0x1e 0x92 0x0d;
     pagel            = 0xD4;
     bs2              = 0xD6;
     reset            = io;
     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, 0x0E, 0x1E, 0x2E, 0x3E, 0x2E, 0x3E,
        0x4E, 0x5E, 0x4E, 0x5E, 0x6E, 0x7E, 0x6E, 0x7E,
        0x26, 0x36, 0x66, 0x76, 0x2A, 0x3A, 0x6A, 0x7A,
        0x2E, 0xFD, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00;
    hventerstabdelay    = 100;
    progmodedelay       = 0;
    latchcycles         = 5;
    togglevtg           = 1;
    poweroffdelay       = 15;
    resetdelayms        = 1;
    resetdelayus        = 0;
    hvleavestabdelay    = 15;
    chiperasepulsewidth = 0;
    chiperasepolltimeout = 10;
    programfusepulsewidth = 0;
    programfusepolltimeout = 5;
    programlockpulsewidth = 0;
    programlockpolltimeout = 5;

     memory "eeprom"
         size            = 256;
        paged           = no;
        page_size       = 4;
         min_write_delay = 4000;
         max_write_delay = 4500;
         readback_p1     = 0xff;
         readback_p2     = 0xff;
         read            = "1   0  1  0   0  0  0  0   0 0 0 x  x x x x",
                           "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 x x",
                           "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   x   x",
              " a7  a6  a5  a4     a3  a2   0   0",
              "  x   x   x   x      x   x   x   x";

    mode        = 0x41;
    delay       = 6;
    blocksize   = 4;
    readsize    = 256;
       ;
     memory "flash"
         paged           = yes;
         size            = 4096;
         page_size       = 64;
         num_pages       = 64;
         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   0   0    0 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   0   0    0 a10  a9  a8",
                           " a7  a6  a5  a4   a3  a2  a1  a0",
                           "  o   o   o   o    o   o   o   o";

# The information in the data sheet of April/2004 is wrong, this works:
         loadpage_lo     = "  0   1   0   0    0   0   0   0",
                           "  0   0   0   x    x   x   x   x",
                           "  x   x   x   x   a3  a2  a1  a0",
                           "  i   i   i   i    i   i   i   i";

# The information in the data sheet of April/2004 is wrong, this works:
         loadpage_hi     = "  0   1   0   0    1   0   0   0",
                           "  0   0   0   x    x   x   x   x",
                           "  x   x   x   x   a3  a2  a1  a0",
                           "  i   i   i   i    i   i   i   i";

# The information in the data sheet of April/2004 is wrong, this works:
         writepage       = "  0  1  0  0   1   1  0  0",
                           "  0  0  0  0   0 a10 a9 a8",
                           " a7 a6 a5 a4   x   x  x  x",
                           "  x  x  x  x   x   x  x  x";

    mode        = 0x41;
    delay       = 6;
    blocksize   = 32;
    readsize    = 256;
       ;
#   ATtiny4313 has Signature Bytes: 0x1E 0x92 0x0D.
     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";
       ;
     memory "lock"
         size            = 1;
         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";
         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";
        min_write_delay = 9000;
        max_write_delay = 9000;
       ;

     memory "lfuse"
         size            = 1;
         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";

         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";
        min_write_delay = 9000;
        max_write_delay = 9000;
       ;

     memory "hfuse"
         size            = 1;
         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";

         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";
        min_write_delay = 9000;
        max_write_delay = 9000;
       ;

     memory "efuse"
         size            = 1;
         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 x x i";

         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  o o o o  o o o o";
        min_write_delay = 9000;
        max_write_delay = 9000;
     ;
# The Tiny4313 has calibration data for both 4 MHz and 8 MHz.
# The information in the data sheet of April/2004 is wrong, this works:

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

la maggiorparte dei parametri sono uguali,ma non tutti. Poi basta che ti crei la board per l'ide e hai finito. L'opzione -F per avrdude potrebbe aiutare se il chip è sbrickato ed ha solo la signature danneggiata e nient'altro. L'ide richiamando avrdude con i parametri di default (senza -F per esempoi) non può programare un chip con la signature divera da quella attesa (salvo modifiche).

Io uso la 0022, forse il tuo CONF è più aggiornato, ora provo a copiare questi dati nel mio conf e vediamo che succede. Grazie

Niente da fare, ho inserito le tue righe in AVRDUDE.CONF, ho aggiornato i files pins.Arduino.h e .c, ho creato la board, appena provo la compilazione mi dice

mcu attiny4313 supported for assembler only

e

unknown MCU 'attiny4313' specified Known MCU names: avr2 at90s2313

che manca? ma tu, bb, l'hai mai provata questa mcu, intendo dire che basta selezionarla e fare un banale compilazione del blick per sapere se ti funziona o meno

menniti: Niente da fare, ho inserito le tue righe in AVRDUDE.CONF, ho aggiornato i files pins.Arduino.h e .c, ho creato la board, appena provo la compilazione mi dice mcu attiny4313 supported for assembler only

Questo non è un errore di avrdude, è del GCC, ti dice che non riconosce quel micro e che non può compilare.

astrobeed:

menniti: Niente da fare, ho inserito le tue righe in AVRDUDE.CONF, ho aggiornato i files pins.Arduino.h e .c, ho creato la board, appena provo la compilazione mi dice mcu attiny4313 supported for assembler only

Questo non è un errore di avrdude, è del GCC, ti dice che non riconosce quel micro e che non può compilare.

Dunque io ho solo eseguito il verify, senza tentare di fare upload, per cui dovrei spiegare al GCC che questo micro esiste, secondo te posso farlo e come?

menniti: Dunque io ho solo eseguito il verify, senza tentare di fare upload, per cui dovrei spiegare al GCC che questo micro esiste, secondo te posso farlo e come?

Non puoi farlo, è necessario eseguire l'upgrade del compilatore per risolvere.

astrobeed:

menniti: Dunque io ho solo eseguito il verify, senza tentare di fare upload, per cui dovrei spiegare al GCC che questo micro esiste, secondo te posso farlo e come?

Non puoi farlo, è necessario eseguire l'upgrade del compilatore per risolvere.

Ottimo, allora faccio come il vecchio cinese, mi siedo davanti al PC e aspetto, qualcosa accadrà :) per il momento il 4313 può aspettare anche lui e tornare nel cassetto.

menniti: Ottimo, allora faccio come il vecchio cinese, mi siedo davanti al PC e aspetto, qualcosa accadrà :) per il momento il 4313 può aspettare anche lui e tornare nel cassetto.

Ho verificato, il compilatore 4.3.2 abbinato all'IDE di Arduino non prevede il 4313, è previsto nella 4.3.3 che trovi nell'ultima release di WinAvr. Possibile soluzione indolore, non è detto che funzioni e adesso non ho tempo per provare, però se ti va di perderci un po di tempo prova a scaricare l'ultima relase di WinAvr, esegui l'installazione, si limita ad espandere i contenuti, dopo di che cancella il contenuto della cartella "..\arduino-0023\hardware\tools\avr" e copiaci dentro tutto quello presente nella cartella WinAvr, dovresti trovarla in "C:\Programmi\Atmel\WinAvr", esclusa la cartella avr32 che non ti serve. Fatto quanto sopra dovresti avere l'IDE aggiornato al compilatore 4.3.3 che include il 4313.