Eis aqui mais um achado na Internet.
Um projecto interessante, simples e muito aplicado por hobbistas agora com a chegada no Natal.Trata-se de um LED que tenta simular uma vela, recorrendo a um pequeno MCU (neste caso um 12F675) para gerar o PWM aleatório com uma duração igualmente aleatória.
O efeito é bastante semelhante ao de uma vela. O código teve de sofrer algumas alterações, em relação ao original, mas funcionou bastante bem quando o testei. Digo isto porque não estando no meu super-mega laboratório caseiro, apenas consegui um LED branco de HB para testar e fiquei muito satisfeito.
Para mais Info e ver o código original com os comentários, este é o LINK.
#include <htc.h>
__CONFIG (FOSC_INTRCIO & WDTE_OFF & PWRTE_ON & MCLRE_OFF & BOREN_OFF & CP_OFF & CPD_OFF);
unsigned int t1value=65535-(100+99*1)+1; //inicial 1%
void interrupt isr(void)
{
if(T0IF)
{
TMR0=217;
TMR1H=(t1value>>8)&0xFF;
TMR1L=(t1value&0xFF);
GPIO2=1;
TMR1ON=1;
T0IF=0;
}
if(TMR1IF)
{
TMR1ON=0;
GPIO2=0;
TMR1IF=0;
}
}
char getrandombit(void)
{
static unsigned short shiftregister=0x9500;
unsigned short value;
char output;
value=(shiftregister&0x0200)>>9 ^ (shiftregister&0x0400)>>10;
shiftregister <<= 1;
shiftregister |= value;
output=(value ^ 1) & 0x01;
return output;
}
void main(void)
{
char i=30;
int pause;
GIE=0;
PEIE=0;
TRISIO=0x3B;
ANSEL=0;
OPTION_REG=0xD7;
TMR0=217;
T0IF=0;
T0IE=1;
T1CON=0x00;
TMR1H=(t1value>>8) & 0xFF;
TMR1L=(t1value&0xFF);
TMR1IF=0;
TMR1IE=1;
PEIE=1;
GIE=1;
while(1)
{
if(getrandombit())
i+=10;
else
i-=10;
if(i<0) i=0;
if(i>60) i=60;
t1value=65535-(100+99*i)+1;
for(pause=0;pause<1000;pause++);
}
}
0 Responses so far.
Enviar um comentário