La semana pasada y la semana de carnavales estuvimos trabajando en lo referente al código de LabView, el cual es bastante extenso. Empezamos por recibir un comando desde el micro, y con éste controlar la reproducción de una nota, luego de lograr esto, pasamos a integrar los sensores al micro, de manera de recibir una señal desde los sensores por el micro, pasarla en forma de comando "midi" serial como explicamos previamente, y al ser recibida en LabView reproducir una nota.
El código en LabView utilizado para lo dicho previamente es algo parecido al que ven en la imagen:
Luego de lograr lo anterior, vinieron los contratiempos... Cometimos el error de no tener en cuenta las limitaciones del micro en cuanto a interrupciones externas (Es importante destacar que se debe programar de esta manera tanto por petición de los profesores, como por buena implementación de la programación), nos encontramos con el inconveniente que sólo se puede implementar un módulo de interrupción externa por micro(Ext_int), lo cual se llevó nuestra utopía de tener 9 interrupciones para los canales de adquisición de interrupción láser (6 guitarra, 3 arpa).
Leyendo las especificaciones del micro encontramos un módulo llamado KBI, el cual describen como interrupciones en conjunto, éstas se basan en direccionar todos los canales que queremos verificar (Máximo 8 canales por módulo y posee 2 módulos), de forma que al interrumpir cualquiera de los canales en cuestión, se activa el módulo provocando una interrupción externa, quedando únicamente verificar qué canales fueron los que causaron la interrupción y medir sus valores de entrada si es necesario.
Una vez mas encontramos problemas ya que la versión de codewarrior que tenemos es 10.1 gratuita pero posee limitaciones que en nuestro caso, limitan el módulo de KBI a únicamente la recepción de la interrupción sin proveer la opción de obtener los valores de los canales para determinar cuáles son los responsables de la interrupción, siendo necesario no 9, sino 18 canales de entrada al micro que en realidad es un desperdicio.
En vista de esto, ésta semana se trabajó en resolver el problema implementando la base de funcionamiento del KBI por medio de circuitería, es decir, se utilizaron dos "AND 7408N" lógicos como el de la figura, los cuales permiten la entrada de todos los canales (Actualmente estamos realizando pruebas con 4 canales únicamente), y la salida irá a la entrada del único módulo de interrupción externa utilizable en el micro.
Nuestra lógica de interrupción es negada, siempre tenemos un nivel alto ó 1 lógico, cuando existe interrupción en algún láser, la circuitería arroja un bajo ó cero lógico, que causa un cero lógico a la salida del "AND" y a su vez un flanco de bajada que causa la interrupción en el micro. Al momento de la interrupción se activa una bandera que ordena al micro a leer el registro PTD de entrada implementado para dichos canales, verificando cuál de ellos es el responsable de la interrupción, realizando así una medición a los canales de adquisición de cables de nicromo respectivos y finalmente pasar los datos correctos de notas a la computadora donde será realizado el análisis frecuencial.
Todo esto es bastante funcional, PERO!!! el circuito comparador que se utiliza tiene un rebote!, problema crítico ya que el micro puede detectar esos cambios de nivel, debido a que su frecuencia es aproximadamente 25MHz. Dicho error causa que por una interrupción del láser se detecten más de 2 interrupciones, lo que no permite el funcionamiento requerido de precisión a la hora de tocar notas (En la imagen vemos entre el paso de LOW ó 0, a HIGH ó 1, flancos que no deberían existir, ésto se conoce como rebote y sucede también en el caso contrario de HIGH a LOW).
Actualmente se está buscando una solución que permita la eliminación de éste comportamiento, se ha probado con software pero hasta ahora persiste el problema, veremos si la implementación de circuitería es más efectiva.
Hasta otra!
No hay comentarios:
Publicar un comentario