Étape 3: logiciel
Le lien du logiciel est répertorié ci-dessous. Alors qu’il est visé pour le 16F688, il est facilement porté à d’autres versions de la photo. Vous devrez modifier la ligne qui identifie la version PIC (liste =) et le fichier INCLUDE, mais ceux sont les changements intuitives. La ligne __CONFIG devez également peaufiner tout simplement parce qu’un ou deux des étiquettes utilisées soient orthographiés différemment dans certains des fichiers INCLUDE. Assurez-vous juste que la photo que vous utilisez a une broche qui permet une entrée d’interruption externe (habituellement appelée EXT ou INT).
Le logiciel de base a été copié directement de ce qui a été utilisé dans l’épisode 2 avec les routines de LCD supprimés et les modifications mineures apportées pour la 16F688 pour remplacer le 12F683. Le nouveau logiciel qui a été ajouté enregistre tous les quatre octets du code IR reçu et traverse ensuite un simple jeu de logique pour déterminer si elle est une commande valide. Chaque routine « touche » active/désactive une ligne de sortie de haute à basse de 50ms simuler une touche du panneau avant. Le temps de retard de 50ms a été arbitrairement choisi parce que la plupart des microprocesseurs décidera que c’est une touche valide si l’entrée n’a pas changé de valeur (rebondi) depuis si longtemps. Vous pouvez allonger ce jour-là, si nécessaire, mais je n’aurais pas la raccourcir.
Episode 2 nous simplement envoyé chaque octet reçu à l’écran LCD et n’avait pas besoin d’enregistrer la séquence entière de quatre octets. Dans cette application, cependant, nous sauver tous les quatre et les analyser ensuite des données valides. Dans la section de déclaration de variable, vous verrez que j’ai défini octet1 octet2, Byte3 et Byte4. Alors que nous pourrions juste ajouter du code pour déterminer quel octet nous avons reçu et puis écrire dans la variable appropriée, il est plus efficace d’aborder les quatre octets comme un tableau en C. de code Le commandant de bord nous permet de le faire en fournissant un couple de registres (FSR et INDF) pour effectuer l’adressage indirect. Vous pouvez voir comment c’est fait dans la routine « Save_Byte ». Dans ce cas nous savons que nous pas va traverser une limite de la page (256 octets) donc nous avons seulement besoin de s’inquiéter sur le paramétrage des 8-bits de poids faible de l’adresse des données. Une autre chose à noter dans cette routine, c’est que nous attendons pour incrémenter « Byte_Count » jusqu'à ce qu’après que nous l’utilisons comme un indice de l’adresse. C’est parce que l’index doit être 0-3 pour nos données tout en « Byte_Count » va de 1 à 4 en comptant reçu IR octets.
Comme j’ai mentionné précédemment, la boîte de l’amplificateur dispose d’un microprocesseur qui détermine ce qu’il faut faire pour chaque pression de touche. J’ai trouvé que ce n’est quelques choses bizarres que je n’aimais pas alors partie du logiciel a été ajoutée pour « corriger » ceux
bizarreries. Une des choses qu’il n’est au pouvoir sur le mode de veille lorsqu’une touche est enfoncée, non seulement la touche power. Cela peut sembler comme une chose ok mais il effectivement causé des complications quand j’écrivais le logiciel. Pour simplifier les choses, j’ai ajouté un contrôle de l’indicateur de « Power_Up » dans la routine de décodage afin de passer commande de tout autre que la puissance de clé de décodage si la case de l’amplificateur est toujours en mode veille.
La boîte de l’amplificateur réglable pour mode mode (stéréo) 2.1 ou 5.1 (surround). Je l’utilise pour piloter une seule paire d’enceintes, donc je le veux toujours en mode 2.1. Malheureusement, le microprocesseur dans la boîte de l’amplificateur définit le mode 5.1 chaque fois que la boîte passe d’en attente à sur ou toute modification de la source d’entrée audio. Routine « Mode_2_1 » est appelée sur la transition du mode veille à sur et active/désactive les canaux de haut-parleurs à 2.1. J’ai trouvé que j’avais besoin sur une temporisation de 1 seconde après branchement sur avant que la commande de canaux haut-parleurs entrerait en vigueur. J’ai aussi ajouté le code pour « Source_Sw » pour basculer vers le mode 2.1 après changer l’audio input source mais qui exigeait un délai plus court avant la deuxième commande puisse être émise.
Eh bien, c’est tout pour l’épisode 10 de « Fun avec PIC Assemblée ». Restez à l’écoute des autres épisodes.