Progetto Orologio Atmega

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Progetto Orologio Atmega

Postby paride22 » 24 Sep 2012, 17:52

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?
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby filosofo » 24 Sep 2012, 18:18

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
filosofo
 
Posts: 74
Joined: 23 Oct 2011, 09:52
Location: Dintorni di Roma

Re: Progetto Orologio Atmega

Postby omega25 » 24 Sep 2012, 18:57

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
omega25
 
Posts: 24
Joined: 04 Aug 2012, 09:33

Re: Progetto Orologio Atmega

Postby paride22 » 24 Sep 2012, 18:58

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?
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby paride22 » 24 Sep 2012, 19:06

allora come linguaggio sto programmando in Assembly...

Non capisco perchè nella formula dovrei sottrarre "1".
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby deluca » 24 Sep 2012, 19:12

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
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Progetto Orologio Atmega

Postby paride22 » 24 Sep 2012, 19:48

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,
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby flz47655 » 24 Sep 2012, 20:12

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
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Progetto Orologio Atmega

Postby deluca » 24 Sep 2012, 20:26

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
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Progetto Orologio Atmega

Postby paride22 » 24 Sep 2012, 20:27

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...
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby flz47655 » 24 Sep 2012, 21:18

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
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Progetto Orologio Atmega

Postby paride22 » 24 Sep 2012, 21:41

è solo un progetto universitario, non mi serve la precisione, ma devo riuscire a stimare in un anno quanti secondi perdo...
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby flz47655 » 24 Sep 2012, 21:50

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
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Progetto Orologio Atmega

Postby flz47655 » 24 Sep 2012, 22:18

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
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Progetto Orologio Atmega

Postby paride22 » 24 Sep 2012, 22:26

intanto chiedo il datasheet a quello che me l'ha venduto su ebay...
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby paride22 » 24 Sep 2012, 22:30

In che senso incertezza con cui taro l'ora? puoi farmi un esempio?
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby flz47655 » 24 Sep 2012, 22:34

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
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Re: Progetto Orologio Atmega

Postby paride22 » 24 Sep 2012, 22:48

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...
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby paride22 » 26 Sep 2012, 14:10

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?
paride22
 
Posts: 27
Joined: 24 Sep 2012, 17:45

Re: Progetto Orologio Atmega

Postby flz47655 » 26 Sep 2012, 14:16

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
flz47655
 
Posts: 639
Joined: 19 Jan 2012, 21:16

Next

Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 10 guests

cron