Étape 10 : Démarrage de la carte supérieure, communication avec les périphériques
1. mise sous tension de la broche
Comme pour ce Conseil, nous utilisons le même type de processeur que celle sur la carte de base, la partie du programme d’amorçage est facile à intégrer. J’ai seulement changé les empreintes (et a commis l’erreur cruciale, j’expliquerai plus tard) :
- DIP40 à TQFP44 pour le PIC18F4550
- THT à 1206 SMT pour résistances
- THT à SMT pour le connecteur USB
Tout le reste est resté le même, comme il était dans la version précédente de ce Conseil. La version précédente avait un PIC18F46J50 dessus et ne voudrais pas commencer non plus, quel que soit le programmeur j’ai essayé - j’ai laissé que seul, au moins pour l’instant.
Les composants de ce Conseil d’administration sont :
- 1 x microcontrôleur PIC18F4550 - est-ce tous la lecture et tout le traitement. Il n’est pas le muscle seulement calcul sur ce forum, mais il a le plus « difficiles »
- 1 x PCF8523 horloge en temps réel et calendrier - prend la charge du chronométrage au large de l’épaule de la PIC18F4550. Il a son propre oscillateur à quartz de 32 .768KHZ.
- 1 x PCA9683 LED driver - au lieu de garder le PIC18F4550 occupé avec le clignotement de la LED, cet homme prend les commandes du bus I²C et il transforme en clignotant LED.
- oscillateur à quartz 1 x 20MHz pour le PIC18F4550
- 1 capteur de x Vishay IR pour télécommande contrôle le système
- oscillateur à quartz 1 x 32.768KHz pour l’horloge temps réel
- 2 boutons x - interface utilisateur
- 3 x diodes de l’utilisateur - interface utilisateur
- 16 x affichage LEDs - pour affichage de l’heure et n’importe quoi d’autre
- n x résistances - pull, pull-down et composants de limites courant
- n x condensateurs - découplage, éléments filtrants
- 1 x photodiode - utilisé pour la synchronisation
2. avant aller plus loin, procéder aux vérifications habituelles !
La première chose que nous devons être sûrs est que le bootloader fonctionne très bien et nous pouvons Télécharger le code d’application utilisateur en toute sécurité et sûrement. Pour cela, nous devons le même package de logiciels et progiciels, que nous avons utilisé pour le sommier. Le même NIP RD3 détectera la présence de l’USB et passera à bootloader ou dos. Les LEDs sont également sur les mêmes sorties. Vérifiez si vous pouvez programmer l’appareil ! Si vous le faites, vous êtes prêt à passer à l’écriture du code de l’application.
Les boutons de lecture et clignotement de la LED sont la première chose que vous devez implémenter dans le code d’application. Suivant sera l’utilisation de la communication I²C. Dans l’un de mes précédents instructables, j’ai donné une description détaillée sur le bus I²C, vous pouvez lire une deuxième fois pour rafraîchir votre mémoire. Utilisez vos propres fonctions ou celui fourni dans les bibliothèques - c’est à vous. Pour ma part utilisera les mêmes fonctions que j’ai utilisé dans le projet « Ultrasons ruban à mesurer ».
Une différence importante dans ce projet est la présence de deux dispositifs esclaves au lieu d’un. Cela ne signifie rien de mauvais, en fait - cela signifie que nous allons faire un meilleur usage de notre bus série avec plusieurs possibilités d’esclaves. Nous devrons définir deux adresses d’esclaves et toutes ses adresses de registre interne important. Ces variables importantes seraient les compteurs de la CCF, les verrous de la sortie du pilote LED, les registres de rapport cyclique des LED driver, etc..
3. I²C œuvres, accéder à l’interface infrarouge
Le prochain sur la liste serait de déterminer la taille de la « police » pour notre affichage rotatif. Vous pouvez ainsi mesurer tr/min en quelque sorte, ou vous pouvez découper le retard de l’avance de signe de LED à l’aide de la télécommande. Cela signifie que l’infrarouge décodage de protocole est votre prochaine tâche - ne peut façonner les personnages sans ce travail nominale !
J’ai d’abord travaillé avec des microcontrôleurs dans la troisième année de baccalauréat, je me souviens que je ne pouvais pas attendre de voir ce que cette classe était sur. Je pense que le premier projet sérieux, j’ai vu et a réussi à comprendre était un système infrarouge. Le récepteur recueillies les signaux venant de la télécommande et passé par eux pour la photo. Ensuite, une routine d’interruption du service enregistré les données d’un registre de 14 bits, certains bits sont des bits de données, d’autres étaient des bits de contrôle, la chose importante était : code de contrôle d’un DC glacière sur IR a été écrit avec succès.
Avant de vous lancer à l’étape suivante, vous devez être sûr d’une chose : les signaux de la télécommande font leur chemin à travers l’air, par l’intermédiaire de récepteur infrarouge à droite sur la broche de votre PIC. Ceci peut être facilement mesurée avec l’oscilloscope. J’ai fait une capture instantanée à ma portée pour vous montrer ce que je vois sur ma planche lorsqu’une touche est enfoncée sur la télécommande, voir si elle correspond avec le signal que vous voyez. Il devrait être un signal numérique nice, modulé. Si vous avez sur la broche, lisez l’étape suivante pour en savoir plus sur le protocole et les méthodes que vous pouvez vous procurer pour attraper les bits entrants.
Ce que j’ai fait ici c’est : mettre en place une interruption qui déclenche sur un front descendant sur la sortie des capteurs infrarouges, puis attendit 300us et vérifié le niveau sur l’épingle à nouveau. Après cela, j’ai déclenché une série de 13 mesures, avec un retard de 1.6ms. Après que j’ai mis en place tout et vérifié le signal provenant de la télécommande, j’ai dû modifier le calage de cet deuxième à 1.78ms. Ces horaires ont été mis en place avec l’aide du module comparer du PIC.
L’utilisation de ce module est très simple : pensez à un délai d’attente, exprimer en nombre de cycles d’horloge et mettez-la dans le registre de comparer. Puis régler la minuterie PIC 1 pour compter et donner l’interruption sur minuterie Registre - comparer le registre de correspondance. En termes simples, nous allons mesurer le niveau d’intervalles de temps fixes et l’utilisation de la mesure pour savoir quel bouton a été enfoncé. J’ai regardé sur le web pour les codes de touche, mais réussi à attraper seulement les « P + », « P-», « V + », « V-» événements de bouton. Comment trouver le code pour le reste:) ?
Heureusement, nous avons 16 LEDs pour afficher tout ce que nous voulons, à droite ? J’ai écrit un petit programme à sortie le code hexadécimal qui est venu sur le capteur infrarouge d’entrée sur l’écran LED, lisez-le par oeil et ajouté des macros pour les rendre plus faciles à identifier :
#define REMOTE_P_PLUS 0 x 20
#define REMOTE_P_MINUS 0 x 21
et ainsi de suite. De cette façon je peux déclencher des événements issus des touches de la télécommande sans avoir à connaître tous ces identificateurs hexadécimaux funky. Si vous pouvez le faire, votre télécommande fonctionne la façon dont vous vous attendez !
4. synchronisation
Votre arbre doit lui-même faire référence à un point, vous devez vous assurer qu’il y a un signal que vous pouvez attraper à chaque rotation, afin que vous sachiez quand déclencher la séquence de caractères de LED. J’ai voulu le faire avec un capteur hall, mais réalisé plus tard qu’il irait fou autour de 20 aimants en néodyme - j’ai besoin de quelque chose d’autre.
Une approche simple était d’obtenir une photodiode et détecter la lumière provenant d’une LED statique. Afin de ne pas perturber l’image floue dans l’air par l’écran LED, j’ai décidé d’utiliser la LED infrarouge pour cette tâche. Je savais que j’ai acheté une photodiode et quelques LEDs infrarouges quelques années auparavant, dans l’espoir de faire quelques tests sur eux, j’ai eux leva les yeux et mis en place un test de maquette schématique. La photodiode a obtenu reliée au 5V à travers une résistance de 4,7 K limitation actuelle, le point médian obtenu relié à une tige capable d’interruption (RB6). Nous devons cette détection sur interruption pour qu’il soit très précis ! J’ai joint le code gère toutes les choses décrites à la section de l’image de cette étape. Les points remplacent le code que vous avez à écrire donc le modèle de droit obtient émis par les LEDs bleues huit. Cette partie se sert de la capacité d’interruption-sur-changement de broches PORTB, une fonctionnalité qui est très intéressante et très utile quand vous procuré votre épinglette INT0 et INT1 occupée par le bus I²C.