Interne oscillator PIC16F6990 onnauwkeurig

Wanneer ik dmv de instructies PORT HIGH, delayms 1, PORT LOW, een puls van bijv 10 msec genereer met een PIC16F690 met een (extern) kristal van 4 MHz dan is het resultaat voor mijn beide exemplaren PIC16F690 correct.
Wanneer ik echter overga op de interne oscillator, met OSCTUNE =%00000,(de fabrieksgecailbreerde frequentie), dan is de puls van één exemplaar 5% langer en van het andere exemplaar ruim 20% langer. Dit valt ruimschoots buiten de gespecificeerde nauwkeurigheid in het datasheet.
Heeft iemand hier een verklaring voor ?

Het is al weer even geleden dat ik iets met PIC controllers heb gedaan, maar veroorzaakt het aanpassen van osctune juist niet dat de interne oscillator wordt verstemd van de fabrieks calibratie?

Onderling zullen de controllers aardig kunnen verschillen, de calibratie zorgt er voor dat ze weer gelijkgetrokken worden.

Anoniem

Ik programmeer met Proton en daar gebruik ik de instructie SET_OSCCAL om de fabriekscalibratie te gebruiken en OSCCAL = %???????? om zelf een calibratiewaarde in te stellen.

Lijkt erop dat je dus niet de fabriekscalibratiewaarde gebruikt.
Het is dan heel normaal dat de frequentie van de interne oscillator niet hetzelfde is voor beide controllers

Waarde van de fabriekscalibratie vind je op het voorlaatste adres van het programma geheugen. Deze moet je uitlezen vóór je de microcontroller een eerste keer programmeert. Anders is de waarde gewist en kun je de fabriekscalibratie niet meer gebruiken. :-(

Arco

Special Member

Een goede programmer saved de OSCCAL waarde en zet die weer terug. Als die nu zoek is, wordt 't een kwestie van uitproberen...

[Edit]
Ik zie dat de 690 geen OSCCAL heeft. Er staat wel dat de interne 8MHz oscillator worst-case een tolerantie van +/-5% heeft...
De LF oscillator kan zelfs tussen 15 en 45kHz varieren...

[Bericht gewijzigd door Arco op maandag 31 augustus 2015 23:31:04 (44%)

Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com

Er zit niet veel anders op dan te experimenteren met SetOSCTUNE.

Just find out what you like and let it kill you

Tot nu toe heb ik de calibratie zo geïnterpreteerd dat met
OSCTUNE =%00000 de oscillator op de nominale frequentie staat en dat door OSCTUNE andere waarden te geven hiervan kan worden afgeweken.
Echter als het zo is dat de calibratie met OSCTUNE wordt gedaan dan blijf ik toch nog met het probleem zitten dat mijn exemplaar met meer dan 20% afwijking hiermee niet voldoende kan worden gecorrigeerd. Met maximale tuning kom ik niet beter dan tot op 5% van de gewenste waarde.

In mijn toepassing moet ik een zekere nauwkeurigheid bereiken tbv een klok die via een Timer1 interrupt wordt gestuurd. Aangezien dit zo nauwkeurig mogelijk per 500 msec moet gebeuren tune ik dit door bij elke interrupt de Timer1 registers een kleine bias te geven en daarmee kan tevens de afwijking van de oscillatorfrequentie worden gecorrigeerd.

Al met al heb ik dus geen probleem, maar verbaas mij wel over de grootte van de frequentieafwijkingen.

Dan zit er niets anders op dan een extern kristal te gebruiken.

Just find out what you like and let it kill you