Tendo passado mais de um mês desde o post anterior da série, me parece apropriado dar alguma notícia. Mais que o bug no compilador, falta de tempo e foco é o que impediu de concluir este projeto.
O meu filho avançou no código, colocando o cálculo e a apresentação da velocidade em km/h. Durante esta mexida dele, deu para perceber algumas limitações e erros do código apresentado anteriormente.
O código é movido a uma interrupção periódica de timer, que era gerada a partir de um clock interno de 12KHz. O primeiro problema é que eu estava calculando errado o valor de contagem (TEMPO_xxx). Após detectar divergência com uma leitura de velocidade na base do cronometro, revi com atenção a documentação do MSP430 e percebi que ele conta um a mais que o valor programado. Assim, uma contagem de 6 gera uma temporização de 583 useg ao invés de 500 useg.
Um problema mais crítico é que à medida que a velocidade sobe temos menos ticks por volta. Na hora de dividir a volta em "frames" a imprecisão aumenta, fazendo a largura dos caracteres variarem. A solução para isto vai ser usar um clock mais alto; isto aumentará o consumo do circuito mas dará uma precisão muito maior. Isto exige rever a programação do hardware e fazer alguns cálculos para garantir que os números vão caber nas variáveis.
Por último, estou usando o tempo de uma volta para apresentar a mensagem na volta seguinte, o que causa problemas quando estamos acelerando ou freando. Para melhorar isto pretendo considerar também a variação de tempos de uma volta para outra.
Tudo isto exige algum estudo, mexidas no código e testes. Estou contando com o feriado desta semana para chegar a uma versão "final", que vou publicar junto com uma tentativa mais decente de explicar o funcionamento do código.
Nenhum comentário:
Postar um comentário