Pages: [1]   Go Down
Author Topic: analyseur logique  (Read 1397 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut a tous,

  Je suis actuellement en train de réaliser un analyseur logique (http://fr.wikipedia.org/wiki/Analyseur_logique 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  smiley-slim ).
  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:
Code:
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:
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 smiley
« Last Edit: February 23, 2013, 02:08:24 pm by AKkarol7 » Logged

Ales
Online Online
Faraday Member
**
Karma: 29
Posts: 3163
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un ptit truc : faire le serial.print() uniquement s'il y a un changement d'état, sinon ça ne sert à rien.
Logged


France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Un autre petit truc. Faire une recherche sur le forum ou sur le net avant de se lancer dans des projets comme ça:

Il existe déjà un projet à base d'Arduino qui s'appuie sur SUMP et utilise son environnement d'affichage
https://github.com/gillham/logic_analyzer
http://arduino.cc/forum/index.php/topic,52881.0.html
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 961
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour
-faire soi même à partir de zéro est un 'plan' qui est intéressant si l'objectif est de comprendre le principe.
-le projet mentionné par fdufnews a été présenté sommairement dans ce fil :
http://arduino.cc/forum/index.php?PHPSESSID=b7d422c28702734b28f3a1c769b425ab&topic=69885.0
c'est un projet qui avance (doucement)
Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3010
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Attention je ne dénigre pas le développement en partant de zéro. Mais il est des fois plus "utiles" de partir d'un projet existant est de le faire avancer un pas plus loin Cela permet d'avoir un outil plus complet au lieu d'avoir 10 projets commencés et jamais aboutis.
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Le principe est là mais en situation réel un tel analyseur logique serait inutilisable.

Ce qui fait la force d'un analyseur logique c'est la fréquence d'échantillonnage.
Celle ci doit être stable, terriblement stable même et surtout connu.

Dans ton code tu ne fait que "boucler", rien ne te dit à quelle fréquence tu échantillonnes.
De fait tu ne peu donc pas savoir combien de µs/ms/s dure un front, ce qui est la base d'un analyseur logique.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

fdufnews:
Quote
Faire une recherche sur le forum ou sur le net avant de se lancer dans des projets comme ça:
Je ne sais pas par ou commencer pour répondre a ça, mais tentons tout de même. J'ai longtemps chercher avant de commencer et je suis tomber sur plusieurs truc, plus ou moins fonctionelle  du genre:
http://code.google.com/p/arduinoscope/  
http://code.google.com/p/xoscillo/
Le lien que tu me fourni, je m'y etait déja interesser.
Et si malgré tout ca j'ai quand même décider de tenter d'en faire un moi meme, c'est que les les liens que je donne ci dessus ne corespondent pas exactement a mes attentes mais que surtout ils ne sont pas facilement installable/modifiable, quand au lien que tu me donne, est, de loin, le plus dur de tous! (il n'y a qu'a voir le probleme que les gens rencontrent dans les sujet qui en parle, et en plus il demande a faire des modification sur la carte meme de larduino

al1fch:
Quote
-faire soi même à partir de zéro est un 'plan' qui est intéressant si l'objectif est de comprendre le principe.
je ne sais pas si j'ai bien compris ce que tu dit, mais de facon narcissique je peut t'affirmer que mon objectif premier est de ne rien comprendre...

fdufnews:
Quote
Attention je ne dénigre pas le développement en partant de zéro. Mais il est des fois plus "utiles" de partir d'un projet existant est de le faire avancer un pas plus loin Cela permet d'avoir un outil plus complet au lieu d'avoir 10 projets commencés et jamais aboutis.

Je rejoins totalement ce que tu dit la, d'ailleur, comparé a ton premier post, cela me surprend un peu.
 On peu dire plein de chose a propos de ne pas réinventer la roue, alors que d'autre projet existe deja sa sert a rien d'en etamer d'autre, on pourait certainement améliorer indefiniment les autres deja existant aussi, et je ne propose pas quelque chose de révolutionaire, juste un outil simple (comme ce dont j'ai besoin) et qui peut rapidement donner une idée visuel de ce qui se passe.
arduino et processing sont des logiciel relativement simple a installer, et permetre a quiconque qui le veuille, d'avoir juste a recopier un code et de l'executer aurait etait un analyseur logic qui repond a mes atentes.
et j'aimerais aussi prendre l'exemple de linux dont il existent des centaines de distribution et le fait qu'il y en ai autant n'empeche pas des equipe de devellopeur de se reunir pour en creer de nouvelle

skywodd:
Quote
Le principe est là mais en situation réel un tel analyseur logique serait inutilisable.
Est ce que tu pourait m'eclaircir, car comme je le dit au tout debut mon objectif est de comprendre une carte sur laquelle je n'ai aucune information...
mais j'ai une petite idee sur le fonctionement et dans mon cas l'analyseur serait (avec une legere amelioration) parfaitement l'outil qu'il me faut.
Je pourait tout a fais envoyer les echantillon de facon cadencé avec une horloge interne sa se rapprocherais plus de la precision que tu recherche, mais encore une fois je souhaite vraiment recevoir des conseils ou critique (constructive) pour ameliorer l'idée de depart et dans l'idéal la rendre le plus simple possible.
« Last Edit: February 24, 2013, 07:58:45 am by AKkarol7 » Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Est ce que tu pourait m'eclaircir, car comme je le dit au tout debut mon objectif est de comprendre une carte sur laquelle je n'ai aucune information...
mais j'ai une petite idee sur le fonctionement et dans mon cas l'analyseur serait (avec une legere amelioration) parfaitement l'outil qu'il me faut.
Je pourait tout a fais envoyer les echantillon de facon cadencé avec une horloge interne sa se rapprocherais plus de la precision que tu recherche, mais encore une fois je souhaite vraiment recevoir des conseils ou critique (constructive) pour ameliorer l'idée de depart et dans l'idéal la rendre le plus simple possible.
Ton but est de capturer un signal, qui par définition est défini sur une plage de temps T par des fronts de durée inconnu.
Ton code actuel permet de capturer ces fronts, mais sans base de temps, donc sans pouvoir mesurer précisément la durée des dit fronts.

Les "vrai" analyseurs logiques utilisent une horloge à une fréquence connu (et élevé) pour capturer les échantillons.
Une fois le signal capturé tu sait que le front x a durée N tick d'horloge -> tu connais la durée d'un tick -> tu connais la durée du front.

À moins de travailler sur un signal ayant déjà une ligne d'horloge (SPI, ...) un analyseur logique sans base de temps c'est comme un oscilloscope sans base temps : aucun intérêt.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 24
Posts: 3170
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

En intégrant une mesure avec micros(), ce serait déjà un début acceptable non ?
Logged

MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

En intégrant une mesure avec micros(), ce serait déjà un début acceptable non ?
Le problème ne sera que déplacé, il faut penser aussi au temps que prend Serial.println() (qui est bufferisé et sous interruptions en plus).

Le code arduino compatible SUMP par exemple utilise un timer pour la capture à "temps fixe" et un tableau en RAM pour stocker les échantillons.
C'est exactement le même principe qui est utilisé dans la carte OpenLogicSniffer, sauf que l'horloge est bien plus rapide qu'un bête timer et que la mémoire RAM est aussi bien plus grande.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 3
Posts: 30
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Je ne parle pas français. Désolé pour les erreurs de traduction.

Je suis l'auteur de l'esquisse Arduino analyseur logique. Si vous rencontrez des problèmes avec l'AGLA ou les fonctionnalités manquantes, j'aimerais obtenir de la rétroaction et de le corriger.

S'il vous plaît comprendre les limites actuelles sont dues à des contraintes matérielles de l'Arduino lui-même, je fais ce que je peux pour rendre l'échantillon le plus rapidement (et aussi profondément) que possible.

Merci.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi Gillham

Excuse Me! for traduction mistake smiley

I'm very impressed of your logic anlyser project but, as i say on my top message, i have a board that i can't find any documentation and integrate circuit solded to it don't have to...  i have a little idea of how this board can work so i just need a easy to use analyser tool to approved what i think, but all project that i find on the web does not suit for me (in term of ease). the only critisism i can't say to your project is, because of the need to do modification on the arduino board.
That's why i just write a little piece of code for arduino and processing to have a visualisation of what appen on different wire of my board.

Logged

Offline Offline
Newbie
*
Karma: 3
Posts: 30
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

the only critisism i can't say to your project is, because of the need to do modification on the arduino board.

That's why i just write a little piece of code for arduino and processing to have a visualisation of what appen on different wire of my board.

Thanks AKkarol7.  I just wanted to find out if there were any issues I could fix to make my logic analyzer easier to use or more useful.  Making your own tool that does exactly what you need is cool too and part of the fun of learning how things work.

With a recent version of the sketch and client software you do not have to disable the automatic reset feature if you are using Jawi's alternative client.  I will try to improve my README so it is more clear in that area.  You should be able to just upload the sketch and launch the java client to use AGLA.

Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 13
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
I just wanted to find out if there were any issues I could fix to make my logic analyzer easier to use or more useful.

i think people, often need, quick to use without any complex instalation tool. maybe you should make a youtube tutorial, i think that will be a good help.  smiley-wink
because a must confess i was always lost on github project and for your project i don't find a good place where to find help :S

Quote
Making your own tool that does exactly what you need is cool too and part of the fun of learning how things work.

it's true i  found fun to realize it  smiley
Logged

Pages: [1]   Go Up
Jump to: