Étape 13 : Faire une Animation de le 10 étape
Tout d’abord, nous avons besoin de comprendre ce que LED nous sur et quelles LEDs nous voulons à chaque étape. Si je vais faire un graphique à barres simple je voudrai LED7, LED8 et LED9 s’allumer quand le son est au niveau 1 (la ligne du bas des LEDs bleues). Lorsque le son est au niveau 2 je veux LED7 LED8, LED9, LED12, LED13 et LED14 pour allumer pendant tout le reste s’éteignent (les lignes de deux bas de LEDs bleues). Ainsi de suite ainsi de suite, jusqu'à ce qu’on arrive à la 10e niveau sonore où nous voudrons tous les LEDs bleues sur. Voici donc la fonction que nous allons utiliser :
Sub Bar_Graph(void)
{
niveau d’UInt16 ;
Level = (0xF0 & PORTD (uint16)) << 2 ; Stocker le grignotement supérieure de PORTD « niveau » de bit #9 - bit #6
niveau | = ((0xFC & PORTB) >> 2) ; Masque au large RB0 et RB1, décalage de bits des données deux places à droite et stocker RB2 - RB7 « niveau »
commutateur (niveau)
{
affaire 0x03FF : SPI_Send_595(0x000000C0) ; rupture ; Niveau sonore 0
affaire 0x03DF : SPI_Send_595(0xE00000C0) ; rupture ; Niveau sonore 1
affaire 0x03CF : SPI_Send_595(0xFC0000C0) ; rupture ; Niveau sonore 2
affaire 0x03C7 : SPI_Send_595(0xFF8000C0) ; rupture ; Niveau sonore 3
affaire 0x03C3 : SPI_Send_595(0xFFF000C0) ; rupture ; Niveau sonore 4
affaire 0x03C1 : SPI_Send_595(0xFFFE00C0) ; rupture ; Niveau sonore 5
affaire 0x03C0 : SPI_Send_595(0xFFFFC0C0) ; rupture ; Niveau sonore 6
affaire 0x01C0 : SPI_Send_595(0xFFFFF8C0) ; rupture ; Niveau sonore 7
affaire 0x00C0 : SPI_Send_595(0xFFFFFFC0) ; rupture ; Niveau sonore 8
arrêt 0 x 0040 : SPI_Send_595(0xFFFFFFCC) ; rupture ; Niveau sonore 9
affaire de 0 x 0000 : SPI_Send_595(0xFFFFFFCF) ; rupture ; Niveau sonore 10
}
}
** Ne pas inquiéter bit #7 et #6 qui font le droit 0xC0 encore, ses expliquée dans le paragraphe suivant de bits
Vous pouvez voir qu’au niveau sonore 0 que je ne tourne sur n’importe quel LED, alors il envoie 0x000000C0. Le niveau sonore 1 j’envoie 0xE00000C0 qui se met en marche LED7, LED8 et LED9. Le niveau sonore 2 j’envoie 0xFC0000C0 qui se met en marche LED7, LED8, LED9, LED10, LED11 et LED12. Et ainsi de suite. Son assez simple, vous juste savoir qui LEDs vous voulez allumé ou éteint et n’importe quel niveau du son, puis juste le mettre dans l’instruction switch.
Maintenant vous vous souvenez retour à l’étape #8 lorsque je vous ai dit que nous ignorons ces 4 bits supérieurs des données qui sont envoyées à IC4 ? Eh bien maintenant, nous allons vraiment à utiliser 2 de ces bits inutilisés lorsque nous passons notre valeur de données 32 bits à SPI_Send_74HC595(*data*). Vous avez peut-être remarqué dans le schéma que nous sommes en mesure de contrôler tous les LEDs vertes dans son ensemble et tous les voyants jaunes dans son ensemble grâce aux 2 MOSFET x IRL510 qui sont dans le circuit. Pour activer toutes les LEDs vertes nous suffit d’écrire un 1 (+ 5v) à RC2 et pour allumer toutes les LEDs jaunes, nous écrivons un 1 à RC1. Cela active permettant du IRL510 actuel de circuler à travers eux, donc allumer les LEDs.
Afin d’activer la bouteille et le citron, lorsque vous envoyez vos données grâce à la fonction SPI_Send_595(*data*), vous devrez faire peu #6 et #7 haut de bits. Peu #6 des contrôles la bouteille bit #7 contrôles et le citron. Dans le SPI_Send_595 fonction que j’ai masquer bit #6 et bit #7 et la sortie de la RC1 et RC2 selon l’état de ces bits. De la IRL510 ne sont pas contrôlés par les registres à décalage, n’obtiennent pas que confus. Je viens d’utiliser bit #6 et #7 de transmission en logiciel, ils jamais transférés à de 74HC595. Comme vous pouvez le voir ils obtenir masqués lorsque nous envoyons octet #4.
#define PORTCbits.RC2 citron
#define bouteille PORTCbits.RC1
Sub SPI_Send_595(uint32 data)
{
CITRON = (données >> 7) & 0 x 00000001 ; Allumez le citron si bit #7 est élevée et mettez-le hors tension si bit #7 est faible
BOUTEILLE = (données >> 6) & 0 x 00000001 ; Allumez la bouteille si bit #6 est élevé et turn qu'off il bit #6 est faible
SPI_Send (données >> 24) ; Maj des octets #1 premier (IC1)
SPI_Send ((données >> 16) & 0x000000FF) ; Maj des octets #2 suivant (IC2)
SPI_Send ((données >> 8) & 0x000000FF) ; Maj des octets #3 suivant (IC3)
SPI_Send (données & 0x0000000F) ; Maj des octets #4 dernier (IC4)
LAT_595 = 1 ; Verrouiller les données sur les sorties de 74HC595
NOP() ;
LAT_595 = 0 ; Rétablir l’État par défaut le loquet
}
Vous pouvez également remarquer que la RC1 et RC2 sont sorties PWM sur le PIC18F4550. Ils ont été déposés dans le cas où quelqu'un voudrais contrôler la luminosité de la bouteille ou le jus de citron. Je pense qu’il serait assez cool à utiliser le graphique à barres pour une animation de LED et pour tous les niveaux de bruit ont une luminosité différente de la lumière des LED jaunes. De cette façon le citron irait également au rythme de la musique avec les LEDs bleues.
J’ai couru dans le pétrin quand j’ai conçu la première version du CCP et je ne peux pas contrôler séparément la bouteille de LED et de citron. Je n’ai pas trouvé mon erreur jusqu'à ce que j’avais déjà créé et assemblé le PCB. Pas de soucis pour vous, j’ai corrigé cette erreur dans les fichiers PCB dès que je l’ai trouvé, donc si vous utilisez ma conception pour rendre ce vumètre vous serez en mesure de contrôler la bouteille et le citron.
Finalement, je suis tombé malade de trouver des valeurs pour des LEDs spécifiques que j’ai voulu allumer donc j’ai fouetté ensemble un petit programme qui va faire tous les calculs pour nous. Tout ce que nous devons faire est de prendre que les données hex value et mettent en SPI_Send_595 (* données ici *) et il s’allume à chaque LED il apparaît sur le programme. Il peut être téléchargé dans le fichier zip à l’étape #4. Je crains que ce programme est un épargnant de vie.