Teste Teste Teste Teste Teste

Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste Teste

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. mlknaweb - All Rights Reserved
Template Created by Creating Website Published by Mas Template
Proudly powered by Blogger