Contrôleur de style MIDI maison MPC (1 / 6 étapes)

Étape 1: Fonctionnement du programme.

3.0 programme opération
La section suivante va discuter comment fonctionne le programme.  Section 3.1 risque de dépasser la partie de l’initialisation du code qui se trouve avant la boucle principale. Une fois que le programme entre dans la boucle principale est crie à 4 fonctions différentes : potread, keypress, bankchange et RVB. Les sections 3.2, 3.3, 3.4 et 3.5 discuteront séparément ces fonctions.  Veuillez vous référer au code à l’étape 6.

3.1 l’initialisation
N’importe quel microcontrôleur doit être configuré tout d’abord, avant d’entrer dans une boucle principale du programme.  Cela inclut la mise en place de la direction des broches, mettant les valeurs correctes dans tous les registres de contrôle et définir l’horloge principale qui va utiliser le microcontrôleur.  La première étape de mon programme consistait à mettre en place des registres de config.   Ces registres contrôlent généralement des choses comme le temporisateur, toute réinitialisation claire broches, bruns à détecter et les configurations de l’oscillateur. Dans cet exemple j’ai mis en place afin qu’un cristal oscillateur externe de 20Mhz est utilisé comme l’horloge principale pour le PIC.  Le commandant de bord a oscillateurs internes et peut courir jusqu'à 8Mhz, mais en raison de la vitesse des données midi, je devais courir le microcontrôleur à une vitesse supérieure afin d’éviter des erreurs de données.  Notez l’emplacement de l’oscillateur sur la disposition principale de Conseil de PCB à l’article 7.1. Ce n’est pas visible sur la figure 2.0, j’ai soudé le cristal directement sous le Conseil d’administration.
Le prochain Registre que j’ai configuré était les registres RCSTA et TXSTA. Ces registres sont chargés de contrôler les commandes de série matériel. J’ai utilisé les commandes série matériel, par opposition aux logiciels de série pour envoyer les commandes midi, est parce que j’envoie les données à la carte de convertisseur de midi à 31250 bauds.  J’ai essayé d’envoyer les données à l’aide premier logiciel commandes seulement et j’ai été obtenir des erreurs et l’ordinateur recevait des données qui avaient disparu des morceaux manquant d’informations.  Le port série de matériel a une mémoire tampon interne utilisée pour diriger le flux de données et n’est donc plus fiable.  La seule limitation de l’aide des commandes de série matériel est que vous sont autorisés à utiliser seulement certaines épingles sur le microcontrôleur où comme si vous envoyez des commandes logicielles, vous pouvez utiliser aucune broche disponible souhaitée.   L’écran LCD j’ai utilisé seulement requis les données à envoyer à 9600 bauds, donc je commande que j’ai envoyé à l’écran LCD a été commandes série de logiciel.
J’ai ensuite créé les goupilles qui allaient être utilisés pour contrôler les puces LTC2309.  Ces puces sont contrôlées en utilisant I2C épingles de commandes alors que deux sont nécessaires pour contrôler les deux circuits.
Après cela, j’ai défini toutes les variables globales utilisées dans le programme. J’ai configuré puis direction les broches mais chargeant les octets correctes dans les registres TRISA et TRISB TRISC sur le PIC.  Chargement d’un zéro définit l’axe de ce port à une sortie. Charger un, il définit en tant qu’entrée. Par exemple : si j’insère la valeur 00000001 dans le registre TRISB, Pin zéro sur le PORTB serait une entrée tout en épingles un à sept sont définis comme des sorties.
Étant donné que le PIC a également intégré des convertisseurs a/n, j’avais besoin de désactiver ceux que c’est la prochaine chose que j’ai fait.  L’écran LCD est alors activé et un écran d’introduction s’affiche.  La commande de série de logiciels est une fonction intégrée à Picbasic Pro, qui est le compilateur que j’ai utilisé.   Chaque fois que j’ai envie d’émettre une commande de série de logiciels, j’ai besoin de spécifier le code pin que je veux envoyer la commande le débit en bauds et les données que je veux envoyer.  J’ai découvert comment contrôler l’écran LCD par le biais de sa fiche.
Les boutons Parcourir ensuite les différentes couleurs.  Cela vise à s’assurer que tout est correctement connecté.  Si toutes les couleurs sont affichent, je sais que les LEDs RVB sont connectés correctement. Le programme insère ensuite la boucle principale.

3.2 Potread
Puisqu’il y a 8 canaux sur chaque LTC2309, j’ai mis en place le programme donc les 8 canaux de IC2 sont lues dans une boucle for, et tous les 8 canaux de IC4 sont lus dans un autre pour la boucle.  Puisque ces puces sont contrôlés à l’aide de commandes I2C seulement deux broches sont utilisées.  On est une broche d’horloge qui fonctionne a 100Khz, et l’autre axe est une broche bidirectionnel, qui est utilisée pour envoyer et recevoir des données.

Afin de lire la valeur analogique de n’importe quel canal donné, vous devez indiquer l’ADC quelle voie vous voulez lire donc avant de lire n’importe quel canal vous devez tout d’abord envoyer deux octets d’informations à la puce. Le premier octet que du microcontrôleur envoie à l’ADC est le cadre de l’adresse. Il y a deux broches sur la LTC2309, qui vous pouvez de configurer l’adresse.  En définissant les AD1 code pin et broche AD0 à haute, basse ou flottant, vous pouvez obtenir jusqu'à 8 adresses différentes, ce qui signifie que vous pouvez connecter jusqu'à 8 différents LTC2309s' sur un bus I2C.  Si vous vous référez à la Figure 6.0, vous pouvez visualiser les différentes configurations.  J’ai indiqué quelle adresse que j’utilise. 7 bits sont utilisés comme adresse, et le LSB (Bit 0) est utilisée pour indiquer la météo c’est une commande de commande ou écriture lecture.  Ce bit affectant une prépare l’ADC pour une commande de lecture et mise à zéro lui attribue une commande "write".

L’octet suivant, envoyé à l’ADC est un peu 6 mot « Din ».  Il est responsable de la configuration des canaux.  Voir Figure 8.0 pour les configurations de Din. J’ai mis en évidence les différents mots que j’ai utilisé.  Dans mon programme, le bit S/D est toujours défini parce que j’ai fais seule Mensurations terminées.  Le bit de l’UNI est également toujours défini parce que je suis seulement en utilisant la puce en mode unipolaire.  Figure 7.0 est le diagramme de temps pour une commande "write" inclus dans la feuille de données.

Ensuite, l’ADC envoie la valeur analogique au microcontrôleur. Cependant, n’importe quel moment tout renseignement échangé de l’ADC au microcontrôleur, vous devez toujours envoyer la trame de l’adresse, sauf le LSB dans le cadre de l’adresse est changé en un, ce qui signifie que c’est une commande de lecture.   La valeur analogique 12 bits est envoyée en deux octets.  Figure 9.0 est que le format des données intervient. J’ai lu la valeur analogique dans deux variables différentes. Une variable contient les 8 bits les plus significatifs et l’autre octet contient les 4 bits les moins significatifs de la variable.  Cependant les bits les moins significatifs sont emplacement 4 places vers la gauche dans cette variable, et les 4 bits vers la droite sont juste des zéros. Afin d’obtenir cette valeur en une forme utilisable, j’ai déplacer les 8 lieux bits 4 vers la gauche. Je suis capable de faire cela puisque la variable que j’utilise est un mot de 16 bits.  J’ai ensuite déplacer la variable avec les 4 spots moins significatifs de bits 4 vers la droite.  Ces deux valeurs sont alors opérateur or ensemble et le résultat est une variable 16 bits d’une valeur analogique 12 bits.  Cependant, je dois encore réduire la valeur une valeur de signal de commande midi étant uniquement un seul octet. La valeur max d’ADC est 4095 sous forme décimale et doit donc être revus à la baisse à 128. Pour ce faire j’ai multiplier la valeur de l’ADC par 4095 puis fracture est de 128.  J’ai une autre variable, dont je me sers pour enregistrer la valeur précédente de ADC. Lorsque la boucle arrive encore une fois, il vérifie si la nouvelle valeur de l’ADC a changé. Si elle a changé plus d’une certaine valeur seuil, il envoie alors un signal midi avec la nouvelle valeur de l’ADC.  Si elle est inférieure à cette valeur, il saute il tous ensemble et continue de lire le prochain canal.  J’ai enregistrer la valeur non à l’échelle, ce seuil est de 50.  Je devais choisir une valeur qui était assez grande pour être au-dessus du bruit, mais ne pas si grand que les valeurs analogiques transmis au contrôleur midi sont vraiment loin de l’autre, donnant ainsi un son saccadé. Une commande de contrôle midi est une série de 3 octets. Le premier octet spécifie que c’est une commande qui est envoyée. Le deuxième octet est quel canal, la commande est expédiée.  Le dernier octet est la valeur analogique.    Ainsi, par exemple, permet de dire, dans le cadre de mon logiciel de musique, j’attribue un volume sur un certain canal pour accepter des signaux midi entrants du canal 16.  Que je tourne le potentiomètre, le contrôleur midi envoie en permanence ces 3 octets à un rythme très rapide.  Deux premiers octets restent les mêmes chaque fois que ces octets sont envoyés, mais la dernière valeur vont être modifiées. L’idée est que vous recherchez cette valeur à déplacer vers le haut ou vers le bas par petits incréments. Les incréments qui changent d’est la valeur de seuil a été discutée plus tôt. J’incrémente le canal 1, après chaque boucle, donc tous les potentiomètres écrivez à leur propre canal du midi. Cette boucle est alors continue 7 fois plus pour que ADC puce. Je continue une boucle différente, un autre 8 fois pour lire les valeurs de l’autre puce ADC. La seule différence entre les deux boucles est l’adresse que j’utilise pour communiquer avec la puce et les numéros de canaux qui sont mises à jour.

Articles Liés

Hacking SNES touches pour faire des contrôleurs de Style Arcade pour Retropie

Hacking SNES touches pour faire des contrôleurs de Style Arcade pour Retropie

Hi et Merci d'avoir pris le temps de lire mon tutoriel étonnante. L'anniversaire de ma petite soeur est le 25 février, elle est en train de 29 et je suppose qu'elle a commencé un peu vieux sentiment parce qu'elle m'a demandé de donner d'elle l'une de
Contrôleur de DJ MIDI PACMOD

Contrôleur de DJ MIDI PACMOD

pour l'anniversaire de mon fils, je lui fis un contrôleur DJ conçu pour ressembler à une vieille machine d'arcade cabinet. Ce qui suit est un bref aperçu du processus pour le faire, y compris le code.Le Teensy a été choisi comme le cerveau en raison
Pédale de commande de Rocksmith (contrôleur de style pédale d’effet) pour XBox 360

Pédale de commande de Rocksmith (contrôleur de style pédale d’effet) pour XBox 360

il s'agit de mon premier Instructable.  Je suis heureux que mon timing coïncidera avec la date limite d'inscription pour le Challenge 2 Game.Life! J'ai essayé de faire instructables avant, mais il semble être à mi-chemin à travers mes projets, j'ai a
Midi simple flûte/enregistreur contrôleur (EWI)

Midi simple flûte/enregistreur contrôleur (EWI)

Comme un enfant (il y a environ 30 ans), j'ai commencé mes cours de musique à la flûte (un enregistreur pour être précis) et maintenant je veux une version électronique moderne de cet instrument (un Instrument à vent électronique telle qu'elle est ap
IPAD MINI MINIMOOG contrôleur style

IPAD MINI MINIMOOG contrôleur style

J'ai toujours voulu faire une sorte de synthé style controller pour mon iPad synthés et utilisez un filtre monotrons dans la sortie.Ce Instructable sera sur la façon de construire un minimoog iPad-mini contrôleur de style.COMPOSANTS DE BASEun grand n
CoreConduit : Jardin intérieur contrôleur système

CoreConduit : Jardin intérieur contrôleur système

Un contrôleur de jardin nous permet de gérer l'environnement de contrôle, ventilateurs, appareils de chauffage, lampes, pompes et nous en aviser quand le jardin a besoin de notre attention.Le jardin contrôleur système vous aidera à se développer :Ver
CoreConduit : Automatisé contrôleur de jardin

CoreConduit : Automatisé contrôleur de jardin

Un contrôleur de jardin nous permet de gérer l'environnement de contrôle, ventilateurs, appareils de chauffage, lampes, pompes et nous en aviser quand le jardin a besoin de notre attention.http://hydromazing.coreconduit.comÉtape 1: Compiler, téléchar
Contrôleur de LED-RGB

Contrôleur de LED-RGB

Il s'agit de mon contrôleur RGB-LED fait maison.Il est connecté à l'ordinateur qui me permet de modifier la couleur à la main, ou les changements de couleur à la musique, ou son ambilight similaire, les voyants ont la couleur principale de mon écran.
Arduino Due selon Fractal Audio Axe-FX II contrôleur

Arduino Due selon Fractal Audio Axe-FX II contrôleur

J'ai utilisé des effets guitare et préamplis comme la Digitech GSP-21 et de l'ART SGX2000 dans mon banc direct depuis le début des années 90. Bien que les grandes unités pour leur période, il était temps pour une mise à niveau. Après avoir lu quelque
Contrôleur MIDI DJ de arcade style

Contrôleur MIDI DJ de arcade style

>>> ce n'est pas encore tout à fait fini car j'ai armé un peu du circuit vers le haut. Je vais mettre à jour l'instructable et charger une vidéo lorsqu'elle est triée <<<J'ai été DJ pendant une dizaine d'années maintenant, et pour les de
Contrôleur de MIDI personnalisé construit

Contrôleur de MIDI personnalisé construit

Im entrant dans cette jnstructable au concours d'instruments de musique, si vous l'aimez s'il vous plaît votez pour moi cos j'aimerais bien un nouveau synthé ! Comme un producteur de musique électronique/interprète, j'ai rassemblé quelques contrôleur
Contrôleur MIDI contrôlé la flamme

Contrôleur MIDI contrôlé la flamme

Un énorme problème dans le monde de la production musicale numérique garde cette chaleur analogique (qui a résonné de tubes et systèmes de bobine à bobine) en musique numérique moderne. Beaucoup jurent que les systèmes analogiques ont un son qui ne p
Convertir un jouet secouru un contrôleur MIDI

Convertir un jouet secouru un contrôleur MIDI

dans ce Instructable, je vous guidera dans le processus de conversion de jouet d'enfant secouru faire du bruit en un instrument de musique vraiment utile à l'aide de MIDI ! Prenez un moment pour juste coup d'oeil sur les titres des étapes de ce Instr
Week-end maison contrôleur (Work in progress) Smart

Week-end maison contrôleur (Work in progress) Smart

Remarque : Cette instructable est encore travaux en cours (WIP), puisque je n'ai pas beaucoup de temps à cause de l'école et j'ai des problèmes avec Edison. Et parce que je suis perfectionniste, tandis que l'instructable est en état de travaux en cou