Salut a tous,
Je suis actuellement en train de réaliser un analyseur logique (Analyseur logique — Wikipédia pour ceux qui ne savent pas ce que c'est) à base d'arduino (pour reverser une carte qui est sensé communiquer, par je ne sais qu'elle protocole, mais dont je ne trouve ni mode d'emploi ni Datasheet pour les CI sur la carte ).
Et donc j'ai besoin de visualiser l'évolution de l'état logique de chaque broche de sortie à l'écran. J'utilise l'arduino pour faire l'aquisition des "données" et je traite ensuite avec processing (http://processing.org/) pour m'afficher à l'écran l'états de chaque broche.
Je me suis inspirer de l'oscilloscope a base d'arduino trouver ici:http://fr.flossmanuals.net/arduino/ch023_oscilloscope
Mon prototype est pour l'instant assez rudimentaire mais je compte l'améliorer au fur et a mesure. Je post mon code maintenant en esperant que cela puisse aider quelqu'un, et aussi peut être pouvoir faire évoluer a plusieurs l'idée et de trouver des conseils pour optimiser: l'acquisition, le traitement, la mise en forme, ou l'ajout d'outils pour faciliter l'analyse logique.
Coter arduino le code est tres simple:
void setup() {
DDRB=B10000000;
Serial.begin(115200);
}
void loop() {
Serial.println(PINB);
}
Ce code amorce une communication serie avec l'ordinateur (à la vitesse maximum proposée par le terminal série arduino, mais il est peut être possible de l'augmenter?!) puis envoi en boucle la valeur de PINB.
pour ceux qui ne connaissent pas:http://arduino.cc/fr/Main/PortManipulation
Une lecture avec digital.Read() est plus longue! Je me demande si le temps ainsi gagner n'est pas perdu a cause de la communication série trop lente?!
Coter processing voila le code:
import processing.serial.*;
Serial maConnection;
int a,b,c,d,e,f,donnees=0,x,fenetreTemps=12000;
void setup() {
size(1200, 400);
String NomDuPort = Serial.list()[0];
println("connection a "+NomDuPort);
maConnection = new Serial(this, NomDuPort, 115200);
background(255);
}
void draw() {
}
void serialEvent (Serial maConnection) {
String retour=maConnection.readStringUntil('\n');
if (retour != null) {
retour = trim(retour);
donnees = int(retour);
}
int oldx=x;
x=(millis()%fenetreTemps)*width/fenetreTemps;
if (oldx>x) {
oldx=0;
background(255);
}
plot(donnees,x);
}
void plot(int val, int pos) {
a=val & 1;
b=(val & 2)/2;
c=(val & 4)/4;
d=(val & 8)/8;
e=(val & 16)/16;
f=(val & 32)/32;
point(pos,a*20+50);
point(pos,b*20+100);
point(pos,c*20+150);
point(pos,d*20+200);
point(pos,e*20+250);
point(pos,f*20+300);
}
Ce code permet à processing d'établir la communication serie avec l'arduino puis d'ouvrir une fenêtre 1200*400 et tracer de facon continue les valeurs des états logique de chaque broches, respectivement 8 à 13 de l'arduino(Mais il est envisageable de pousser le principe à toutes les broches de l'arduino).
On se retrouve donc avec 6 tracé corespondant à chacune de leur broches respective et permet de faire une interpretation visuel des chagement d'états logique.
Ceci est bien sur une version test, mes prochains objectif sont:
- d'enregistrer les valeurs recu dans un grand tableau[] pour pouvoir faire l'aquisition sur une longue periode.
- d'ameliorer la communication serie
- De faire une meilleur présentation visuel des signaux
- Eventuelement ajouter des outils d'analyse pour different protocole (I2C, UART,...?!)
Toute aide ou sugestion est évidement la bienvenue