Arduino mega 20mhz overclock

Salve ragazzi ho provato a glooglare in ogni dove ma una guida vera e propria e risposte alle mie domande non ne ho trovate.

Pongo qui pertanto convinto che mi saprete aiutare.

Premetto che l'esigenza di overcloccare è dovuta al fatto di voler / dover pilotare 3 display sure 3216 red green orange pertanto non per futili motivi.

La prima domanda che pongo è da "idiota" e vi chiedo: cosa accadrebbe se togliessi il quarzo da 16 e mettessi quello da 20 ?

Cosa accadrebbe alla comunicazione rs 232 che utilizzo per inserire dei dati nel micro ?

Dovrei riscrivere librerie o altro ? ( uso ds3231 sensore dht22 ir sensor )

Grazie mille
Daniele

Make this change in boards.txt

##############################################################

mega2560.name=Arduino Mega 2560 or Mega ADK

mega2560.upload.protocol=wiring
mega2560.upload.maximum_size=258048
mega2560.upload.speed=115200

mega2560.bootloader.low_fuses=0xFF
mega2560.bootloader.high_fuses=0xD8
mega2560.bootloader.extended_fuses=0xFD
mega2560.bootloader.path=stk500v2
mega2560.bootloader.file=stk500boot_v2_mega2560.hex
mega2560.bootloader.unlock_bits=0x3F
mega2560.bootloader.lock_bits=0x0F

mega2560.build.mcu=atmega2560
mega2560.build.f_cpu=16000000L <<<< 20000000L
mega2560.build.core=arduino
mega2560.build.variant=mega

##############################################################

millis(), micros() may be off some. Serial interface may still work correctly.

A mio parere l'operazione ha un significato se setti i fuse per lavorare a piena flash, cioè senza bootloader, altrimenti oltre ai potenziali problemi sui comandi "temporali" avresti quelli derivanti da un bootloader scritto e compilato per lavorare a 16MHz

La frequenza di 16 Mhz dei Arduini deriva dal ATmega8 che veniva usato sui primi Arduini. Quello era disponibile soloper 8 MHz. Poi usando il ATmega168 si é pensato di usare i 16 MHz per compatibilitá.

Se cambi la frequenza di clock senza ricompilare significa che tutte le cose che dipendono dal Clock vanno un 22% troppo veloci. Non Ti funzionerá la seriale.
È da creare una board con i paramtri nuovi come dice CrossRoads

Ciao Uwe

Dunque ricapitoliamo

Se modifico il file board sostituendo quello che trovo con quello quinsopra scritto l'at2560 gira a 20mhz
Unica incognita la seriale ma penso sia possibile fare qualcosa per evitare che si intoppi. Giusto ?

Per quanto riguarda il discorso di lavorare a piena flash io ho realizzato dei miei pcb dove ho saladato il micro

Ho lasciato i pienidi icsp poichè ci ho caricato il bootloader tramite un altro arduino usandolo come programmatore icsp

Questo per permettermi di usare una seconda piedinatura per caricare gli schetck via ftdi

Potrei caricare l'hex direttamente senza passare dal bootloader ma come utilizzando la porta icsp ? Che programma ?

Che vantaggi o che svantaggi ad avere il bootloader ?

A parte la seriale da correggere ( semmai come ) tutte le altre librerie sarebbero funzionanti ?

Rischi per il micro che dovrebbe lavorare 24/7 tutto l'anno ?

Grazie mille di cuore siete una risorsa di sapere fantastica

djdanielb:
Dunque ricapitoliamo

Se modifico il file board sostituendo quello che trovo con quello quinsopra scritto l'at2560 gira a 20mhz
Unica incognita la seriale ma penso sia possibile fare qualcosa per evitare che si intoppi. Giusto ?

Andrebbe aperto il file del core che imposta la seriale e controllato per verificare che possa andare anche a 20 MHz.

Per quanto riguarda il discorso di lavorare a piena flash io ho realizzato dei miei pcb dove ho saladato il micro

Ho lasciato i pienidi icsp poichè ci ho caricato il bootloader tramite un altro arduino usandolo come programmatore icsp

Questo per permettermi di usare una seconda piedinatura per caricare gli schetck via ftdi

Potrei caricare l'hex direttamente senza passare dal bootloader ma come utilizzando la porta icsp ? Che programma ?

Scaricati la guida di Michele Menniti
http://www.michelemenniti.it/arduino_burn_bootloader.php

Lì c'è tutto quel che ti serve.

Che vantaggi o che svantaggi ad avere il bootloader ?

Che puoi caricare gli sketch dalla seriale, però resta l'incognita dei 20 MHz di cui sopra.

A parte la seriale da correggere ( semmai come ) tutte le altre librerie sarebbero funzionanti ?

Dipende. Quelle scritte per sfruttare timer può darsi di no. Sarebbe anche qui una questione di timing.

Rischi per il micro che dovrebbe lavorare 24/7 tutto l'anno ?

Nessuno. Il chip è dato da mamma Atmel come compatibile fino a 20 MHz. Casomai occhio all'alimentazione che a quella frequenza deve stare senz'altro sopra ai 4,5V.

Io sono d'accordo con CrossRoads: dovrebbe bastare creare una nuova board con le stesse impostazioni fatta eccezione per la frequenza. Ad esempio per la UNO a 20MHz

uno.name=Arduino Uno 20MHz
uno.upload.protocol=arduino
uno.upload.maximum_size=32256
uno.upload.speed=115200
uno.bootloader.low_fuses=0xff
uno.bootloader.high_fuses=0xde
uno.bootloader.extended_fuses=0x05
uno.bootloader.path=optiboot
uno.bootloader.file=optiboot_atmega328.hex
uno.bootloader.unlock_bits=0x3F
uno.bootloader.lock_bits=0x0F
uno.build.mcu=atmega328p
uno.build.f_cpu=20000000L
uno.build.core=arduino
uno.build.variant=standard

Infatti, all'interno del file boards.txt sono presenti alcune board Arduino con clock a 8MHz e non mi risulta che il millis() per loro non funzioni regolarmente.

Ritengo,inoltre, che il compilatore vada a leggere non l'effettivo valore dei fuse ma il loro valore in questo elenco: perché altrimenti lo avrebbero inserito?

Ma è solo un'opinione: lascio agli altri esperti la valutazione della cosa.

cyberhs:
Ritengo,inoltre, che il compilatore vada a leggere non l'effettivo valore dei fuse ma il loro valore in questo elenco: perché altrimenti lo avrebbero inserito?

Il compilatore non legge nulla, tanto meno i valori dei fuse dei quali non se ne fa nulla, è una cosa che serve solo al programmatore hardware quando non si usa il bootloader, chi legge il boards.txt è l'IDE, in particolare legge il modello di micro, il tipo di bootloader e il clock per dire al compilatore per quale mcu deve creare e setta il clock che viene utilizzato durante il processo di compilazione per aggiustare i vari timing dipendenti da questo, seriale inclusa.
I valori dei fuse vengono utilizzati solo quando programmi Arduino utilizzando un programmatore hardware, p.e. lo sketch isp, direttamente dal IDE.
Dato che l'ho verificato personalmente sulla versione a 20 MHz della Luigino 328 posso confermare che funziona tutto ciò che è Arduino standard, ovvero tutte le librerie di serie fornite con l'IDE, solo la frequenza del PWM risulta maggiore per via dell'aumentata frequenza del quarzo e la necessità di mantenere costante la millis, infatti si passa da 490 Hz a 612 Hz, tutte le periferiche funzionano come atteso idem per le librerie, non serve nessuna modifica al core.
Però possono esserci problemi con librerie non ufficiali perché non utilizzano il valore di frequenza presente in boards.txt, usano un valore scritto al loro interno che è 16MHz o 8 MHz, e questo è il motivo per cui ho sconsigliato l'immissione sul mercato la versione a 20 MHz della Luigino 328, avrebbe portato ad una miriade di richieste assistenza per motivi futili, mi hanno dato ascolto :slight_smile:
Attenzione che per utilizzare Arduino a 20 MHz col bootloader è indispensabile ricompilarlo per questo clock, altrimenti non funziona, e caricarlo al posto di quello standard.

Cyb bada che sta parlando di Arduino MEGA (2560)

Michele, tu hai fatto delle prove col 2560 a frequenze maggiori dei canonici 16Mhz?

Dunque procederó come segue

Uso la 0023
Modifico il file board relativo al mega2560
Sostituisco il quarzo e lo metto a 20mhz
Riprogrammo il bootloader via icsp ( senza alcuna modifica giusto ?)
Ricarico lo sketch via ftdi

Dovrebbe funzionare tutto giusto ?

Uso come librerie

Rtclib
Dht22
Irsensor
Button
Ht1632c

Che dite ho presupposti per bensperare ?

Grazie mille dell'aiuto

Daniele

Usa la 1.0.5-r2. (http://arduino.cc/en/Main/Software#toc2)
Dalla 0023 alla 1.0.x la seriale è passata dalla modalità sincrona alla asincrona più un altro centinaio di modifiche.
Quasi tutte le librerie citate dovrebbero essere compatibili con l'ultima versione dell'IDE.

RTClib --> GitHub - adafruit/RTClib: A fork of Jeelab's fantastic RTC Arduino library
DHT22 --> GitHub - adafruit/DHT-sensor-library: Arduino library for DHT11, DHT22, etc Temperature & Humidity Sensors
HT1632 --> GitHub - adafruit/HT1632: Arduino library code for HT1632(C) matrix panel driver chips, and the panels we have in the Adafruit shop

Riprogrammo il bootloader via icsp ( senza alcuna modifica giusto ?)

Mi sa che dovrai ricompilarti anche quello, modificando la frequenza.
Però magari puoi provare ad usare quello standard a 144000 bps:
115200 * 20 /16 = 144000
e poi cambi
mega2560.upload.speed=115200
in
mega2560.upload.speed=144000
nel file di configurazione.
Se funziona hai risolto, dubito, ma tentare...

PaoloP:
Michele, tu hai fatto delle prove col 2560 a frequenze maggiori dei canonici 16Mhz?

No ma ricordo benissimo che molte volte si è discusso del fatto che il bootloader andasse adeguato alla nuova velocità e ricompilato, tant'è che Astro ne preparò uno proprio per il 328P a 20MHz, aprì un Topic appositamente per spiegarci tutto.

Button --> GitHub - carlynorama/Arduino-Library-Button: This is a library for adding buttons to Arduino projects. It supports events like OnPress and OnRelease.
IR Sensor??

Oppure: Button --> GitHub - JChristensen/JC_Button: Arduino library to debounce button switches, detect presses, releases, and long presses

Eccolo.

Comunque gli ultimi firmware ufficiali li trovate qui. Compreso il V2 per la Mega che risolveva il problema al WatchDog.
--> Arduino/hardware/arduino/avr/bootloaders at ide-1.5.x · arduino/Arduino · GitHub

L'ultimo optiboot per il 328P è il 5.0a --> Google Code Archive - Long-term storage for Google Code Project Hosting.
La versione 6.0 è in lavorazione e non attualmente rilasciata --> Redirecting to Google Groups

Dopo provo ad compilare con la versione 1.0 che qui ho disponibile ma mi sembra che avesse dei problemi.

Ovvero quelli tipici dei sketch che girano sotto le versione 1.0 e non sopra( wconstant?)

Certo ci sono circa 5000 righe di codice. Spero di non dover buttare tutto.

Possibile non ci sia lno guide o topic per un cambio simile di clock ?

Si trova il file board e il bootloader già adeguati al 20mhz ?

Grazie mille
Daniele

Prova a chiedere sul Forum internazionale, il file board si crea molto facilmente, ma il bootloader ti serve per forza?

Ho aggiunto questi target al Makefile dell'opiboot standard di Arduino

atmega328_20MHz: MCU_TARGET = atmega328p
atmega328_20MHz: CFLAGS += '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200'
atmega328_20MHz: AVR_FREQ = 20000000L
atmega328_20MHz: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
atmega328_20MHz: $(PROGRAM)_atmega328_20MHz.hex
atmega328_20MHz: $(PROGRAM)_atmega328_20MHz.lst

atmega328_isp_20MHz: atmega328_20MHz
atmega328_isp_20MHz: TARGET = atmega328_20MHz
atmega328_isp_20MHz: MCU_TARGET = atmega328p

512 byte boot, SPIEN

atmega328_isp_20MHz: HFUSE = DE

Low power xtal (16MHz) 16KCK/14CK+65ms

atmega328_isp_20MHz: LFUSE = FF

2.7V brownout

atmega328_isp_20MHz: EFUSE = 05
atmega328_isp_20MHz: isp

ho reso eseguibile omake e fatto
./omake atmega328_20MHz
et volià il botloader a 20Mhz
chi lo prova?

optiboot_atmega328_20MHz.hex.zip (884 Bytes)