RTC con pic

Ciao!

Vorrei realizzare un orologio con un PIC, il + preciso possibile Per massimizzare la precisione mi sono venute in mente queste soluzioni (suppongo costante la temperatura):

1) quarzo da 16.384MHz, uso l'interrupt del timer1 e ottengo 16384000/(4*1*65536)=62.5 interrupts al secondo. In questo modo non devo mai scrivere sul timer1... E' giusto dire che quando ho contato 62.5*2=125 interrupts del timer1 sono passati esattamente 2 secondi? Oppure quello 0.5 è casuale e non posso "eliminarlo"? 2) quarzo da 32.768MHz -> contatore per dividere di un fattore 4 -> attivo PLLX4 e quindi ottengo 32768000/(4*1*65536)=125 ints_per_sec

Secondo voi quale soluzone è migliore? Grazie per eventuali consigli!

Reply to
ice
Loading thread data ...

"ice" ha scritto nel messaggio news:BbKkd.308237$ snipped-for-privacy@news4.tin.it...

copio incollo dal datasheet del pic16f87/88

7.11 Using Timer1 as a Real-Time Clock

Adding an external LP oscillator to Timer1 (such as the one described in Section 7.6 "Timer1 Oscillator", above), gives users the option to include RTC functionality to their applications. This is accomplished with an inexpensive watch crystal to provide an accurate time base, and several lines of application code to calculate the time. When operating in SLEEP mode and using a battery or super capacitor as a power source, it can completely eliminate the need for a separate RTC device and battery backup. The application code routine, RTCisr, shown in Example 7-3, demonstrates a simple method to increment a counter at one-second intervals using an Interrupt Service Routine. Incrementing the TMR1 register pair to overflow triggers the interrupt and calls the routine, which increments the seconds counter by one; additional counters for minutes and hours are incremented as the previous counter overflow.

copio incollo dal datasheet del picf 18F2220/2320/4220/4320

Peripheral Highlights: . High current sink/source 25 mA/25 mA . Four external interrupts . Four input-change interrupts . Four 8-bit/16-bit Timer/Counter modules . Real-Time Clock (RTC) Software module:

- Configurable 24-hour clock, calendar, automatic

100-year or 12800-year, day-of-week calculator

- Uses Timer1 . Up to 2 Capture

Saluti

--
SB

----------------------------------------------------------------
Rimuovere i caratteri accentati per rispondere
Reply to
Simone.bern

Io ne ho fatto uno con un quarzo da 32.768 KHz usando il Timer0 ottieni facilmente un tempo di 1 secondo o multipli

Ovviamente il PIC in questo caso funziona in LP ed e' molto lento, ma dipende dall'applicazione. Per pilotare un display non in multiplexer non ci sono problemi

ciao

Reply to
Giuss

Intanto: grazie per la risposta

Dunque: sapevo che il pic16f88 aveva queste funzionalià ma purtroppo con ic-prog non si programma e quindi l'avevo scartato... gli altri pic che mi hai proposto sono invece una valida alternativa, semplicemente cercavo all'interno della serie 16x e non li avevo visti! Se posso preferirei fare con un pic16x perchè costano meno Tornando quindi alla mia domanda, tu come procederesti (supponendo di usare ad esempio un 16f84a)?

Grazie ancora Ciao!

Reply to
ice

Sapresti farmi una stima indicativa della precisione che hai ottenuto? Che ne so: in un anno sbaglia di 1 minuto?

Grazie, ciao!

Reply to
ice

Ho realizzato un orologio con un 16F84 utilizzando il timer0 e un quarzo da

4.194304MHz, con prescaler a 256, quindi ogni sedici chiamate di interrupt(non so se è il termine giusto, correggetemi se sbaglio) hai un secondo. L'ho provato facendo una comparazione con un orologio da polso buono, e dopo circa 50 minuti erano a pari. Non ti so dire nulla a lungo termine però perchè adesso non lo uso più, però parlando con un mio prof di Strumentazione ho saputo che anche a lungo termine hanno buone prestazioni. Spero di esserti stato utile. Ciao ciao

Ste

Reply to
Ste

E' una soluzione possibile!

A breve termine (1 giorno) diciamo che va bene un po' tutto. Avere buona precisione a lungo termine significa sbagliare di 1 secondo in un anno... cmq il fattore che da problemi a livello sw è lo scrivere sul timer per impostare ogni quanto deve lanciare un irq. Quindi usando quarzi particolari (come nel tuo caso o nella souzione che proponevo io) si evita questo passaggio e si ottiene "il massimo" Poi c'è da considerare che tutti i quarzi sono soggetti alla temperatura e quindi non oscillano in maniera costante. Per risolvere questo problema di solito si usa un TCO (oscillatore compensato in temperatura)...

Grazie per il suggerimento; seguirò sicuramente questa strada dato che ho in mano un 16f84a!

Ciao!

Reply to
ice

Dipende dal quarzo, aggiungendoci un compensatore si puo' arrivare alla precisione da te indicata

Poiche' si ottiente facilmente un interrupt di 1 secondo senza mai azzerare o modificare il timer0 via software, quindi non ci sono errori o ritardi dovuti al programma del PIC

ciao

Reply to
Giuss

"Giuss" ha scritto

Gia', ma occorre anche un OTTIMO frequenzimetro per la taratura ;)

E per non disturbare l'oscillatore e' meglio misurare una frequenza prodotta via software.

ciao Claudio F

Reply to
Claudio F

Ma questo ci vuole in qualsiasi oscillatore quarzato con PIC o senza... intendevo dire che con il mio sistema non si introducono ulteriori ritardi dovuti al software del PIC e quindi la precisione dipende solo dal quarzo

Poi ci sarebbe anche il vecchio metodo di vedere quanto sbaglia l'orologio e provare a girare un po' il compensatore andando a tentativi

ciao

Reply to
Giuss

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.