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.
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.
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
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.
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?
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.