Gerador de Clock de 1Hz com PIC12F675

sábado, 12 de março de 20160 comentários

Com base na idéia de ter criado um http://www.josepino.com/pic_projects/?timebaseI 1Hz Clock Generator. Eu uso o PIC12F675 que está disponível localmente. Seu preço é apenas E.U. $ 1.
O conceito está usando cristal 32.768KHZ como um relógio para o PIC. Dessa forma, o relógio de instrução interna é 32768 / 4 = 8192 Hz. Ao usar o 16 bits Timer1 para contar os ciclos de clock a instrução, a interrupção ocorrerá a cada segundo 8. Este período pode ser reduzido pela definição do valor inicial do Timer1 (TMR1H: TMR1L). Eu tenho que fazer Timer1 contar até 8192 para a geração de excesso de interrupção a cada 1 segundo. Para fazer Timer1 contagem até 8192, o valor inicial de TMR1 deve ser 65536-8192 = 57344 ou 0xe000. Isto significa TMR1H = 0xE0 e TMR1L = 0x00. Neste caso, eu preciso apenas definir o TMR1H = 0xE0 e deixe TMR1L funciona continuamente. Ao alterar o valor inicial de Timer1, posso gerar quase qualquer freqüências.

Uma aplicação para este projeto é um 1Hz preciso piscar LED de sinal:) ha ha. Eu sei que não é útil, mas eu acho que é divertido de se olhar (eu sou louco?). Outra aplicação é uma base de tempo precisa 1Hz para um relógio.

O código fonte é escrito em 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;
}
O esquema é como a imagem a seguir. 

O PCB:
Versão 3D:


Share this article :

Postar um comentário

 
Support : Creating Website | Johny Template | Mas Template
Copyright © 2011. xvolts - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger