26

Re : Pilotage caméra

J'ai trouvé ceci concernant la conversion TTL/RS422 :
- http://www.kmitl.ac.th/~kswichit/Rs422/Rs422.html

Par ailleurs, un pb de réseau hier au boulot fait que ma réponse n'est pas partie. Je te conseillais d'abandonner HyperTerminal et ses frasques au profit d'un vrai outil d'investigation de comm série, à savoir Docklight (http://www.docklight.de/).

La version gratuite de DL permet de :
- visualiser les échanges en ASCII, hexa, binaire,...
- définir des séquences (pratique pour tes commandes de caméra par exemple)
- définir des réponses envoyées automatiquement sur réception de certaines trames (avec possibilité de "jokers" dans la définition des trames à détecter)
- fonctionner en espion de ligne série

Ca marche pour toute comm qui peut être vue comme une liaison série, et par exemple plusieurs de nos articles sur l'I2C utilisent DL pour explorer les échanges, grâce à l'utilisation d'une interface USB/I2C qui est vue comme un port comm virtuel.

La version pro (et payante, mais très modique) permet en plus :
- de stocker toutes les définitions de trames
- de scripter en VB (je l'ai utilisée pour décoder et présenter en clair des trames NMEA lors de manip avec un GPS)
- de travailler également sur des comm TCP, aussi bien en mode serveur que client

Autant dire que ce pauvre nain d'HyperTerminal peut aller se rhabiller illico wink

Eric

27

Re : Pilotage caméra

Salut Éric et encore merci.
Je vais effectivement testé To
Outil. (j'ai essayé Putty sans meilleur résultat).
Mais il est vrait que disposer un outil digne de ce nom le donnerzit plus d'infos et donc l'aider à trouver la cause du problème.

Je vais encore essyer un truc.

Envoyer les commandes depuis hyperTermina (ou ton outil) vers le por Comt0 de la Mega.
D'envoyer le com2 de la Mega vers les convertisseurs TTL / 232 / 422
Puis des convertisseurs vers la cam.

En Utilisant ce code sur la Mega.


void setup() {
  // initialize both serial ports:
  Serial.begin(9600);
  Serial2.begin(9600);
}

void loop() {
  // read from port 2, send to port 0:
  if (Serial2.available()) {
    int inByte = Serial2.read();
    Serial.print(inByte, BYTE); 
  }
  // read from port 0, send to port 2:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial2.print(inByte, BYTE); 
  }
}

J'espère sur cela me donnera des infos supplémentaires pour trouver d'où ça coince.

Je te tiens informé. Mais je ne pourrais rester que lundi.

En attendant je vais télécharger ton outil. (peut être en version complète si cela peut m'aider ça vaut la peine bien sur. Et voir comment il fonctionne.
J'ai le WE pour le prendre en main wink

Merci a toi
Cdlt
Yves

28

Re : Pilotage caméra

Eric
J'ai téléchargé DockLight (la version gratuite dans un 1er temps)
Ça a l'air effectivement pas mal wink

Pour pas mal de choses que HyperTerminal ne sais pas faire...
Notamment scripter la liaison en permettant d'envoyer des séquences en VB

Je sent que ce genre d'outil deviens vite indispensable.
Je connaissais Putty et le trouvais déjà bien mieux qu'HyperTerminal. Mais la même lui semble être un nain a coté wink

J’espère juste que le diagnostique que j'obtiendrais me permettra de déceler la cause de mon probleme.

Cdlt
Yves

29 Dernière modification par AstonDB8 (28-03-2012 22:45)

Re : Pilotage caméra

Bonsoir

Alors voila enfin des nouvelles
Appelé par d'autres projets, j'ai du mettre celui là en attente quelques temps. Mais bon bonne nouvelle, je m'y suis remis et ça marche wink

En fait il y avait trois problèmes réunis. J'ai bien sur essayé pas mal de choses, dont certaines choses qui faisaient que cela ne marchait pas mais jamais les trois en même temps. Donc voila j'ai enfin gagné mon tiercé wink

Donc:
Problème N°1 mais ça je m'en doutais il y avait un croisement de Rx et Tx.
Le plus surprenant est que la connexion entre le convertisseur USB/RS232 et RS232/RS422  n'est pas dans le même sens que la connexion UART TTL/RS232 et RS232/RS422 alors que les connecteurs sont de même sexe.

Problème N°2 Je dois alimenter la connexion DTS en 5v

Problème N°3 (c'est celui qui m'a posé le plus gros probleme)
Même si en HyperTerminal envoyer un RC (Retour Chariot) suffit je dois envoyer un LF (Line Feed) + un RC quand j’envoie les commandes depuis l'Arduino (Serial.print("Commande\n\r");

Bon enfin ça marche et c'est bien ça le principal (voir le plus surprenant wink  )

En fait ça marche tellement bien qu'on me demande des améliorations wink La rançon de la gloire ? Non plutôt le Stakhanovisme de ma hiérarchie wink

En fait, je dois implémenter plusieurs caméras (en fait les trois caméras qualifiées sur ce projet) Chaque centre ayyant choisis des cam différentes dans le parc des cams qualifiées bien sur)
Comme les protocoles sont assez copieux et que nous ne nous contenterons pas de ces trois modèles, j'ai pensé mettre les protocoles (et donc les commandes)  sur Eprom (Une Eprom par Cam). Il me suffirait de donner des adresses mémoire communes à chaque commande. Chaque Cam irait chercher sa commande dans l'Eprom qui lui est propre. Cette solution facilite également les MAJ puisqu'il suffirait d'envoyer une Eprom à jour.
J'ai trouvé la Lib EPROM.h. Elle semble simple à utiliser. Mais est elle réservée à l'Eprom de 1K interne aux carte Arduino ?
Et si oui, connaissez vous une solution pour gérer plusieurs Eproms ? Car j'ai trouvé pas mal de chose a propos des ces composants, pas mal de Shields Eprom à des prix raisonnables mais sans trop de documentation.
Si vous avez un lien qui puisse me mettre sur la voie je suis preneur.

Dernière chose, Nous allons lancer plusieurs Télécommandes en fabrication (10 pour commencer). Mais on me demande si elle ne pourraient pas communiquer entre elle via du LAN et donc commander une Cam avec un télécommande distante.
Et là, je suis un peu sec. Je n'ai encore jamais utilisé de carte réseau avec Arduino. Donc pouvez vous me dire si il est possible (en choisissant le port com sur lequel on envois les commandes de les diriger soit vers le Com2 relié en UART TTL et donc la caméra locale, soit vers la carte réseau et communiquer avec une cam Distante.
La commande serait interprétée par une autre télécommande de même architecture.


Pour résumer il faudrait :
Soit envoyer les commandes en RS en local à la Cam locale, soit envoyé via réseau à une autre télécommande qui déplacerait une autre caméra distante. (bien sur tout le monde serait dans le même VLan)

Merci pour votre aide
Cdlt
Yves

30

Re : Pilotage caméra

Salut Yves,

AstonDB8 a écrit:

Alors voila enfin des nouvelles
Appelé par d'autres projets, j'ai du mettre celui là en attente quelques temps. Mais bon bonne nouvelle, je m'y suis remis et ça marche wink

Ca c'est une bonne nouvelle

AstonDB8 a écrit:

Problème N°1 mais ça je m'en doutais il y avait un croisement de Rx et Tx.
Le plus surprenant est que la connexion entre le convertisseur USB/RS232 et RS232/RS422  n'est pas dans le même sens que la connexion UART TTL/RS232 et RS232/RS422 alors que les connecteurs sont de même sexe.

Si tu savais le nombre de choses qui utilisent la même connectique et sont totalement différentes, alors qu'il s'agit du même domaine (ex: les communications)...

AstonDB8 a écrit:

Problème N°2 Je dois alimenter la connexion DTS en 5v

DTS ? Je connais CTS, RTS et DTR, mais pas DTS. S'il s'agit bien d'un de ces signaux, cela signifie que le matériel implémente un protocole hardware, et utilise donc ces signaux. A peu de choses près, DTR signifie "Data Terminal Ready", c'est à dire "je suis prêt à communiquer", RTS "Request To Send", soit "je demande à parler" et CTS est "Clear To Send", soit "tu peux transmettre". Dans les connextion multi-points (RS485, RS232/422 multi-drop), CTS doit être à l'éta hat pour autoriser la communication. Ceci explique la nécessité de parfois connecter ces signaux entre les protagonistes ou d'en forcer l'état.

Problème N°3 (c'est celui qui m'a posé le plus gros probleme)
Même si en HyperTerminal envoyer un RC (Retour Chariot) suffit je dois envoyer un LF (Line Feed) + un RC quand j’envoie les commandes depuis l'Arduino (Serial.print("Commande\n\r");

Je t'en ai parlé par mail. C'est un des pbs des outils "simplistes" comme HT qui masquent une partie des mécanismes et font qu'on pense envoyer quelque chose mais qu'en réalité c'est différent.

En fait ça marche tellement bien qu'on me demande des améliorations wink La rançon de la gloire ? Non plutôt le Stakhanovisme de ma hiérarchie wink

Je pense que c'est la meilleure reconnaissance possible de ton travail. Bon, ok, une prime substantielle aurait été appréciée également, mais c'est déjà un pas dans la bonne direction wink

En fait, je dois implémenter plusieurs caméras (en fait les trois caméras qualifiées sur ce projet) Chaque centre ayyant choisis des cam différentes dans le parc des cams qualifiées bien sur)
Comme les protocoles sont assez copieux et que nous ne nous contenterons pas de ces trois modèles, j'ai pensé mettre les protocoles (et donc les commandes)  sur Eprom (Une Eprom par Cam). Il me suffirait de donner des adresses mémoire communes à chaque commande. Chaque Cam irait chercher sa commande dans l'Eprom qui lui est propre. Cette solution facilite également les MAJ puisqu'il suffirait d'envoyer une Eprom à jour.
J'ai trouvé la Lib EPROM.h. Elle semble simple à utiliser. Mais est elle réservée à l'Eprom de 1K interne aux carte Arduino ?
Et si oui, connaissez vous une solution pour gérer plusieurs Eproms ? Car j'ai trouvé pas mal de chose a propos des ces composants, pas mal de Shields Eprom à des prix raisonnables mais sans trop de documentation.

Il y a la solution des EEPROM I2C, dont le choix est assez conséquent et qui s'interfacent très simplement, et de la même manière quelle qu'en soit la capacité.

Dernière chose, Nous allons lancer plusieurs Télécommandes en fabrication (10 pour commencer). Mais on me demande si elle ne pourraient pas communiquer entre elle via du LAN et donc commander une Cam avec un télécommande distante.
Et là, je suis un peu sec. Je n'ai encore jamais utilisé de carte réseau avec Arduino. Donc pouvez vous me dire si il est possible (en choisissant le port com sur lequel on envois les commandes de les diriger soit vers le Com2 relié en UART TTL et donc la caméra locale, soit vers la carte réseau et communiquer avec une cam Distante.
La commande serait interprétée par une autre télécommande de même architecture.

Quand tu parles de "port com", c'est côté PC ou côté Arduino. Sinon, concernant les shields Ethernet, je n'ai aucune expérience sur le sujet (pas plus que je n'en ai sur l'Arduino d'ailleurs, car je n'en utilise pas). Mais il y a d'autres membres de POBOT qui ont fait des choses avec, et je pense qu'ils pourront te renseigner sans problème.

Cordialement

Eric

31

Re : Pilotage caméra

Eric, merci pour ces infos. Une fois de plus, cela fait plaisir de pouvoir trouver rapidement une réponse à mes problèmes.

Tu parles d'une "prime" wink je vois que tu connais mal le pouvoir de ma hiérarchie qui a plutôt tendance quand nous faisons une demande à nous expliquer comment faire pour nous en passer wink
Enfin j'ai un Job et je n'ai pas à me plaindre coté salaire à entendre le salaire moyen en France wink

Pour cette Eprom I2C tu à une Ref à me proposer ? car oui cela semble pas mal. En plus, l'I2C est vraiment un truc pas mal et simple à gérer.

Pour l'application réseau.
Je ne suis pas certain avoir très bien expliqué ce que je voulais faire. Si d'autres membres connaissent ce genre de carte, je suis preneur bien sur.

Sinon, pour mieux expliquer ce que je souhaites faire, voila un schéma qui montre un peux mieux le projet.

http://img215.imageshack.us/img215/6126/telecommandereseau2.jpg

Uploaded with ImageShack.us

Donc je souhaiterais
Soit piloter la caméra de gauche avec la télécommande de gauche en liaison série (ça ca marche déjà)
Soit piloter la caméra de droite par la télécommande de gauche via les cartes réseau
Soit piloter la caméra de gauche par la télécommande de droite via les cartes réseau

Bien sur, pour interconnecter les deux cartes réseau je les ai reliées à un switch, mais elle devront à terme passer par des routeurs. Chacune sera bien sur dans le même VLan ou aura les autorisations nécessaires. Si cela marche sur un Switch, je me chargerais de faire les config réseaux qui vont bien. Pour le moment le probleme est sur la liaison µC vers réseau.

Merci de votre aide
Cdlt
Yves

32

Re : Pilotage caméra

AstonDB8 a écrit:

Enfin j'ai un Job et je n'ai pas à me plaindre coté salaire à entendre le salaire moyen en France wink

Je suis entièrement de ton avis.

AstonDB8 a écrit:

Pour cette Eprom I2C tu à une Ref à me proposer ? car oui cela semble pas mal. En plus, l'I2C est vraiment un truc pas mal et simple à gérer.

Il y en a un tas. Par exemple la famille des AT24xxx d'Atmel (http://www.atmel.com/products/Memories/serial/i2c.aspx)

Sinon, pour mieux expliquer ce que je souhaites faire, voila un schéma qui montre un peux mieux le projet.

OK, je comprends mieux ton problème.

J'aurais tendance à dire que l'aiguillage peut se faire pas soft assez facilement. Il suffit d'écrire les fonctions de send et receive pour chaque cas (via l'API série et via l'API Ethernet) et d'appeler celle qui correspond à la localisation de la caméra (locale ou remote).

Pour le moment le probleme est sur la liaison µC vers réseau.

Si j'en juge par la description de la lib Ethernet pour Arduino (http://arduino.cc/en/Reference/Ethernet), ça m'a l'air aussi simple que pour une liaison série de base. Tu as des pbs avec la mise en oeuvre ?

En marge de cela, il faudra que chaque télécommande implémente un serveur TCP afin de recevoir les commandes émanant de télécommandes distantes et les traduisent en dialogue local sur la liaison série. Mais rien n'empêche de fonctionner de manière transparente, c'est à dire d'envoyer sur la liaison réseau les mêmes trames de commande que celle qui sont envoyés sur la liaison série pour le contrôle d'une caméra locale.

Eric

33 Dernière modification par AstonDB8 (07-04-2012 12:00)

Re : Pilotage caméra

Bonjour

Je ne dois pas avoir les yeux en face des trous ce matin car voila pres de 2h que je cherche 2 Lib sans réel succès...

Je cherche
matrix et Sprite

En fait, j'ai trouvé des liens sur des forums mais comme souvent sur certains forums, les explications sont confuses.
J'ai également trouvé des .h mais pas les .cpp

Je préfère donc vous le demander directement.

J'ai besoin des ces Libs pour gérer des LED montées en Matrice grâce à un MAX7219. Ce qui me permettra de gérer jusqu'à 64 LEDs sur un bus I2C. (En plus, j'ai les LEDs7219 et les petits composants annexes).

Juste une dernière question avant d'attendre vos liens wink
Je peux gérer comme je viens de le dire jusqu'à 64 LDEs (8X8). ce qui est énorme pour mon application. En fait, j'aurais besoin d'entre 25 et 30 Leds au maximum suivant les témoins de retours que je souhaiterais utiliser.
Le MAX7219 utilise très peux de composants annexes (1 résistance RL et une capa) La résistance est capable d'adapter le courant quelque soit le nombre de LED allumées en même temps.
Du coup, est il possible de ne pas utiliser la totalité de la matrice 8X8 mais juste une 5X5 ou 6X6 voir même une 5X6 qui serait idéale dans mon cas ?
Et éventuellement, est il possible de mélanger deux couleurs de LEDs (Selon leurs couleurs, les LED ont une intensité et un voltage différent. L'utilisation d'une seule Résistance d'adaptation rend donc de mariage délicat. Mais il y a sans doute une solution. Peut être trouver une valeur de RL moyenne et les LEDs d'une couleur seront légèrement survoltées (donc plus brillante) et celles de l'autre couleur sous-voltées (donc moins brillante). En choisissant les LEDs non pas en fonction de leur couleur, mais en fonction de leurs caractéristiques de courant ? Qu'en pensez vous ?

Au fait, je cherche aussi la Lib EthernetUdp pour communiquer avec une carte Ethernet Arduino. Le protocole UDP va me permettre d'envoyer des string depuis un port Com sur un Port Ethernet wink

Merci pour vos réponses.

Cdlt
Yves