Arduinolyzer.js : Transformez votre Arduino en un analyseur logique (5 / 8 étapes)

Étape 5: Arduino Sketch

Le sketch Arduino contient une machine à États non plus à l’écoute des commandes série à analyser, ou lance une session d’acquisition de données. Acquisition de données se produit sous la forme de bord déclenché par échantillonnage ou basés sur le temps du scrutin. Interrogation base de temps peut être trigged par une arête montante ou descendante.

J’ai créé le code pour utiliser les broches Arduino Uno suivantes (ne doit ne pas pour être confondu avec les broches ATmega) :

  • Broche 2: Interruption 0, la détente
  • Broche 8: Canal 1
  • Broche 9: Canal 2
  • Broche 10 : Canal 3
  • Broche 11 : Channel 4

Boucle de commande

La boucle de commande série interroge le port série et attend pour les caractères d’arriver. Chaque commande est une chaîne de caractères se terminant par « % ». Lorsqu’une « % » est analysée, le tampon de la chaîne actuelle est expédié au routeur. (Le client JavaScript enverra une seule grande chaîne avec toutes les commandes.)

Commandes :

  • Réinitialiser %: effacer les variables globales de contexte
  • ch {} 1-4 %: activer les canaux 1, 2, 3 ou 4
  • temps %n%: régler l’heure de l’échantillon à « n » microsecondes.
  • limiten%: limiter le nombre d’échantillons d’octet à ' n '. J’ai ajouté ceci pour me donner un moyen de gérer le temps de l’échantillon, puisque je ne peux pas l’interrompre sans perte de données
  • % en hausse: l’échantillon sur le front de la détente
  • % de chute: l’échantillon sur le front descendant du déclencheur (échantillonnage Remarque fonctionne sur les deux côtés, ils ne sont pas mutex)
  • une fois %: effectuer un One-Shot trigger qui commence le mode d’interrogation
  • commencer %: compiler options ci-dessus dans les variables globales, définir les pointeurs de fonction et les rappels et commencer la boucle d’échantillonnage

Après avoir reçu la commande start % , l’esquisse configure les variables du contexte global et commutateurs de commande l’analyse à l’échantillonnage. Il ne peut être interrompue jusqu'à ce qu’il remplit et retourne les données, sauf si vous faites un hard reset bouton ou de puissance.

Temps d’échantillonnage

Si l’utilisateur n’a pas sélectionné tout déclenchement, l’esquisse détermine quelle routine de temps il doit utiliser. Il y en a trois :

  1. Aussi vite que possible : cela n’a aucun délai pour la vitesse maximale
  2. delay_ms(): cet exemple utilise la fonction delay()
  3. delay_us(): cet exemple utilise la fonction delayMicroseconds() , qui a une limite maximum de 16 383 US.

L’esquisse affecte le bon fonctionnement à un pointeur fonction plutôt qu’avec if/else instructions conditionnelles, Cela accélère l’exécution et permet de mieux abstraction.

One-Shot Trigger

Si l’utilisateur a sélectionné mode One-Shot, une routine de service d’interruption (ISR) est définie sur INT0 (le déclencheur), pour soit en hausse, chute, ou changement. L’ISR utilisera ensuite détacher l’interruption et appellera basés sur le temps d’échantillonnage définies ci-dessus.

-Déclenchement à bord

Bord-déclenchée l’échantillonnage ignore les routines de temps basé et recueille un échantillon par gâchette. Le sketch s’adapte sur un ISR INT0 similaire au mode One-Shot, mais au lieu de détacher l’interruption et l’appel de la routine basée sur le temps, qu’elle perçoit simplement un échantillon par interruption. Comme vous pouvez le dire, si les interruptions arrivent plus vite que le code peut traiter, les données seront perdues. La limite est d’environ 20us en raison de la grande quantité de code dans les routines de l’échantillon.

Échantillonnage des données

Toutes les méthodes d’invocation d’échantillonnage utilisent les mêmes fonctions d’acquisition de données de bas niveau.

Essayer de limiter les frais généraux, j’ai écrit quatre différentes routines d’échantillonnage basé sur le nombre de canaux sélectionnés et appellent un pointeur de fonction au lieu d’if/else. Chaque routine a ses propres optimisations. Le gestionnaire de commandes Démarrer % définit le pointeur de fonction appropriée.

Le croquis stocke les échantillons dans une mémoire tampon d’octets [1080]. Cela se traduit par bit 8640 échantillons pour un canal. Le nombre d’échantillons d’octet doit être divisible par 2, 3 et 4. Étant donné que je suis d’accueillir 1, 2, 3 ou 4 canaux à être actif, j’ai besoin de partitionner le tableau buffer afin que je ne dois pas effectuer tout contrôle limite spéciale. Faire la taille divisible par 12 est le meilleur moyen de gérer cela. Je ne faire respecter dans le code, mais je le fais dans l’interface HTML5 : Remarquez que le contrôle d’échantillons incrémente de 96 (12 * 8) et s’arrête à 8640 (1080 * 8). Comme la lecture des morceaux, ils sont décalés et emballés dans chaque octet. Après chaque 8 bits, un octet est stocké à l’index et l’indice est incrémenté. Lorsque l’index est égale à la profondeur de stockage, échantillonnage complète et les données sont envoyées. Si un canal est sélectionné, les données sont écrites sur tampon [index]. Si deux canaux sont sélectionnés, octets sont écrits dans la mémoire tampon [index] et tampon [index + offset_2] ; offset_2 = MAX_BYTE_SAMPLES * 1 / 2 et l’indice est la moitié de ce qu’il est en mode monocanal. Écriture de trois canaux de buffer [index], tampon [index + offset_2] et [index + offset_3] ; offset_2 = MAX_BYTE_SAMPLES * 1 / 3 et offset_3 = MAX_BYTE_SAMPLES * 2 / 3, index est 1/3 de celui-ci est la valeur max dans un canal mode, etc..

Une fois le le tampon se remplit ou l’index dépasse la limite %, stopper les routines de l’échantillon et les données sont envoyées en retour.

Envoi de données

Les données envoient routine retourne le nombre d’échantillons prélevés (divisé par le nombre de canaux utilisés) et des données binaires des canaux. Étant donné que l’utilisateur peut sélectionner n’importe quelle configuration de canaux, cette routine décode les canaux utilisés et les étiquettes en conséquence (un peu compliquée, en fait, je sais il y a une solution plus rapide là-bas...). Il crochets également la transmission avec begindata et enddata pour aider le serveur à coordonner son analyseur.

Remarque

Vous remarquerez peut-être des variables globales gratuites. Je l’ai fait parce que je suis en train d’obtenir une poignée sur la façon de minimiser l’empreinte mémoire pour faire place à plus grande capacité de l’échantillon. Un secteur qui a besoin de travail : J’ai utilisé un grand nombre d’objets String qui croissent et se rétrécir, et j’ai beaucoup de débogage char * chaînes circulent là-dedans. J’ai évité d’utiliser malloc() et déclaré la solution tampon dans le tas. J’ai trouvé que 1080 octets est le plus que je peux utiliser fiable sans s’écraser l’esquisse. Ma liste de tâches inclut comprendre la gestion de la mémoire mieux sur l’ATmega et avr-mec / gcc et ré-écriture de ce croquis pour être plus prévisible WRT utilisation de la mémoire.

Articles Liés

Transformez votre Arduino Uno en un USB-HID-Mididevice

Transformez votre Arduino Uno en un USB-HID-Mididevice

tandis que construire un Arduino Uno fondé Midi-contrôleur pour Ableton Live, je suis tombé sur le projet HIDUINO (http://code.google.com/p/hiduino/). Il vous permet de transformer votre Arduino Uno (ou tout autre appareil utilisant un chipset USB AV
RECOMPILE (renommer) et Flash HIDUINO avec ISP pour transformer votre Arduino en un périphérique HID (usb-midi)

RECOMPILE (renommer) et Flash HIDUINO avec ISP pour transformer votre Arduino en un périphérique HID (usb-midi)

HIDUINO est un firmware (code) fait pour courir sur les microcontrôleurs Atmega8u2 (Arduino UNO Rev 2 - et antérieur - ou Mega2560) et Atmega16u2 (Arduino UNO Rev3).Ce sont ceux en charge de faire de l'ordinateur et les conseils de parler les uns aux
ArduFlake : Transformez votre Arduino en le meilleur cadeau du monde !

ArduFlake : Transformez votre Arduino en le meilleur cadeau du monde !

S'il vous plaît votez pour moi au concours de cadeau de vacances et du faire ce concours Glow !Tout d'abord, cela a commencé comme un cadeau et non un instructable. S'il vous plaît excuse une main agitant ici et là comme je n'ai pas de photo de la gr
Transformez votre Arduino en un lecteur de cartes magnétiques !

Transformez votre Arduino en un lecteur de cartes magnétiques !

Tout le monde a utilisé un lecteur de cartes magnétiques, je crois. Je veux dire, qui exploite une trésorerie ces jours-ci ? Ils ne sont pas difficiles à mettre la main sur, soit, et lors d'un voyage à mon magasin préféré électronique local, j'ai tro
Transformer votre Arduino en un synthétiseur wavetable de 4 voix avec seulement quelques composants...

Transformer votre Arduino en un synthétiseur wavetable de 4 voix avec seulement quelques composants...

Des projets de synthétiseur multiples ont été réalisées pour l'Arduino, mais peu ont été capables d'utiliser la pleine puissance du processeur de l'Arduino. DZL de GeekPhysical écrivit un synthétiseur wavetable 4 voix qui est l'un des plus avancés sy
Bases de transformer votre véhicule Controll distant en un système autonome (Drone) en utilisant un Arduino

Bases de transformer votre véhicule Controll distant en un système autonome (Drone) en utilisant un Arduino

j'ai commencé ce projet avec l'objectif de transformer à moindre coût ma RC hélicoptère en quelque chose d'un UAV ou au moins pour s'adapter à certains capteurs pour réduire les collisions et autres "Pad mal."Maintenant, malheureusement, au débu
Comment transformer votre smartphone à un générique shield pour Arduino

Comment transformer votre smartphone à un générique shield pour Arduino

Salut les gars, je suis l'un des créateurs de 1Sheeld, c'est une application mobile et une planche qui transforme votre smartphone en une plateforme ouverte pour Arduino.ComposantsArduino Uno 19,99 $1Sheeld 54,94 $Maquette, cavaliers, LEDsFondamental
SensoDuino : Transformez votre téléphone Android en un Hub de capteurs sans fil pour Arduino

SensoDuino : Transformez votre téléphone Android en un Hub de capteurs sans fil pour Arduino

Mises à jour23 novembre 2013: SensoDuino 0,160 obtient un visage à gauche.Le 19 nov. 2031 : avis : la synergie incroyable entre Arduino & Android.19 novembre 2013: SensoDuino 0.159 est sorti. Téléphone Android date (y, m, d) et l'heure (h, m, s) sont
Intégrer votre Arduino avec Flash et Actionscript 3

Intégrer votre Arduino avec Flash et Actionscript 3

donc vous pourriez avoir été en regardant autour sur divers sites de téléchargement de code pour Arduino pour communiquer avec flash, mais si vous êtes comme moi vous avez probablement eu quelques difficultés à essayer de les amener à bien communique
Un petit interrupteur et boîte de potentiomètre pour votre Arduino

Un petit interrupteur et boîte de potentiomètre pour votre Arduino

avoir bricolé des charges d'Arduino circuits et me retrouvais toujours piquer des commutateurs et potentiomètres par carton, j'ai pensé qu'il était temps de produire quelque chose d'un peu plus joli. Alors, voici comment faire une jolie petite boîte
Arduino universel Bluetooth Connect - contrôle votre Arduino avec votre appareil Android

Arduino universel Bluetooth Connect - contrôle votre Arduino avec votre appareil Android

J'ai toujours voulu contrôler plus facilement mon Arduino avec mon Smartphone, mais j'ai jamais trouvé la solution parfaite pour le faire. Je ne veux pas dire que c'est parfait, mais il fait ce que je veux qu'il do...well pas complètement, mais je su
Alimenter votre Arduino/AVR avec une batterie Hand-Cranked

Alimenter votre Arduino/AVR avec une batterie Hand-Cranked

si vous avez toujours voulu votre Arduino ou AVR de puissance d'une batterie pour les essais de développement (batteries ont qualités livraison différentes puissances à, dire, AC transformé ou même une verrue mur réglementé en DC) essais mais étaient
Transformer votre téléviseur LCD/LED en hologramme TV

Transformer votre téléviseur LCD/LED en hologramme TV

Je vous présente trois étapes simples pour transformer votre téléviseur LCD/LED en un hologramme TV...Très facile et très simple.Étape 1: Couper et coller... Couper quatre feuilles A4 transparentes en forme trapézoïdale et se joindre à eux pour forme
Comment transformer votre Pi framboise 2 dans une Console rétro

Comment transformer votre Pi framboise 2 dans une Console rétro

C'est comment vous pouvez transformer à votre Raspberry Pi 2 dans une console rétro assez puissante. Il dirige la station de l'émulation et peut émuler les consoles plus de 20 jusqu'à l'époque de la n64.Étape 1: Ce que vous devezUn pi framboise 2Une