sexta-feira, 29 de março de 2013

Determinação da frequência do TK90X

Eu não sei se alguém tentou medir no TK90X, a frequência de clock do Z80 ou do sinal de interrupção mascarável da ULA, usando um frequencímetro de alta precisão. Como não disponho de tal equipamento, resolvi criar uma solução "de pobre".

Frequencímetro... que não possuo. Fonte: Wikipédia.

O programa abaixo inicia a variável de sistema TVCOUNT ou FRAMES, logo após uma tecla ser pressionada.

  10 PAUSE 0: POKE 23674,0: POKE 23673,0: POKE 23672,0
  20 PRINT AT 10,8;PEEK 23672+256*PEEK 23673+65536*PEEK 23674,: IF INKEY$<>"a" THEN GO TO 20

Esta variável conta o número de interrupções que o Z80 recebeu. Como é uma variável de 3 bytes, pode representar valores de 0 a 16.777.215. O BASIC do TK90X manipula números com precisão de pelo menos 8 algarismos, portanto aguentará fazer essa contagem. Enquanto o programa roda, vai contando as interrupções que ocorrem até a tecla 'A' ser pressionada.

Obviamente será necessária uma cronometragem muito precisa do tempo em que o programa está rodando, para poder calcular a frequência. O "pulo do gato" aqui é que uma base de tempo extremamente precisa já existe na Internet, o protocolo NTP.  Instalando um programa de NTP (existem versões para vários sistemas operacionais), o usuário ganha um relógio com precisão na faixa de milissegundos. Eu tenho NTP instalado em todos os meus computadores Debian GNU/Linux.

Coloquei um relógio bem grande no meu desktop para poder ver o tempo e, no meu TK90X, deixei rodando o programa BASIC listado acima. Num tempo determinado pressionei uma tecla para iniciar a contagem (nota: não pressione a tecla A para não interromper prematuramente o programa). 

O meu desktop parece um relógio de parede. À direita, o Fuse.

Depois disso, é só deixar o programa rodando, mas surge uma dúvida: por quanto tempo? A resposta depende da precisão que se deseja. A maior fonte de erro é o tempo de reação do operador, ao pressionar as teclas do TK90X para iniciar e terminar a contagem; podemos considerar este erro menor do que 1 s. Portanto, se rodarmos o programa por 1 h (3600 s), teríamos uma margem de erro de 1/3600 ou 277 ppm (partes por milhão). Poderíamos pensar em rodar por semanas ou meses, para ter uma precisão extremamente grande; mas não é bem assim, pois quanto maior é o tempo, mais influência de fatores externos poderá levar a variações da frequência. No caso do cristal, a temperatura é o fator mais importante.

Para definir esse tempo total, considerei que a duração da interrupção é dada por um número inteiro de estados T do Z80 (vide explicação aqui), e seria desejável ter uma precisão da ordem de 1 T ou cerca de 17 ppm. Portanto o tempo mínimo para atingir essa precisão seria em torno de 60.000 s ou mais de 16 h.

No TK90X a 60 Hz, deixei rodando o programa das 15:55:00 de 26/03 até 14:45:00 de 28/03, que perfaz um total de 46 horas e 50 minutos ou 168.600 s. Considerando uma incerteza de 1 s, a precisão seria de cerca de 6 ppm; para melhorar esta marca para 3 ppm, por exemplo, seria necessário rodar o programa o dobro do tempo, mas acho que não compensa.

No final, a contagem ficou em:


A frequência de interrupção é dada por 10091294/168600 = 59,8535 Hz e o período pelo seu recíproco, isto é, 16,7075 ms.

Considerando este tempo igual a 59736 T (parâmetro obtido neste teste), 1 T = 279,688 ns que corresponde à frequência de 3,57541 MHz. O desvio em relação à frequência nominal de 3,575611 MHz é de cerca de 56 ppm, portanto acima da incerteza estimada de 6 ppm. Esta discrepância poderia ser atribuída à tolerância individual do próprio cristal (valor nominal de 14.302.444 Hz ou 4×3.575.611 Hz) e outros componentes do oscilador, mas pode ainda ser o efeito da temperatura (acredito que a temperatura ambiente média tenha sido em torno de 20°C) ou algum outro fator não considerado.

Resta repetir o teste algumas vezes, para ver se o resultado é reprodutível. Também é desejável repetir em outras máquinas. Se o caro leitor fizer o mesmo teste, pode divulgar seus resultados aqui no Cantinho do TK90X

Nenhum comentário:

Postar um comentário

Seu comentário é bem vindo, mas peço que use este espaço adequadamente.