Étape 10 : Firmware - principal-v1. 0
Comme mentionné, la première version du code va lire l’écran LCD de la balance et puis écrire ces données dans un écran LCD local. C’est simplement une preuve de concept... réécrire les données d’un écran à l’autre est assez inutile ! Je crois que j’ai commenté le code source assez bien pour vous de comprendre ce qui se passe si vous êtes familier du tout avec le code d’AVR, mais je vais aller sur quelques-uns des subtilités.
Quelques fichiers sont inclus :
- modules/avr.h - j’inclure dans chaque projet AVR sur que je travaille
- modules/lcd/SerLCD_2x16.h - Prototypes de fonctions et Macros pour l’écriture sur l’écran LCD local
- definitions.h - tous nos principaux macros et définitions
- util/delay.h - routines simple retard
Les modules matériels sont configurés dans la fonction de initialize_AVR() que se trouve sur la ligne 486.
Comparateur analogique
Le comparateur analogique est déclenché sur le front montant de COM 1. Il permet ensuite de Timer 0 qui simule le front descendant COM 1 et les 3 autres lignes COM.
Minuterie 0
Minuterie 0 est configuré pour déclencher un ISR de chaque 0.2ms. Un compteur dans l’ISR provoquera des événements se dérouler après une si longue (à savoir, jamais 4ms), et une instruction switch est utilisée pour exécuter des actions différentes pour chaque actif simulé ligne COM. L’état des broches LCD est enregistré pour chaque ligne de la COM, et à la fin du cycle, le Timer 0 est désactivé.
Lecture de l’écran LCD
Le cycle de lecture est démarré par la fonction readLCD() à la ligne 311. Cette fonction simple permet le comparateur analogique et se trouve dans un certain temps en boucle jusqu'à ce que le cycle de lecture terminée. La fonction de decodeDigit() se trouve sur la ligne 321 effectivement transforme toutes les données d’état de broche numériques numéros pour chacun des chiffres LCD.
Écriture de LCD
Les Routines d’écriture LCD trouvé à partir de la ligne 407 ont été écrites par moi tout à l’heure. Ils peuvent aussi se trouve dans le dossier modules/lcd, mais j’ai copié juste les fonctions que je voulais utiliser pour le fichier principal, donc je n’étais pas la compilation des fichiers de plusieurs emplacements. Je pense qu’ils sont assez explicites.
Principal
Dans la fonction Main, l’appareil AVR est initialisé et puis entre dans une boucle pour toujours. À l’intérieur de cette boucle, l’écran LCD est lu, et que les données sont décodées et imprimées à l’écran LCD local pour les tests. Chiffre 4 est ignorée, et je ne vous inquiétez pas le mode d’horloge de l’échelle parce que je ne suis pas suivi les segments de tige LCD AM/PM.
Dans une version antérieure du circuit, j’ai étais suivi toutes les broches de LCD, d'où ma capacité à imprimer les données de mode horloge ; Cependant, le firmware présenté cela est impossible. Notez également le symbole « & » dans les chiffres en raison de la ligne de transmission série utilisée pour imprimer à l’écran LCD qui m’empêche de lire une seule broche de LCD échelle particulière.