Étape 16 : Description du projet - Firmware
Le firmware est écrit en AVR-GCC et utilisé environ 60 % de l’espace disponible programme de 2KO dans le ATtiny2313.Il est vraiment très simple logiciel. Fondamentalement, tout il le fait pour recevoir des paquets de commande sur le port série de le Tiny2313, vérifier si la commande est ce s’affichent, et si c’est décoder la commande et stocker le bitpattern dans la mémoire. Si la commande est pour un autre affichage, qu'il sera juste transmettre à l’écran suivant.
Le firmware peut être télécharger les deux comme code source et comme comme précompilé hexfile depuis la section téléchargement du site web du projet.
Les messages entre le Service Windows et les microcontrôleurs sur les afficheurs sont formatés en paquets plutôt compact 10 octets. Afin d’être en mesure de détecter de façon fiable au début de chaque paquet le bit le plus significatif [MSB] (bit 7 qui est) dans le premier octet est défini à zéro, le reste des octets sont définies à l’un.
Puisque chaque chiffre a huit voyants (les sept segments plus la virgule [DP]) qui doivent être contrôlée, nous ne pouvons pas juste mapper chaque chiffre sur un seul octet car qui obtiendrait le MSB à zéro (le début de l’indicateur de paquet) si la virgule a été désactivée. Donc les DPs obtient son propre octets, mais puisque nous avons huit chiffres et ainsi de huit DPs le dernier DP doit être mis ailleurs ou nous aurez dans le même problème à nouveau. Derniers chiffres DP est mis sur le premier octet à peu six...
Le premier octet est s’ajoute le départ de paquets de signalisation et gardant les derniers chiffres DP détient également quatre bits (bit 3 à 0) qui indique quel affichage (unité), ce message est destiné. Le premier affichage porte le numéro 0 est l’affichage suivant 1 et le dernier numéro 15. Quand le premier affichage d’une chaîne reçoit un message, qu'il vérifie le numéro d’unité et voit si c’est 0. Si c’est que le message y est traité. Si elle n’est pas alors l’affichage décrémente la valeur de l’unité de mèches et transmet l’intégralité du message le long à l’affichage suivant dans la chaîne. Cet affichage aussi vérifie les bits à zéro et agit en conséquence.
Le tableau ci-dessus montre le format du message.
- d0p est le chiffre 0 virgule, d1p est la virgule Digit1 et ainsi de suite...
- U0, u1, u2, u3 sont les bits qui indique le numéro d’unité que le message est destiné.
- A, B, C, D, E, F, G sont les segments de chaque chiffre.
- x est un bit non utilisé pour l’expansion future.
Réception de commande
Réception des données du PC se fait avec les interruptions. Chaque nouveau personnage generats une interruption et est géré par la fonction ci-dessous. Il rassemble dix caractères dans un buffer, vérifie si la commande est pour cet affichage et décode et le stocke dans ce cas. Si le message est pour un autre affichage Il décrémente la destination nybble et envoyer tout le message à l’écran suivant dans la chaîne dans l’espoir qu’un affichage plus tard sera là pour gérer le message.
Multiplexage des chiffres
Étant donné que les chiffres sont multiplexées (seul des chiffres sont alimentés à la fois) le firmware en continu s’allume chiffre après chiffre pendant quelques millisecondes dans chaque donc l’oeil/cerveau croit que tous les chiffres sont sur en même temps,.
Pour enregistrer les I/O-broches du microcontrôleur, une technique de multiplexage spéciale appelée Charlieplexing est utilisé. Il a radicalement réduit le nombre de quilles nécessaires sur le microcontrôleur mais nécessite un logiciel plus complex de tout contrôler.
Timer0 est utilisé pour générer des interruptions pour le multiplexage de chiffres