Paso 16: Proyecto Descripción - Firmware
El firmware está escrito en el AVR-GCC y utilizado cerca del 60% del espacio disponible programa de 2KB en el ATtiny2313.Es realmente muy simple pieza de software. Básicamente todo lo que hace para recibir paquetes de comando en el puerto serie de la Tiny2313, compruebe si el comando es para esta pantalla, y si es descifrar el comando y guarde el bitpattern en la memoria. Si el comando es para otra pantalla pasará solo a la pantalla siguiente.
El firmware puede ser descargar tanto como código fuente y como hexfile precompilado de la sección de descargas de la web del proyecto.
Formatean de los mensajes entre el servicio de Windows y los microcontroladores en las pantallas en los paquetes de bytes 10 bastante compacto. Para poder detectar de manera fiable el principio de cada paquete el pedacito más significativo [MSB] (bit 7 que es) en el primer byte se establece en cero, el resto de los bytes se fija a uno.
Puesto que cada dígito tiene ocho leds (los siete segmentos más el punto decimal [DP]) que necesita ser controlado nos no podemos sólo mapa de cada dígito en un solo byte ya obtendría el MSB a cero (el inicio del indicador de paquetes) si el punto decimal se ha desactivado. Así el DPs obtiene su propio octeto, pero ya que contamos con ocho dígitos y por lo tanto ocho DPs la última DP debe colocarse en otro lugar u obtendrá en el mismo problema otra vez. Lo últimos dígitos DP se pone en el primer byte en el bit 6...
El primer byte es además el comienzo de paquete de señalización y también mantener los últimos dígitos DP tiene cuatro bits (bit 3 a 0) que indica que pantalla (unidad) este mensaje es para. La primera pantalla se numera 0 la pantalla siguiente 1 y el último es el número 15. Cuando la primera exhibición de una cadena recibe un mensaje que comprueba el número de la unidad y ve si es 0. Si es el mensaje se procesa allí. Si no es entonces la pantalla disminuye el valor de la unidad de bits y pasa todo el mensaje a lo largo de a la pantalla siguiente en la cadena. Esa pantalla también comprueba los pedacitos cero y actúa en consecuencia.
La tabla anterior muestra el formato del mensaje.
- d0p es el punto de decimal del dígito 0, d1p es el punto decimal de Digit1 y así sucesivamente...
- U0, u1, u2, u3 son los bits que indica el número de unidad que está destinado el mensaje.
- A, B, C, D, E, F, G son los segmentos de cada dígito.
- x es un poco inusitado para una futura expansión.
Recepción de comando
Recibir los datos desde el PC se hace con las interrupciones. Cada entrada carácter generats una interrupción y es manejado por la función siguiente. Recoge diez caracteres en un buffer, comprueba si el comando es para esta pantalla y descodifica y almacena si es. Si el mensaje es para otro la pantalla reduce el nybble de destino y enviar todo el mensaje a la siguiente pantalla en la cadena de la esperanza de que una pantalla más tarde estará allí para manejar el mensaje.
Dígitos de la multiplexación
Ya que los dígitos son multiplexados (sólo uno de los dígitos son accionados a la vez) el firmware continuamente ilumina dígitos después de dígitos durante unas milisegundos en por lo que el ojo/cerebro cree que todos los dígitos están en el mismo tiempo.
Se utiliza guardar/O-pines en el microcontrolador una técnica de multiplexación especial llamado Charlieplexing. Drásticamente reduce el número de pernos necesarios en el microcontrolador pero requiere un software más complejo de controlar.
Timer0 se utiliza para generar interrupciones para la multiplexación de dígitos