The concept is using 32.768kHz crystal as a clock for the PIC. Therefor, the internal instruction clock is 32768/4 = 8192 Hz. By using the 16 bit Timer1 to count the instruction clock cycles, the interrupt will occur every 8 second. This period can be reduced by setting initial value of the Timer1 (TMR1H:TMR1L). I have to make Timer1 to count up to 8192 for generating overflow interrupt every 1 second. To make Timer1 count up to 8192, the initial value of TMR1 must be 65536-8192 = 57344 or 0xE000. This means TMR1H = 0xE0 and TMR1L = 0x00. In this case, I need to set only the TMR1H=0xE0 and let TMR1L runs continuously. By changing the initial value of Timer1, I can generate almost any frequencies.
An application for this project is a precise 1Hz blinking LED signal :) ha ha. I know that it's not useful but I think it's fun to look at (am I crazy?). Another application is a precise 1Hz time base for a clock.
The source code is written in MikroC.
// PIC12F675
// 1Hz Time Base Osc.
// Timer1 Module
// 32.768 KHz
unsigned short tick;
void Init ();
void interrupt ()
{
if (PIR1.TMR1IF)
{
TMR1H = 0xE0;
PIR1.TMR1IF = 0;
tick = 1;
}
}
void main ()
{
tick = 0;
//Initialize Ports and Timer1 Module
Init ();
while (1)
{
if (tick)
{
tick = 0;
GPIO = (1 << 2);
}
if (TMR1H > 0xF0)
{
GPIO = 0;
}
}
}
void Init ()
{
TRISIO = 0;
//Make all pins as output ports
GPIO = 0;
//Use Timer1 module
INTCON.GIE = 1;
INTCON.PEIE = 1;
T1CON = 0x01;
//Overflow every 8192
TMR1H = 0xE0;
TMR1L = 0x00;
// Enable TMR1 interrupt
PIE1.TMR1IE = 1;
}
The schematic is as the following image.
![1Hz Clock generator using PIC12F675](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDwWnJR0Gs7EszC1gmZnqCsiKgAOBWdGCobxQxQRrYue1NjiUxZcSBRLoh99nbtAxzNv7ILvrM2s2EAZlEyaQZuggdEszg7j6N4lFnbSJzjHnUUHO9uJljAZ9p8uXSw_xz8BvuxGhJyXoE/s400/1Hz-schematic.png)
The PCB:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYi4_SV6F5TU3q5Pxzlshi7cKf9kOIw0QwN2ObzOjbp-hqzsxLhgTFzuyDDLQMuP4arzDAXZcbnbr0areV_HswiSwlxvcTl4veqjA9RJ0pkHHpaKZwuoCQ3qLlGsh2pP-PNBORtV54wZua/s400/1Hz-PCB.png)
3D version:
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgD1sr29r3bPo6blgGxOjHHIrIrRH6cwykX_BlvzU4X714NGfGqdk079ukHrk023N09k40Z22-_hMHc-TeDJvwUl6-9hw5yzoI5FHKIR61uzlE2rhPVp3w8qhq92yooRMZNVkreZLoMzJ2J/s400/1Hz-3D.png)