Page 1 of 2

Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 17:52
by paride22
Ciao a tutti, è la prima volta che scrivo su questo forum spero di trovarmi bene e se è possibile di riuscire ad aiutare qualcuno con quel poco che so...


Vorrei chiedervi se il ragionamento adottato per il mio progetto è corretto, e se ci fossero approcci migliori al problema:

Devo scandire il passaggio del tempo ed in particolare ho bisogno che venga richiamata una routine ogni 0.5s:

uC:Atmega8535
f=4MHz
Timer1 (16bit) mode CTC
CompareMatch=31250

è corretto il calcolo del Valore per cui deve "scattare" l'interrupt?

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 18:18
by filosofo
Salve paride22 e benvenuto al forum
vediamo se possiamo risolvere il tuo questito.....
attenzione io non sono un espertissimo e aspetterei conferma da altri per quello che ti sto dicendo.

mega8535 = 4 Mhz
prescaler = 64
target time = 500 msec

questi i valori di reload per ottenere un handler int Timer1 ogni 500 mSec

TCNT1H = 0x85
TCNT1L = 0xEE
OCR1H = 0x7A
OCR1L = 0x11

si ottiene un Actual Time pari a 500.000 mSec con un
error % pari a 0%

ciao

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 18:57
by omega25
ciao paride, benvenuto
in che linguaggio stai programmando?

allora secondo i miei calcoli
con 4Mhz fissando il prescaler a 256 il valore
CTC = (4000000/256)-1 = 16624

il valore CTC dovrebbe andare sui registri COMPARE
a questo punto si dovrebbe avere un interrupt ogni secondo... ma non vorrei sbagliare.

perchè non usi l'oscillo o un simulatore? così ci dai conferma della formula.
ciao

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 18:58
by paride22
si infatti avevo dimenticato di indicare il prescaler (anche io l'ho impostato a 64)

Solo che io avevo appunto calcolato il valore 0x7A12


;MaxValue 31250(f=4Hz prs=64)0x7A12 , halfsecond passed
ldi temp,0x7A
out OCR1AH,temp
ldi temp,0x12
out OCR1AL,temp


poichè avevo calcolato il valore nel seguente modo, se con tali impostazioni il timer esegue 62500 conteggi al secondo
(max value 2^16-1=65535)

allora per 0.5s devo caricare il valore 31250 praticamente la formula farebbe OCR1=(fCK/prs)*t dove t è appunto il tempo per cui voglio far scattare l'interrupt...


Mi spieghi dove sto sbagliando?

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 19:06
by paride22
allora come linguaggio sto programmando in Assembly...

Non capisco perchè nella formula dovrei sottrarre "1".

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 19:12
by deluca
salve ragazzi,
allora, quando si usa il timer1 in modalità CTC impostando il prescaler a 64
volendo generare l'int ogni 500mSec il valore risultante per OCR1 è pari a 0x7A11
il fatto del -1 lo troverai sul pdf del micro.

Ancora benvenuto a Paride22

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 19:48
by paride22
Rileggo il datasheet e vedo di capire il perchè...
avrei un'ultima domanda, almeno su questo argomento...

Come faccio a calcolare l'errore commesso? ovvero voglio sapere quanti secondi "perde" in un anno il mio orologio...

Considerando il valore corretto 0x7A11,

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 20:12
by flz47655
Benvenuto

Supponendo nullo l'errore logico dovuto al contatore hai l'errore dovuto al clock che non è perfetto, sopratutto se usi un clock interno.. anche i cristalli hanno i loro limiti, la frequenza varia in genere con la temperatura a meno che non siano compensati

Secondo me la cosa migliore è usare i pin TOSC1 and TOSC2 (PC6 e PC7) con un cristallo da 32.768 kHz di buona qualità visto che questi pin sono pensati apposta per questo:

For AVR microcontrollers with Timer/Counter Oscillator pins (TOSC1 and TOSC2), the
crystal is connected directly between the pins. No external capacitors are needed. The
Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external
clock source to TOSC1 is not recommended

da pag.31 datasheet

Ciao

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 20:26
by deluca
quello di usare il TOSC1/2 sembrerebbe la scelta più oculata in termini di precisione....
purtroppo però nei nostri progetti abbiamo potuto constatare che questo metodo non risulta ottimale per il fatto che è difficile trovare dei quarzi da 32768 stabili in temperatura.
alcuni fornitori te li garantiscono ma purtroppo poi.........
è necessario che anche questo venga compensato in temperatura.....magari tenendolo caldo, a meno che non se ne trovi uno in oro zecchino :) scherzo naturalmente....

PS. con prescaler=64 clock=4Mhz con il valore x7A11 l'errore in percentuale è zero%.

ciao

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 20:27
by paride22
Grazie dell'intervento, avevo letto anche io questa cosa sul datasheet, ma avevo già un "crystal oscillator" in casa..

Quindi dipende tutto dalla qualità del cristallo?
La sigla che è presente sul mio cristallo è la seguente "Y/C4.0000A2" a quanto ho capito da quanto mi ha detto il mio professore, dipende perdonatemi il temine "dalle cifre decimali"...

qualcuno saprebbe spiegarmi meglio?
come faccio a capire quanti secondi perdo all'anno?

PS. con prescaler=64 clock=4Mhz con il valore x7A11 l'errore in percentuale è zero%.

Il mio professore mi ha chiesto esplicitamente di determinare l'errore, anche dicendo che l'errore percentuale è nullo, come giustifico analiticamente, o in qualsiasi altro modo questa affermazione?


il fatto del -1 lo troverai sul pdf del micro

Ho riguardato la parte del datasheet sul micro riguardante i TimerCounter, ma non sono riuscito a capirne il motivo...

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 21:18
by flz47655
Ciao,
Con quel cristallo non andrai lontano.. se non hai bisogno di un orologio atomico con un quarzo TCXO (compensato in temperatura) ottieni sicuramente risultati migliori di quarzi non compensati od oscillatori interni.

Se ti serve una grande precisione ti suggerisco qualcosa come http://www.maximintegrated.com/datasheet/index.mvp/id/2940 se non hai da badare al prezzo.
Con questo componente hai una precisione (da datasheet) di ±1 Minute/Year (0°C to +40°C)

Ciao

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 21:41
by paride22
è solo un progetto universitario, non mi serve la precisione, ma devo riuscire a stimare in un anno quanti secondi perdo...

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 21:50
by flz47655
Supponendo un clock perfetto non perdi neanche un secondo se imposti il contatore correttamente.
In realtà invece l'errore non è zero ma è determinato dalla qualità del cristallo, dovresti avere un datasheet del cristallo che utilizzi per poterlo stimare anche solo qualitivamente in quanto è determinato in gran parte delle condizioni ambientali. Si parla di minuti all'anno non secondi, ad ogni modo un'errore aggiuntivo potrebbe essere l'incertezza con cui "tari" l'ora inizialmente.
Dalla sigla purtroppo non riesco a risalire ad un datasheet

Ciao

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 22:18
by flz47655
Per farti un'idea di un oscillatore non compensato prova ad esempio a vedere il datasheet http://www.abracon.com/Resonators/ab.pdf tieni conto poi che le prestazioni degradano col tempo

Ciao

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 22:26
by paride22
intanto chiedo il datasheet a quello che me l'ha venduto su ebay...

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 22:30
by paride22
In che senso incertezza con cui taro l'ora? puoi farmi un esempio?

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 22:34
by flz47655
Ad esempio quanto imposti l'ora nell'orologio la sincronizzi in modo imperfetto con l'ora di un altro orologio, puoi avere una precisione di +-1 secondo con una taratura manuale, questo probabilmente è un aspetto secondario

Ciao

Re: Progetto Orologio Atmega

PostPosted: 24 Sep 2012, 22:48
by paride22
ok ho capito cosa intendi dire, quindi per ora devo solamente trovare il datasheet...

Tuttavia non riesco ancora a capire perchè la formula per determinare OCR=[(fcK/prs)*t]-1 anzi non riesco a trovarlo nel datasheet...

Re: Progetto Orologio Atmega

PostPosted: 26 Sep 2012, 14:10
by paride22
nessuna indicazione?
dal datasheet non ho ricavato la formula che mi serviva :(


e non sono riuscito a trovare neanche il datasheet del cristallo (comrato su ebay), dalle cifre decimali non riesco a fare una stima dell'errore dovuto alla precisione di quest'ultimo?

Re: Progetto Orologio Atmega

PostPosted: 26 Sep 2012, 14:16
by flz47655
Se hai un frequenzimetro od un oscilloscopio di adeguata velocità potresti provare a misurare il clock generato per vedere se è proprio 4 MHz.. anche se sicuramente questa prova "non fa testo" è meglio di niente

Ciao