Paso 18: Diseño de Software
El código de fuente del proyecto final también se proporciona a continuación. Sin embargo, el archivo de código de comando IR está vacío y se llena en el uso de los mismos datos que tienes en el paso de "Captura de datos de Control remoto IR". Una vez rellena que, debe ser capaz de compilar-subir-run.El código juega todos los archivos en el directorio de raíz de la tarjeta SD. Los archivos se ordenarán alfabéticamente. Mi código fuente tiene algunas características adicionales tales como visualización de volumen cuando cambia y muestra el nombre del archivo actual, longitud de canción y tiempo actual en la canción. Siga el código fuente para entender cómo funciona cada característica.
El reproductor de música no será capaz de reproducir música mientras conectado a una computadora como un dispositivo de almacenamiento masivo USB. Esto es porque SCSI (recuerda que mencioné antes?) funciona en bloques de datos en la tarjeta SD directamente pero el módulo FatFs que almacena en caché datos en la RAM, cambiar así nada usando USB hará que los datos utilizados por FatFs a estar fuera de sincronización con los datos reales.
Aunque quise usar USB Conecte y desconecte eventos para detectar automáticamente FatFs acceder a la tarjeta SD o no, no puedo por la forma en que el Teensy ++ está diseñado. Siempre habrá un voltaje en VBUS, que hace inútiles los acontecimientos. Así que para permitir el acceso USB, necesita entrar en el menú del reloj para habilitarlo.
Hay un contador de tiempo llamado la "un shot timer" que se disparará un evento sólo una vez después de cierto tiempo. Se utiliza para mostrar la hora actual en la pantalla LCD después de alguna otra cosa ha sido mostrado en la pantalla LCD. Por lo que si cambia el volumen, se le mostrará el volumen y después de 3 segundos, volverá a mostrarte el tiempo.
Otro temporizador timer 0, que está programado para disparar un evento cada segundo, esto hace un seguimiento de tiempo internamente por lo que no tenemos que consultar con frecuencia el DS1307. Esto también activa la alarma cuando coincide con el tiempo.
Tengo un corto apéndice en contadores de tiempo, échale un vistazo.
La impresión de la pantalla LCD se realiza con la cadena almacenada en memoria flash, esto es algo lento en comparación con el uso de RAM. He estructurado el flujo del programa para actualizar sólo la pantalla LCD durante períodos de tiempo cuando el descodificador está ocupado. Las cadenas se guardan en flash porque la memoria RAM es más preciosa, es un buen hábito para ahorrar siempre cadenas invariables en flash.
Todos los ajustes se guardan para el DS1307 usuario RAM (que es con respaldo de batería) o EEPROM interno del AVR (véase el apéndice para más detalles). Estos ajustes son cargados validados durante el arranque y cuando el decodificador está ocupado.
Si usted cava aunque los archivos, usted puede encontrar funciones de prueba que uso para probar varios componentes individuales del sistema.
Todos los archivos que son puramente escritos por mí están en la carpeta superior. LUFA se almacena en la carpeta LUFA, y "Lib" almacena varios componentes no escritos por mí (puede haber modificaciones).
Programadores C experimentados pueden encontrar que rompí algunas reglas. Para el. C archivos que se incluyen en vez de compilados, mi excusa es que son separados a modularizar sin tener que diseñar API que resumen. Para los errores de otros, mi excusa es la limitada cantidad de tiempo que tuvieron que construir, programa, prueba y este proyecto de documento.
Hay algunos mecanismos utilizados en el código que permite que el mismo código compilado para chips ATmega644 y ATmega644P, así como el Teensy ++, las asignaciones de pines son diferentes (y por lo tanto el circuito requiere cableado menor). El código portado no ha sido probado. Obviamente no hay ninguna funcionalidad USB en la versión ATmega644/ATmega644P desde este microcontrolador no tiene USB.
No se deben cambiar los fusibles para la AT90USB1286 si usas el Teensy ++.
Los fusibles para la ATmega644 deben ser: LFUSIBLE: 0xE2, HFUSE: 0x9F, la importancia de estos valores es que el oscilador RC interno se utiliza en 8 MHz (mientras que el Teensy ++ utiliza un cristal de 16 MHz externa que se divide por 2 internos).
De una manera aseada calcular fusibles AVR, intente esto: http://www.frank-zhao.com/fusecalc/
Unidos son el código fuente completo de sello de tiempo.