Vi ricordate tempo fa quando segnalai l'Optifix, il bootloader per l'UNO modificato per risolvere alcuni bug dell'attuale Optiboot quali, ad esempio, l'impossibilità di uploader sketch più grandi di 30K oppure il famoso bug che impedisce all'UNO di funzionare come un programmatore ISP senza l'uso di HW esterno (condensatore e/o resistenza)?
Ebbene, l'autore di quel bootloader ha fornito un utilissimo strumento per chi non ha molta dimestichezza con la linea di comando: si tratta di uno sketch che serve per caricare l'Optifix su un altro Arduino (immagino che funzioni anche su un Atmega standalone, devo provare). Lo sketch identifica il micro (Atmega328/168/8) e carica il bootloader appropriato senza dover smanettare con avrdude e simili.
Inoltre ha fornito anche un altro tool, fusebytes, uno sketch che analizza i fuse del micro collegato e fornisce tutta una serie di utili informazioni sui più reconditi segreti del chip che state usando...
I link per lo scaricamento dei software sono in questo post.
FuseBytes:
"pgm_read_byte" was not declared in this scope
alla linea 83
OptiLoader:
variable or field "read_image" declared void
Il primo mi sa che ha a che fare con le patch che sono state introdotte da poco per sopperire ai bug introdotti dall'ultima versione di avr-gcc ma per il secondo non so. Ho scritto sul forum, attendo risposte dall'autore.
Preciso comunque che l'autore ha pubblicato una versione moddata dell'IDE, che non ho scaricato. Forse usando quella i problemi si risolvono...
In teoria sì perché da quel che vedo nel codice mi pare che dipenda dal micro che vede, non dalla scheda usata.
Però finché non riesco a far funzionare lo sketch non so dirti di più. Adesso vedo se mi ha risposto l'autore.
@Mich:
non funzionano gli sketch per il caricamento in automatico ma l'Optifix 4.4 funziona alla grande!
L'ho appena messo su un Atmega (lo si può caricare con la tecnica ArduinoISP usando l'UNO come programmatore con avrdude 5.04 da terminale oppure con un programmatore esterno, es.: UsbTinyISP, caricando direttamente l'hex precompilato che si trova online) e posso uploadare senza condensatori e resistenze. Comodissimo!
Grazie Leo, non sono interessato agli sketch over30K visto che lo facciamo tranquillamente sullo stand alone e non credo userò mai un Arduino per un'applicazione definitiva; non sono interessao nemmeno all'autoreset visto che la mia UNO non lo vuole; non mi interessa nemmeno caricare l'optifix, visto che funziona da Arduino, perché devo usare la riga di comando?
Semmai potrebbe essere utile testarlo col tiny, per vedere se si riesce (come facciamo già col 328) ad impostare i fuses per altri clock.
Inoltre mi interessa molto la possibilità di leggere i valori dei fuses da un micro; ogni volta che ne uso uno preso dal cassettino devo per forza programmarlo perché non so com'è impotato e faccio prima a mettere i fuses che a provarlo.
Beh se effettivamente il nuovo boot riuscisse a impostare in automatico i fuse dei Tiny senza passare per la riga di comendo sarebbe una bella comodità
No, non avete capito: lo sketch FuseBytes "legge" i fuse, non li imposta
Non potrebbe fare altrimenti, dato che per programmare i fuse devi agire dall'esterno (a meno di smentite).
Non legge cmq solo i fuse, ma anche alcuni registri interni, come i bit di lock, l'identificativo del micro, la versione del bootloader, fare insomma una panoramica completa di come è impostato il micro.
@Mich:
non puoi dirmi quelle cose, dai!
E la voglia di sperimentare, il gusto di provare qualcosa di diverso?
E poi non puoi venirmi a dire "perché devo usare la riga di comando?" tu! Tu che provieni dal DOS, che una volta si faceva tutto a mano! XD
Mi ricordo ancora quando usavo DEBUG.EXE per scrivere i miei programmi in assembly x86 ]
Prima scrivevo il sorgente A MANO su un foglio di carta, poi lo ricopiavo A MANO usando l'editor di memoria di quel programma.
ho usato lo sketch per leggere i fue, molto interessante.
volevo una conferma sulla lettura dei dati, 0 significa non attivo ? il segno "+" non significa nulla ?
per fare un esempio sul mio micro NON E' ABILITATO l'ISP ?
Compiled for ATmega328P
Your Serial Number is: UNO 1 19 93 (72083)
Fuse bits (L/H/E): FF D6 FD
Lock bits: CF
Signature: 1E 95 F (ATmega328P)
Oscal: 93
Fuse Low = 11111111 (FF)
||||++++______Low Power Crystal 8 - 16MHz
||++__________Start Up Time=11
|+____________Clock Output Disabled
+_____________(no divide)
Fuse High = 11010110 (D6)
|||||||+______Reset to Bootstrap
|||||++_______256 words (512 bytes)
||||+_________EEPROM Preserved on chip erase
|||+__________Watchdog programmable
||+___________ISP programming enabled
|+____________DebugWire off
+_____________RST enabled
Fuse Extended = 11111101 (FD)
|||||+++______Brownout at 2.7V
Lock Bits = 11001111 (CF)
||||||++______Read/Write to everywhere
||||++________R/W Application
||++__________No Write to Boot, no read from App
Bootloader at 0x7E00 is not readable
Testato:
quindi venendo alla domanda, al mio micro e' disabilitata la programmazione ISP (mi sembra assurdo)
ma scusa, ti dice
ISP programming enabled
perché dici che è disabilitata?
@ Leo: per il mio progetto mi sarebbe utile tutta quella parte grafica che analizza il valore dei fuses (che leggo già tranquillamente) e ne spiega le impostazioni, anche se dovrò probabilmente variare la grafica visto che alla fine di tutto sarà un display LCD quello che la mostrerà. Pensi sia difficile "prelevare" la relativa sezione software per integrarla nel mio sketch?
A tale proposito, un OT legato a questa situazione: un display LCD che mostri 8 o + righe invece delle 4 che ho avuto finora, esiste a prezzi umani?
Ad una prima occhiata non è problematico. Il problema sorge sul mettersi lì a mano e modificare tutti i Serial.print per farli andare sull'LCD
Spero tu intenda farlo su un Atmega328 perché su un Tiny85/84 non credo tu ci riesca tanto facilmente per via del fatto che tutte quelle stringhe testuali che poi dovresti mettere ti andrebbero a riempire i 512 byte di SRAM di quei micro
Ma quindi dobbiamo leggere solo il testo e non guardare gli 1/0 ?
Fuse High = 11010110 (D6)
|||||||+______Reset to Bootstrap
|||||++_______256 words (512 bytes)
||||+_________EEPROM Preserved on chip erase
|||+__________Watchdog programmable
||+___________ISP programming enabled
|+____________DebugWire off
+_____________RST enabled
facciamo un altro esempio, Leo dice che 1 significa NON programmato, l'RST enabled va a finire su un 1. Quindi e' ENABLED (cioe' ci fidiamo del testo e basta), oppure visto che va su un 1, significa che NON E' ENABLED ?
Devi leggere 1 per NO e 0 per SI' (la grafica è per capire a cosa si riferiscono i bit).
Però comunque non mi torna una cosa. L'Atmega di un Arduino UNO dovrebbe avere un fuse HIGH a DE, perché a te lo vede su D6? Hai modificato il micro?
Le diciture NON SONO la corrispondenza dei bit, ma l'interpretazione del loro stato; un esempio, il 2° e 3° bit meno significativi sono impostati entrambi a 1, ciò corrispode ad aver programmato l'mcu per riservare uno spazio al bootloader di 256 word (= 512 bytes), tipico della UNO.
x leo: no, non ho modificato nulla, questo e' il micro originale della mia UNO
x menniti: quindi chiudiamo il discorso dicendo che dobbiamo solo leggere le scritte, legere i bit come sono settati e' una info in piu' ma dobbiamo fidarci delle scritte, senza fare conversioni tra quello che c'e' scritto e i bit settati.
Testato:
x leo: no, non ho modificato nulla, questo e' il micro originale della mia UNO
non vorrei che ci sia qualche problema di "sovrapposizione" di valori, ho notato che anche il Fusecalc con alcune coppie di valori, non cambia parametri (quando inserisci sotto i fuse per vedere a cosa corrispondono, voglio fare subito una prova con questo D6
x menniti: quindi chiudiamo il discorso dicendo che dobbiamo solo leggere le scritte, legere i bit come sono settati e' una info in piu' ma dobbiamo fidarci delle scritte, senza fare conversioni tra quello che c'e' scritto e i bit settati.
Quei bit, in base a come li setti assumono delle impostazioni, il programma intelligentemente legge i valori impostati e ti dice a cosa stanno corrispondendo in quella data combinazione, se vai su Fusecalc puoi sbizzarrirti a fare prove e ti sarà tutto più chiaro.