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 PCB:
Versão 3D:
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.
Versão 3D:
Postar um comentário