por fabim » 25 Set 2008 13:56
cara eu estava olhando um projetinho que eu fiz a 5 anos e lembrei de uma tecnica que eu usava.
ASM....
1 byte.
eu não contava como valor eu contava como bits, e ia girando para direita.
1 / 8 = 12,5% de incremento
pode usar 16 bits tambem, 24, 32 que seja.
vou passar a ideóta que eu usava e funcionava rapido pra purrete conseguia frequencias bem rapidas...
00000001 12,5%
00000011 25%
00000111 37,5%
00001111 50%
00011111 62,5%
00111111 75%
01111111 87,5%
11111111 100%
Eu fazia a varredura na int, de 8 bytes rigando para direita e testanto, setando um byte, no final eu carregava a porta com o byte que continha o resultado dos testes.
Rotacionado 8 vezes + 1, no maim eu carregava as variaveis novamente
imagine o seguinte.
B1,B2,B3,B4,B5,B6,B7,B8
Cada um para um pino de saida do pwm..
quando tu cair na int do timer zero fica assim.
B1 = B1 >> 1;
if B1.0=1{ Valor_port.0 = 1} else { valor_port.0 = 0}
B2 = B2 >> 1;
if B2.0=1{ Valor_port.1 = 1} else { valor_port.1 = 0}
.............
.............
B8 = B8 >> 1;
if B8.0=1{ Valor_port.7 = 1} else { valor_port.7 = 0}
e para todos os outros.
no final de tudo
PORTB = Valor_port
observe que se fizer isto em ASM, vai demorar poucos uS para fazer isto tudo dentro da int, ja em C vai ser um pouco mais demorado.
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!