Hi Allemaal,

Ik ben van plan om een klok te maken met een 16F870 PIC, naast de klok moet de PIC ook nog andere functies uitvoeren. Door gebruik te maken van een interrupttimer probeer ik de tijd altijd noukeurig te bepalen.

Het programmeren van die PIC is het probleem niet, ik vraag me alleen af of een normale 20Mhz kristal noukeurig genoeg is zodat de klok (als de berekeningen kloppen) altijd goed loopt.

Moet ik misschien een speciale kristal gebruiken... Het mooiste zou zijn als ik gewoon een normale kristal kan gebruiken...

Alvast bedankt,

een klok die altijd goed loopt, bestaat dat?

naja precies gelijk lopen hoeft ook niet... maar niet zodat hij over een dag meteen 5 min verkeert loopt...

De nauwkeurigheid van een 'standaard' kristal is meestal zo rond 20 a 30 ppm, bij goede aansluitcapaciteit en dergelijke... of dat genoeg is weet ik natuurlijk niet ;)

20 ppm is een kleine 2 seconden op een dag.

[Bericht gewijzigd door Ben_ op ]

misschien domme vraag, maar wat bedoel je met 20 a 30 ppm? Ok tuurlijk logisch parts per million...

[Bericht gewijzigd door RonRon op ]

TCXO zijn van die rechthoekige blokjes die ook een spanning van 5 volt nodig hebben, en hebben dan een afwijking van 1-5 ppm, dat is dan nog iets nauwkeuriger.

GR Richard

PS. PPM staat voor parts per million. In 1 MHz is dat dan een maximale afwijking van 30 Hz. Een miljoenste deel van 1 MHz is 1Hz x 30.

[Bericht gewijzigd door Amateur19 op ]

hmmm 2 seconde... kan ik nog mee leven misschien... ff denken stel je voor na 4 weken... 56 seconde achter lopen... kan wel...

ik lees net dat er ook TCXO's zijn met een mogelijke noukeurigheid van zo'n 0,1 ppm... klinkt interresant... ik zal eerst zelfs eens gaan experimenteren met een gewone 20Mhz Kristal met 2 18 pF Condensatoren...

Als je een gewone X-tal oscillator bij een min of meer constante (kamer-) temperatuur laat werken en hem ook nog eens voorzichtig goed afregelt haal je volgens mij prima resultaten.

Want ik weet niet zo goed hoe je die 20 ppm "tolerantie" moet interpreteren ? hoort daar dan een temperatuurbereik bij ?
Of zijn die x-tallen gewoon niet zo stabiel ?

Er zijn toch zgn "horloge-kristallen" verkrijgbaar?
(heb ik wel eens van gehoord tenminste)

Voor (kwaliteits-)horloges is die preciesie nodig.
En ik dacht dat die ook in PC's gebruikt werden
om de tijd accuraat bij te houden.
De tijd op je PC loopt op een jaar nog geen minuut verkeerd.

Die horloge-xtallen zijn speciaal geslepen op een lage frq (32 kHz) omdat dat nogal wat energie scheelt, en dat is belangrijk in een horloge.

Mijn pc is overigens helemaal niet zo nauwkeurig, maar ik laat m af en toe syncen.

Die horloge kristallen zijn kristallen van 32768Hz. Als je dit deelt door 2^15 kom je op een puls uit van 1 seconde, wat dus erg handig is voor horloges. Laatst vond ik idd een moederbord waar er (gelukkig, zocht er namelijk een ;)) ook eentje op zat. Voor zover ik weet zijn deze echter niet extra nauwkeurig ofzo... Ze zitten in zo'n ronde behuizing ipv. een rechthoekige.

Als de applicatie wordt gevoed vanuit het lichtnet kun je ook deze 50Hz frequentie gebruiken voor je klok, deze wordt namelijk aan het eind van de dag bijgesteld zodat wekkerradio's (die bijna altijd op hetzelfde principe werken) goed blijven lopen.

Op 21 februari 2005 14:04:39 schreef RonRon:
Ik ben van plan om een klok te maken met een 16F870 PIC, naast de klok moet de PIC ook nog andere functies uitvoeren. Door gebruik te maken van een interrupttimer probeer ik de tijd altijd noukeurig te bepalen.

Neem een horloge-kristal van 32768 Hz. :-)

Beste mensen,
De vraag is of bestaat iets dat als externe klok gebruikt kan worden. De probleem is dat de tijd moet op de display weergegeven worden alleen als het apparaat in standby mode is, en als die in het bewerking van iets is, kan de klok natuurlijk niet bij gehouden worden... want we gebruiken geen mutiprocessing in onse PIC16F877...

Ik zie hier 2 oplossing:
1. twee microkontrollers gebruiken. Zo dat de ene zorgt voor de tijd en de tweede over het hooft bewerking. Als het apparaat in de standby mode is neemt de eerste microcontroller het control op het display en heeft de tijd weer.
2. een chip gebruiken... net als in een gewone PC

P.S. Sorry dat ik tot nu toe zo veel fouten in de text heb.. ik heb nu niemand bij me die kan die fouten ff verbeteren

alleen als het apparaat in standby mode is, en als die in het bewerking van iets is, kan de klok natuurlijk niet bij gehouden worden

Precies, daarom gebruik je dus een apart kristal, dat om de zoveel tijd een puls geeft.
Die wordt opgevangen in een interrupt-routine en de interne "klok" van de microcontroller wordt dan bijgewerkt.
Exact zoals in een PC.

Een echt RTC-chipje (Real Time Clock) lijkt me het handigste, die loopt dan altijd door en zoiets heeft dan vaak gelijk ook backup-voedingsvoorzieningen enzo. :)

Sorry,te laat verstuurd...

Dat vind ook mooi idee... maar bestaat toch iets wat gelemaal compleet is? zo dat de hoofd applicatie mag zonder interuppen werken... als de tijd nodig is kan die altijd gevraagd worden...

Die horloge kristallen zijn kristallen van 32768Hz. Als je dit deelt door 2^15 kom je op een puls uit van 1 seconde, wat dus erg handig is voor horloges.

Het bij houden van die tijd in niet zo moeilijk NIN, een teller in de intterupthandler maken die een maximale getal kan bevatten per dag of uur...of misschien opgedeelt... Als de Klok in de modes staat om tijd weer tegeven hoeft hij alleen dat speciale getal om te zetten in leesbare tijd...

De interrupthandler heeft dan een constante uitvoeringstijd.

De schakeling wordt er niet betrouwbaarder op als je allerlei toeters en bellen er aan ga hangen...

[Bericht gewijzigd door RonRon op ]

RON, Dat gaat niet om het energie. Iedere keer als er een externe interupt komt, wordt de houdige routine gestopt, en wordt de andere die gaat de 2 byte variable incrementen gestart. Als deze variable 32768 bevat dat betekent dat een seconde is voorbij.
In de Randori Klok mag dat wel... maar stel dat ik geen interups mag gebruiken.. wat dan?

Waarom zou je geen intterupts mogen gebruiken? Interrupt geeft oplossing tot velen problemen, zoals ook in dit geval...

Er bestaan real-time clock modules met kristal, ingebouwde controller, backup-batterij en I2C interface. Meestal in een gewone DIL behuizing, en vaak krijg je er dan ook nog een paar honderd bytes RAM bij. Kijk maar eens op de sites van bv. Texas Instruments.

Iedere keer als er een externe interupt komt, wordt de houdige routine gestopt

Dat hangt er maar net van af, welke microcontroller je gebruikt.
Sommige hebben idd verschillende interrupt-niveau's, maar bij andere blijft de nieuwe interrupt-aanvraag gewoon staan totdat de huidige ISR klaar is.

die gaat de 2 byte variable incrementen

Je kunt toch 3 bytes, 4 bytes, enz... gebruiken?
Zoveel als je nodig hebt.

[edit]16F870 datasheet pag. 13: "The RESET vector is at 0000h and the interrupt vector is at 0004h."
Je hebt maar 1 interrupt vector, dus geen verschillende interrupt-niveau's.
Als er een interrupt optreedt terwijl je ISR bezig is, dan wordt de ISR niet onderbroken.
De nieuwe interrupt blijft staan totdat de ISR klaar is.
[/edit]

[Bericht gewijzigd door logic op ]

OMG noukeurigheid! Ok dat je dat één keer fout schrijft :)
Maar na enkele posts waarin het wél goed gespeld wordt zou je toch denken dat je het goed kan spellen :p
Het is dus NAUWkeurigheid. |:(

Ja, en het is MIERENneuker.

Post wat zinnigs of hou je mond.

ja logic dat is wat ik bedoel hij springt gewoon terug naar het adres waar je was gebleven... zo blijft het programma heel NOUWKEURIG...

[Bericht gewijzigd door RonRon op ]