fuse bits a 2 mhz ciclo troppo veloce

Salve ragazzi,
sto cercando di fare questo progetto:

il codice qui:

quando carico il codice il ciclo è troppo veloce in quanto arduino è impostato a 2 mhz, come faccio a ripristinarlo a 16 mhz?
in rete trovo poco su fuse bits, non capisco se è una modifica hardware o software.
Grazie.

Per la programmazione dei FUSE ti occorre un programmatore ISP o un secondo Arduino configurato come tale.

Dall'IDE, una volta che hai collegato il programmatore ISP, selezioni la giusta board (es. Arduino UNO per il 328P a 16MHz) e usi la funzione di scrittura del "bootloader" (Burn Bootloader) ... ti ricaricherà nel chip il bootloader e riprogrammerà correttamente i FUSE.

Guglielmo

Rischio di rovinare la scheda?
Mi puoi linkare una guida semplice se ce in italiano.
Grazie

Studiati molto bene QUESTA guida ... affronta tutta la casistica :wink:

Guglielmo

Modifica questa define “#define CLOCK_SCALER 8” in “#define CLOCK_SCALER 1”, e il tutto funziona anche con il clock a 16 MHz senza stare a cambiare i fuse, operazione che puoi fare solo tramite un programmatore hardware.

ho provato con #define CLOCK_SCALER 1 ma niente!
Il ciclo è sempre veloce

Non c'è modi di diminuire la velocità senza caricare il Bootloader?
Caricando il Bootloader è possibile danneggiare la scheda?
Vorrei provare ma non voglio fare danni.

Guarda, l'altro giorno ho pubblicato una libreria che modifica il clock del micro in runtime. RCM-RuntimeClockManager

Scaricala, importala nello sketch e nel setup scrivi SetClock(clk_2MHz);

Può essere che funzioni ma non ho letto tutto il codice fino in fondo, dipende come gestisce i tempi..

In ogni caso la libreria l'ho testata su Arduino UNO a 16 MHz e non hai problemi a riportare il clock a 16MHz qualora non dovesse funzionare. Qui più info

Scusa, ma come hai fatto a impostarlo a 2 MHz?

è un progetto pubblico visto qui:

il problema è che nel blog non parla di come fare per diminuire la velocità e quindi aumentarla

doppiozero:
Guarda, l'altro giorno ho pubblicato una libreria che modifica il clock del micro in runtime. RCM-RuntimeClockManager

Scaricala, importala nello sketch e nel setup scrivi SetClock(clk_2MHz);

Può essere che funzioni ma non ho letto tutto il codice fino in fondo, dipende come gestisce i tempi..

In ogni caso la libreria l'ho testata su Arduino UNO a 16 MHz e non hai problemi a riportare il clock a 16MHz qualora non dovesse funzionare. Qui più info

La libreria funzione e va alla grande, il problema è che non si adatta a questo codice, alcune parti vanno bene, altre troppo lente. Credo che bisogna modificare il codice con i delay giusti.

Si ho visto che il codice fa uso di delay e millis. Per i delay devi dividere i valori per 8, esempio alla riga 391
delay(2000/8/CLOCK_SCALER);

anche millis() gira 8 volte più lenta quindi si devono adattare tutti i valori

Non capisco: hai "rallentato" il tuo Arduino riprogrammando i fuse e ora vuoi tornare indietro, oppure vuoi far girare quel codice, pensato per 2 MHz, sul tuo Arduino che va a 16?

Non è un mio progetto, è un progetto scaricato fatto a 2 MHz e deve girare a 16.

Quali parti vanno lente? Riguardando il codice mi viene da dire che dovrebbe funzionare tutto correttamente settando il clock a 2MHz come ti ho detto.

Non mi tornano cose come delay(2000/CLOCK_SCALER); è come se il codice non fosse stato compilato per 2 MHz ma per 16, con però effettivamente il clock a 2 MHz settato tramite fuse

Hai lasciato CLOCK_SCALER 8 quando hai provato con il mio suggerimento?

C'erano parti di codice che non andavano a tempo, ora non ricordo, ho risolto reimpostando tutti i delay e togliendo CLOCK_SCALER , comunque anche con CLOCK_SCALER 1 andava fuori tempo, credo che era più un problema di delay.