Nunha primeira aproximación ao problema dividímolo en 3 bloques, un encargado do teclado, outro de xerar a suma dos tonos e outro encargado de enviar vía serie os datos ao DAC. A interface co exterior está ben definida, máis sen embargo, pode chegar a ser necesario incluir algunha outra saida a nivel constante.
Tanto o bloque de control do teclado como o de control do DAC están desenvolvidos na web do DTE, pero non se adaptan ao que consideramos máis optimizado para esta aplicación en concreto, así que adaptarémolos modificando lixeiramente a súa arquitectura externa: so empregaremos unha saida analóxica do convertidor, así como non se precisa realizar a conversión de filas e columnas a hexadecimal dentro do controlador do teclado.O bloque importante é o central, que nun seguinte nivel de abstracción podemos dividir nos seguintes subsistemas:
Aquí unha máquina de estados (da que posteriormente engadiremos o diagrama de estados) encárgase dar a orde de inicialización dos osciladores cando a tecla é pulsada. A partir de entón indícalles mediante o sinal xera_mostra cando deben calcular a seguinte mostra, que ven sendo no seguinte instante de mostreo. Para temporizar o período de mostreo emprega un contador auxiliar provisto dun combinacional. O sumador final encárgase de que o que vaia para o DAC sexa a suma de ambos tonos, un correspondente ás filas e outro ás columnas.Os osciladores están constituidos internamente por unha memoria ROM de coeficientes, que en principio implementaremos coma memoria distribuida debido ás súas pequenas dimensións(96x12bits), dous rexistros e un filtro IIR inestable. O funcionamento do mesmo xa foi verificado en Matlab con anterioridade, e cremos que constitúe a solción óptima, inda que seguramente precise ser modificado para funcionar correctamente en punto fixo.
No hay comentarios:
Publicar un comentario