Fuse Bits ATMEGA328

Salve ragazzi, ho da porvi alcuni quesiti per il corretto settaggio dei fuse bits.
Partendo dal presupposto che ho capito cosa sono e a cosa servono mi rimane ancora alcuni dubbi su come settarli (prima di combinare un pastrocchio mi informo).
Partendo, ad esempio, da questo articolo del grande Leonardo e che saluto, non viene specificato come ad esempio impostare un oscillatore esterno a 16mhz.
CKDIV8 = 1
CKOUT = 1
SUT1 = 1
SUT0 = 0
CKSEL3 = ??
CKSEL2 = ??
CKSEL1 = ??
CKSEL0 = ??

e poi ancora, se non volessi allocare alcuna memoria per il bootloader ed utilizzare l'intera memoria per il programma come devo settare
BOOTSZ1 = 1 ??
BOOTSZ0 = 1 ??
BOOTRST = ??

Legenda : ?? senza alcun valore anteposto vuol dire tabula rasa
se vi è 1 o 0 anteposto al simbolo vuol dire non ne sono convinto.

Sono ben accetti link che sviscerano la materia :smiley:

Usa questo:

http://www.engbedded.com/fusecalc/

miky_police:
... che sviscerano la materia :smiley:

Per "sviscerare" la materia, l'unica cosa è lo studio del datasheet.

Poi invece, senza approfondire, ci son un'infinità di programmini, anche via web, che te li calcolano ... ma certamente non ti permettono di "sviscerare" la materia :wink:

Guglielmo

Ringrazio entrambi... :wink:
Mi cimento... in caso di limitazione celebrale vi rompo di nuovo :smiley: :smiley:

Pag. 49 CKSEL3..0 external 0000
Partiamo da questo :smiley:

Quello è per avere un "External Clock", ovvero il clock (un onda quadra) che arriva da un chip esterno (magari un chip di clock ad altissima precisione, volendo anche termostabilizzato) ... da NON confondere con un quarzo o un oscillatore ceramico che metti sui due pin dedicati.

Se sbagli quello sei fregato ... perché poi la MCU si aspetta tale clock e ... non modifichi piû neanche i FUSE senza un programmatore HV o un oscillatore esterno che dia il clock.

Maggiori dettagli al punto 13.8 del datasheet.

Guglielmo

Beh fregato non proprio Guglielmo, è capitato..., cosa dici lo resuscitiamo iniettiando un ck mediante un oscillatore esterno, 3 filetti (gnd,vcc e ck) e gli diamo la "scossa" come con il defibrillatore :slight_smile:

C'è un fork di ArduinoISP che genera un clock sul pin 9 che dovrebbe bastare almeno per risettare i fuse a un valore corretto.

icio:
Beh fregato non proprio Guglielmo, è capitato…, cosa dici lo resuscitiamo iniettiando un ck mediante un oscillatore esterno, 3 filetti (gnd,vcc e ck) e gli diamo la “scossa” come con il defibrillatore :slight_smile:

Icio … leggi bene quello che ho scritto …

gpb01:
… non modifichi più neanche i FUSE senza un programmatore HV o un oscillatore esterno che dia il clock.

:smiling_imp:

Guglielmo

Allora, leggo e rileggo il datas…(censored) :smiley:
Clock esterno: va considerato il tipico quarzo e ceramici come low power Crystal oscillator, giusto?
Differenze con il full swing?
Purtroppo navigo nel buio e remo con Google…
Grazie e scusate per le apparenti futili domande…

miky_police:
Clock esterno: va considerato il tipico quarzo e ceramici come low power Crystal oscillator, giusto?

NO, NO, e NO, ... ma lo hai letto con attenzione il mio post #5 ? ? ? :o :o :o

Guglielmo

gpb01:
NO, NO, e NO, ... ma lo hai letto con attenzione il mio post #5 ? ? ? :o :o :o

Guglielmo

scusa Guglielmo, forse ho scritto in modo fuorviante. Clock esterno non inteso come da post #5.
ti giuro che ci sto sbattendo la testa come non mai... sai che goduria quando comprenderò :smiley:
Pag 49 tabella 13.1
i settaggi suggeriti per il mio scopo sono quelli alla voce Low Power Crystal oscillator.
Full swing -> non so cosa è anche se leggendo è molto simile al low power, ma non credo che faccia il mio caso.
LOW frequency -> ma anche no, grazie... Non ho problemi di batteria.
internal 128 khz-> come low frequency e poi non si può nemmeno usare l'ide e l'ambiente Arduino se non leggevo male da Leonardo Miliani
calibrate internal -> come low frequency
external clock-> vedi post #5 Guglielmo
reserved -> non so, ma sicuramente non è quel che cerco.
Sono sulla giusta strada?

La tabella 13-1 è piuttosto chiara ed esplicativa:

Low Power Crystal Oscillator      1111 - 1000
Full Swing Crystal Oscillator     0111 - 0110
Low Frequency Crystal Oscillator  0101 - 0100
Internal 128kHz RC Oscillator     0011
Calibrated Internal RC Oscillator 0010
External Clock                    0000
Reserved                          0001

… ed ogni singola voce è molto ben spiegata nei successivi paragrafi del data sheet:

Low Power Crystal Oscillator      13.2.3 e 13.3
Full Swing Crystal Oscillator     13.4
Low Frequency Crystal Oscillator  13.5
Internal 128kHz RC Oscillator     13.7
Calibrated Internal RC Oscillator 13.6
External Clock                    13.8

Ora … come te la cavi con l’inglese? Perché in quei paragrafi è chiaramente spiegata ogni singola opzione … ::slight_smile:

In ogni caso TU cosa devio attaccare al ATmega328P? Un quarzo con i suoi due condensatori? O hai una sorgente di clock esterna (un chip che genera un onda quadra)? O vuoi usare il clock interno?

Guglielmo

voglio semplicemente collegare quarzo a 16 MHz e condensatori da 22pF come ogni standalone che abbia mai fatto... il discorso è che non voglio fare le cose alla Charlie Chaplin che tornava a casa che stringeva ancora bulloni... quindi ho iniziato a sviscerare un po, forse spingendomi oltre le mie capacità (da perito tecnico agrario ad elettronica qualcosina cambia di base)... ::slight_smile:
l'inglese non è il mio forte, ma con il Note 8 ed il suo pennino si fanno miracoli, altro che copia incolla su traslate...
Tornando al discorso, adesso mi è un po più chiaro. Ricado nella casistica dei fuse CKSEL3..1 111, adesso tocca al SUT10 assieme al CKSEL0, sapendo che sono già dei fuse che settano una specie di delay (cicli di clock) per avere una certa stabilità sull'oscillatore.
Anche qui sembra che i valori da settare siano CKSEL0 1 SUT10 11. Confermi? Se si a ho un'altra domanda.
E se mettessi questi ultimi 3 fuse a 110 come suggerito nel fast rising si può incappare in problemi di sorta?

chiedo scusa a tutti se vi sto annoiando...

L'obbiettivo di tutto questo sviscerare è quello di creare prima lo standalone con porta icsp e poi programmarlo, a differenza di come faccio ora che sono costretto a "bruciare" prima il bootloader sul chip (versione AU) e poi saldarlo predisponendo sempre un attacco seriale per la riprogrammazzione, o peggio ancora andare ad inserire un ftdi direttamente sul pcb con porta USB... e comunque devo sempre prima effettuare una scrittura del bootloader con l'adattatore... tutto per paura dei CONfuse bits :smiley:

Continuo a leggere il datasheet. Mi sono posto un esempio. Risuonatore ceramico a 16Mhz.
E’ giusto il low fuse 0xCF ovvero 11001111?
Da quanto leggo sembra essere così. Lo so Guglielmo che non puoi starmi dietro con queste domande imbarazzanti… ::slight_smile:

miky_police:
Lo so Guglielmo che non puoi starmi dietro con queste domande imbarazzanti... ::slight_smile:

... e che ogni tanto, anche io mi allontano :grin:

Allora, ma vuoi usare un quarzo o un risuonatore ceramico (... che ti sconsiglio)? Usa un quarzo e di buona qualità ... millis() ringrazierà :smiley: :smiley: :smiley:

Guglielmo

Grazie Guglielmo per la disponibilità. Il fatto è che ovviamente Preferisco il quarzo al risuonatore ceramico, Ma se riesco a capire come settare i fuse potrò scegliere di volta in volta in base al progetto da realizzare. Ritornando al mio post 14 in caso di risuonatore ceramico sarebbero settati correttamente i low fuse?
In caso di quarzo avrei optato per 0xFF.
Corretto?

Allora, intanto ricorda che Arduno UNO monta un risuonatore ceramico e NON un quarzo, per cui, il valore 0xFF che trovi per LF è dato per detto risuonatore :slight_smile:

In realtà i FUSE non distinguono più di tanto tra un risuonatore ceramico ed un vero quarzo, salvo per:
[0] le due possibilità Low Power Crystal Oscillator e Full Swing Crystal Oscillator dove, la seconda, garantisce una maggiore immunità al rumore, a scapito di un leggero consumo superiore e del limite inferiore di tensione di alimentazione che sale a 2.7V
[0] lo "Start-Up Time" (vd. tavole 13-4 e 13-6)
Personalmente, in una schedina che ho da poco realizzato, che monta un ATmega1284P (128K di flash, 16K di SRAM) ed un vero quarzo (in formato SMD), per non avere nessun tipo di problemi, ho dovuto impostare i LF al valore di 0xD7 (ho il BOD attivo) ... valore che ho però "scoperto" sperimentalmente dato che, con ritardi superiori (bits SUT0-SUT1), a volte, non funzionava bene il POR ::slight_smile:

Guglielmo

gpb01:
...
Personalmente, in una schedina che ho da poco realizzato, che monta un ATmega1284P (128K di flash, 16K di SRAM) ed un vero quarzo (in formato SMD), per non avere nessun tipo di problemi...

per vero quarzo intendi tipo questo o c'è di meglio?
E n'altra te la faccio dato che ci sono.. :smiley:

Intendo QUESTO.

Guglielmo

_Edit: Non so come mai, ma il link al datasheet che c’è ora sul sito di Mouser … NON è corretto (appare quello per i _ST2012SB)**, quello corretto, per i CX2520DB è quello che ti metto in allegato.

CX2520DB16000E0FGHCC (Crystal).pdf (74.7 KB)