1Hz Med PIC 16F628 ?
1Hz Med PIC 16F628 ?
Hur gör jag för att få en av portarna på min 16F628 att klocka i exakt 1Hz, ska nämligen ha det till en klocka.
Man kan använda en klockkristall på 32768Hz. Om man delar den med 2^15 så får man 1Hz. Man kan även använda kristaller för andra frekvenser.
Om du vill använda pic:en till andra saker som att driva en display, alarm, något användarinterface för inställningar av tid mm och ändå ha en hög noggrannhet så kan det kanske vara en god idé att generera klockans tidsreferens utanför pic:en. Klocka pic:en med en hög frekvens (MHz) och kolla några hundra (exakt hur många är inte kritiskt) gånger per sekund på statusen på en inpinne.
Ex 32768/2^16 ger 0.5Hz. Läs av inpinnen och spara värdet (0 eller 1) i ett register. Om det inlästa värdet är samma som det gamla värdet i registret så gör man ingenting, om det däremot skiljer sig får man räkna upp sekundvärdet med 1.
Om du vill använda pic:en till andra saker som att driva en display, alarm, något användarinterface för inställningar av tid mm och ändå ha en hög noggrannhet så kan det kanske vara en god idé att generera klockans tidsreferens utanför pic:en. Klocka pic:en med en hög frekvens (MHz) och kolla några hundra (exakt hur många är inte kritiskt) gånger per sekund på statusen på en inpinne.
Ex 32768/2^16 ger 0.5Hz. Läs av inpinnen och spara värdet (0 eller 1) i ett register. Om det inlästa värdet är samma som det gamla värdet i registret så gör man ingenting, om det däremot skiljer sig får man räkna upp sekundvärdet med 1.
Man kan även, om man vill ha lite noggranhet, införskaffa en MAX32KHZ. Det är en 32768Hz oscillator som är temperaturkompenserat, man får då en noggranhet på ±2 min/år imon -40°C - +80°C, ±1 min/år vid rumstemperatur.
Ta signalen från MAX'en, kasta det in i en 4020 (eller är det 4040?) som nerdelning och *poooooffff*: 1 Hz!
Ta signalen från MAX'en, kasta det in i en 4020 (eller är det 4040?) som nerdelning och *poooooffff*: 1 Hz!
- grapetonix
- Inlägg: 293
- Blev medlem: 14 juli 2004, 17:20:50
- Skype: grapetonix
- Ort: Hägersten, Stockholm
Om man inte vill ha en (extra) klockkristall så skulle jag föreslå 16bits timern ihop med CCP-modulen (man kan använda den som periodregister till 16bits timern med "special event trigger").
Med det kan man få ett timer-interrupt på exakt 100Hz (t.ex.), och därifrån lätt räkna fram 1Hz i mjukvara. Jag gjorde precis så till en klocka i en PIC18 på 40MHz, men F628 har det som behövs tror jag (och olika frekvens betyder bara lite olika värden i registren).
Med det kan man få ett timer-interrupt på exakt 100Hz (t.ex.), och därifrån lätt räkna fram 1Hz i mjukvara. Jag gjorde precis så till en klocka i en PIC18 på 40MHz, men F628 har det som behövs tror jag (och olika frekvens betyder bara lite olika värden i registren).