Paso 5: Firmware - ATmega328p
El firmware para este chip puede encontrarse en el directorio de atmega328p del repositorio de código fuente. Este código está escrito en C debe compilarse con AVR-GCC y puede ser flasheado al chip mediante estudio de Atmel o AVRDUDE y un programador AVR externo. Esto es no el código de Arduino. Hay algunos cambios en el código usado en el Instructable lector LCD, así que tocará brevemente en estos puntos.
En el arranque, realizará las siguientes acciones:
- Inicializa los pines de I/O y periféricos de hardware
- Permitir la ESP8266
- Activar la escala, garantizar en modo peso gramos la unidad
- Activar I2C bus
- Entrar en bucle principal
El bucle principal hace lo siguiente una vez por segundo:
- Leer la pantalla LCD
- Descifrar los datos de la LCD en un peso en gramos
- Restablecer la ESP8266, si se solicita
- Mantener la escala despierta (cada 45 segundos)
Para mantener la escala despierto, se presiona el botón de la unidad un par de veces. De lo contrario, la escala entra en un modo de visualización de reloj que no puede salir fácilmente. Aunque este chip es el controlador principal, actúa como un esclavo en el bus I2C. Esto se hizo principalmente porque el módulo ESP8266 en uso no tiene acceso a los pernos reales de hardware I2C y un maestro de "bit-bang" es mucho más fácil de implementar que un esclavo.
Cuando se inicia una lectura I2C, los dígitos de la escala son transmitidos en el bus. El primer byte representa los parte superiores dos dígitos, mientras que el segundo byte representa los dos dígitos más bajos. Por ejemplo, un peso de gramos 1234 sería enviado como [12] [34]. Como el mega328 nunca espera una escritura I2C, tal acontecimiento señala una petición de restablecimiento de la ESP8266. En este momento, el mega328 se tire de la línea de reset de la ESP8266 baja durante unas milisegundos y luego suéltelo. Se utiliza como una forma rudimentaria de superar Estados de error en el ESP8266.