Page 1 sur 1

Transmettre automatiquement une chaine de caractères

Message non luPosté: Lun 7 Avr 2014 14:33
de pascal74
Bonjour,

Avant de décrire mon problème, voici le code (très simpliste) utilisé :

Code: Tout sélectionner
// Arduino is powered by the engine. When the engine is started, the status of the motor (sentence NMEA0183)
// is transmitted in a frame
void setup() {               
  Serial.begin(9600); // initializes the speed of the serial port commnication
}

// the loop routine runs over and over again forever:
void loop(){
Serial.println("$ERRPM,E,1,1,0,A*40"); // Sending Engine is ON
delay(1000); // wait for a second
}



Voici ce qu'est sensé faire le programme
Lorsque la carte Arduino est alimentée (sous tension) la chaine "$ERRPM,E,1,1,0,A*40" doit être automatiquement transmise toutes les secondes sur le port serie (TX).

Mon problème est le suivant :
Lorsque je test mon projet, la carte Arduino est raccordée à mon PC à l'aide du cordon USB (qui sert aussi d'alimentation). Dans ce cas là et uniquement dans ce cas, le programme fonctionne correctement le moniteur de l'ide Arduino montre bien la transmission de la chaine sur le port série (la led TX clignote chaque seconde).
Par contre, lorsque je test mon projet en alimentant la carte Arduino à l'aide d'une pile 9V sur le Vin (le cable USB n'est pas utilisé) rien ne sort sur le port série (la LED TX ne clignote pas !).

But du projet :
Raccorder la carte arduino à un multiplexeur qui va relayer une information. A titre d'information lorsque j'utilise hyperterminal pour lire ce qui arrive sur le multiplexeur rien n'apparait. Ce qui me confirme qu'en mode autonome (sans cordon usb) rien n'est transmit :(

Je ne vois pas où est mon erreur ou comment corriger pour que cela fonctionne correctement !
Merci par avance pour votre aide

Re: Transmettre automatiquement une chaine de caractères

Message non luPosté: Lun 7 Avr 2014 16:21
de phil
Avec une pile, c'est normal car la liaison série n'est pas "montée"

A titre d'information lorsque j'utilise hyperterminal pour lire ce qui arrive sur le multiplexeur rien n'apparait. Ce qui me confirme qu'en mode autonome (sans cordon usb) rien n'est transmit

Que veut tu dire par multiplexeur. Est ce que tu as un modèle, un schéma de câblage.
Si ton multiplexeur fait du RS232 par exemple, il faut savoir que les pin 0,1 (TX/RX) de l'atmega ne font pas de série au niveau RS232 mais en TTL, il y a donc de l'adaptation à faire avec un MAX232 par exemple

Re: Transmettre automatiquement une chaine de caractères

Message non luPosté: Lun 7 Avr 2014 16:41
de pascal74
c'est normal car la liaison série n'est pas "montée"

Y a t il une syntaxe et une instruction pour le faire de manière logiciel ?

Voici l'info que j'ai concernant le multiplexer :
Inputs: 4 x NMEA 0183/RS-422, galvanically isolated
Input resistance: > 800 Ohm

Voici à quoi ressemble le multiplexeur : Image

Et voici un schema de mon montage
Image

je n'ai en réalité pas besoin de connectique RS232 je veux juste envoyer sur le canal de sortie TX une chaine NMEA083 (déja toute prête) afin que le multiplexeur puisse la réceptionner.

Re: Transmettre automatiquement une chaine de caractères

Message non luPosté: Mar 8 Avr 2014 10:40
de phil
pascal74 a écrit:je n'ai en réalité pas besoin de connectique RS232 je veux juste envoyer sur le canal de sortie TX une chaine NMEA083 (déja toute prête) afin que le multiplexeur puisse la réceptionner.


RS232 ce n'est pas que de la connectique, c'est des niveaux de signal, un protocole...
Quoi qu'il en soit, l'Arduino et plus particulièrement l'ATMEGA328 fonctionne en niveau TTL. Il faut donc trouver une solution pour convertir le TTL en RS422 par rapport au protocole et par rapport au niveau de signal.
J'ai cherché rapidement, ça a pas l'air trivial...

Re: Transmettre automatiquement une chaine de caractères

Message non luPosté: Mar 8 Avr 2014 10:53
de pascal74
Je pense qu'un ajouter un shield convertisseur TTL - RS232 par lequel je ferais passer la trame NMEA

Re: Transmettre automatiquement une chaine de caractères

Message non luPosté: Mar 15 Avr 2014 13:34
de pascal74
Voilà J'ai fait l'acquisition d'un shield convertisseur TTL <> RS232. J'ai procédé au montage mais cela ne résoud pas le problème initial.

Image
(Faire un clic droit et ouvrir la photo dans un autre onglet pour voir le convertisseur TTL <> RS232)
RS232 parce que le protocole utilisé répond à ce protocole de communication.

Je résume :
A la mise sous tension de la carte Arduino Uno R3, toute les secondes, la carte doit envoyer une trame nmea0183 sur le canal de sortie (TX) de la carte.
Le port USB n'étant pas monté (lorsque mon boitier est en place rien n'est connecté sur le port usb de la carte, Le boitier est uniquement relié (RX,TX,Gnd) au multiplexeur sur les prises NMEA+ 3a et NMEA- 3b)
la trame n'est jamais transmise ! Le TX de la carte Arduino reste éteint (la led n'est pas HS). :cry:

Pour éclairer ma lanterne de néophyte, qui peut me dire quelle est la condition à respecter pour que cette LED TX s'allume ?! :?

Re: Transmettre automatiquement une chaine de caractères

Message non luPosté: Ven 18 Avr 2014 20:38
de pascal74
Je viens de refaire un test en alimentant la carte uniquement avec la prise DCin.

Là encore et malgrés le convertisseur ttl <> rs232 la sortie TX reste malheureusement muette :cry:

Personne ne peu doc me dire comment transmettre une donnée sans que l'usb soit necessairement utilisee :?:

Merci

Re: Transmettre automatiquement une chaine de caractères

Message non luPosté: Lun 19 Mai 2014 10:31
de tomsoft
Pourquoi n'utilise pas SoftwareSerial ?

http://arduino.cc/en/Reference/SoftwareSerial

tu peut configurer tout autre port en entrée/sortie et utiliser SoftwareSerial.write

exemple:

SoftwareSerial ss(8,9); // Rx=8, TX=9

dans ton init:

ss.begin(9600);

dans ta loop

ss.writeln("hello world");

Re: Transmettre automatiquement une chaine de caractères

Message non luPosté: Lun 19 Mai 2014 10:37
de pascal74
Je ne connaissais ps :oops:

Merci pour cette info et aide que je vais tester au plus vite