Go Down

Topic: La pin RX bloque l'execution du Sketch (Read 1 time) previous topic - next topic

arduimat

Jan 23, 2012, 09:23 am Last Edit: Jan 23, 2012, 09:26 am by arduimat Reason: 1
Bonjour à tous et bon lundi :)

J'ai reçu samedi mon module GPS, après quelques heures de galères, ça fonctionne et j'arrive à récupérer les trames GPS et les exploiter (récupérer lat. et long., altitude...), et je suis content :)

Mon GPS est branché à l'arduino comme ça :

- Vcc sur +5
- GND sur GND
- TX du GPS sur RX de l'Arduino (Pin 0)


Mais il y a un hic que je n'arrive à expliquer et dont je n'ai pas trouvé la solution sur les autres forums...

Si je laisse brancher Rx de l'Arduino sur TX du GPS,
L'upload sur l'arduino depuis l'ide ne veut pas se faire, une erreur apparaît. Si alors je débranche la pin 0 donc, et que je relance l'upload du sketch, alors ça fonctionne. Une fois en marche je rebranche à nouveau ma pin 0 et là ça fonctionne.

Quote
avrdude: stk500_getsync(): not in sync: resp=0x30
avrdude: stk500_disable(): protocol error, expect=0x14, resp=0x51


Le cas s'applique aussi si j'alimente mon montage avec une source extérieure, je suis obligé de d'abord débrancher la pin 0 (rx), d'alimenter le montage et ensuite de rebrancher la pin 0 et là ça fonctionne.

Si je mets sous tension le tout monté et prêt, alors rien ne se passe... j'ai l'impression que le code ne se lance pas.

Donc pour résumer, si quelque chose est branché sur la pin digital 0, impossible de faire un upload du code et problème similaire lors du branchement au secteur, USB ou pile 9V, le code ne s'exécute pas si cette prise est branchée...

J'espère avoir été clair, c'est pas évident.

Merci pour votre aide :)

zoroastre

#1
Jan 23, 2012, 09:34 am Last Edit: Jan 23, 2012, 09:38 am by zoroastre Reason: 1
Yep!

La réponse est toute simple. Le port usb partage ses connections avec Rx0 et Tx0. Ton programme ne veut pas s'uploader car la liaison série est perturbée par le module GPS.

Si tu possèdes une mega, la solution consisterait à utiliser rx1/tx1 ou 2 ou 3.
Dans le cas d'un duemilanove, la librairie softwareSerial pourrait palier ton problème en utilisant d'autres port.
Un interrupteur/brochage pour couper la liaison entre l'arduino et le GPS, solution peu pratique.

http://arduino.cc/en/Main/arduinoBoardDuemilanove
Quote
Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data. These pins are connected to the corresponding pins of the FTDI USB-to-TTL Serial chip.

Toutes les arduino sont faites ainsi  8)

SoftwareSerial ici : http://arduino.cc/hu/Reference/SoftwareSerial

@+

Zoroastre.
Gné! ;)

arduimat

Merci pour ta réponse, c'est bien ce qui me semblait.

Alors en fait, on ne peut jamais utiliser la pin D1 et D0 ?

Seulement je n'arrive plus à faire fonctionner le GPS en utilisant la librairie NewSoftSerial, le GPS ne veut pas communiquer avec, je retenterai à nouveau mais j'avais pas réussi. J'avais essayé le coupe TinyGPS et NewSoftSerial et pas moyen de recevoir le moindre du signal du GPS. Tandis qu'en le connectant à la Pin 0 ça fonctione (sans TinyGPS et NSS)...

J'ai pensé à l'interrupteur oui, mais c'est vrai que si je peux éviter, le but étant que je branche mon montage sur l'USB de la voiture et qu'il n'y ai aucune manipulation à faire...

Je retenterai à nouveau et je vous tiendrai au courant.

Bubule

Bonjour

Après avoir déclaré ta librairie SoftSerial, et écris le sketch dans le loop, as tu bien configuré tes PIN dans le setup (in et out)?

Je m'étais fait avoir...

Franck

skywodd

Bonjour,


Alors en fait, on ne peut jamais utiliser la pin D1 et D0 ?

Il n'est pas interdit d'utiliser D0/D1, mais c'est fortement déconseillé, en règle général il ne faut jamais utiliser D0/D1, sinon c'est courir après les ennuis.


J'ai pensé à l'interrupteur oui, mais c'est vrai que si je peux éviter, le but étant que je branche mon montage sur l'USB de la voiture et qu'il n'y ai aucune manipulation à faire...

Si tu ne veut absolument pas d'interrupteur tu peut utiliser un transistor BC547 + 2 résistances, afin de bloquer le signal du gps tant que tu n'as pas envoyer un HIGH dans la base du transistor.
GND -> résistance 10K -> base transistor
Dx  ->  résistance 1K -> base transistor
                   Tx gps -> collecteur transistor
             Rx arduino -> émetteur transistor

Comme ça de base le transistor est bloqué et le signal Tx du gps sera aussi bloqué, des que ton sketch démarre il passe Dx à HIGH ce qui fait conduire le transistor et laisse le signal du gps aller dans Rx de l'arduino.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

arduimat

#5
Jan 23, 2012, 01:32 pm Last Edit: Jan 23, 2012, 04:52 pm by arduimat Reason: 1

Bonjour,


Alors en fait, on ne peut jamais utiliser la pin D1 et D0 ?

Il n'est pas interdit d'utiliser D0/D1, mais c'est fortement déconseillé, en règle général il ne faut jamais utiliser D0/D1, sinon c'est courir après les ennuis.


J'ai pensé à l'interrupteur oui, mais c'est vrai que si je peux éviter, le but étant que je branche mon montage sur l'USB de la voiture et qu'il n'y ai aucune manipulation à faire...

Si tu ne veut absolument pas d'interrupteur tu peut utiliser un transistor BC547 + 2 résistances, afin de bloquer le signal du gps tant que tu n'as pas envoyer un HIGH dans la base du transistor.
GND -> résistance 10K -> base transistor
Dx  ->  résistance 1K -> base transistor
                  Tx gps -> collecteur transistor
            Rx arduino -> émetteur transistor

Comme ça de base le transistor est bloqué et le signal Tx du gps sera aussi bloqué, des que ton sketch démarre il passe Dx à HIGH ce qui fait conduire le transistor et laisse le signal du gps aller dans Rx de l'arduino.


D'accord pour les pins 0 et 1.

En fait, une sorte d'interrupteur à retardement, mais j'aimerai faire fonctionner tout ça en en évitant les solutions de fortune, sinon mon projet risque d'être difficile à faire progresser.

Je retenterai l'histoire de SoftwareSerial avec d'autres pins (si il m'en reste de dispo).


Bonjour

Après avoir déclaré ta librairie SoftSerial, et écris le sketch dans le loop, as tu bien configuré tes PIN dans le setup (in et out)?

Je m'étais fait avoir...

Franck


Bubule, j'ai plus mon code sous les yeux, mais c'est pas impossible que ce soit qqchose du genre, à voir donc.

Mais laquelle est IN et laquelle est OUT de Rx et Tx ?

La déclaration NewSoftSerial nss(2,3); ne prendrai pas en compte le In et Out de ces pins donc ?

Merci

Bubule

Jettes un petit coup d'œil là : http://arduino.cc/en/Reference/SoftwareSerialBegin

fdufnews

#7
Jan 23, 2012, 04:25 pm Last Edit: Jan 23, 2012, 04:28 pm by fdufnews Reason: 1
Quote


Bonjour

Après avoir déclaré ta librairie SoftSerial, et écris le sketch dans le loop, as tu bien configuré tes PIN dans le setup (in et out)?

Je m'étais fait avoir...

Franck


Bubule, j'ai plus mon code sous les yeux, mais c'est pas impossible que ce soit qqchose du genre, à voir donc.

Mais laquelle est IN et laquelle est OUT de Rx et Tx ?

La déclaration NewSoftSerial nss(2,3); ne prendrai pas en compte le In et Out de ces pins donc ?

Merci


Avec NewSoftSerial le constructeur s'en charge. Donc lors de la déclaration de l'objet les broches sont automatiquement définies en entrée et en sortie. Tu n'as pas besoin de le faire.

Dans ton exemple:
Code: [Select]
NewSoftSerial nss(2,3);
la broche 2 c'est RX donc elle est en entrée
la broche 3 c'est TX donc elle est en sortie

68tjs

Quote
mais j'aimerai faire fonctionner tout ça en en évitant les solutions de fortune

Je pense que ce que te propose Skywood est aux antipodes d'une solution de fortune.
- Il y a eu analyse du problème.
- Il y a eu conception et proposition d'une vraie solution sûre parce que expliquée, ce n'est pas une solution ou un code qui tombe en marche ...........................


arduimat


Avec NewSoftSerial le constructeur s'en charge. Donc lors de la déclaration de l'objet les broches sont automatiquement définies en entrée et en sortie. Tu n'as pas besoin de le faire.

Dans ton exemple:
Code: [Select]
NewSoftSerial nss(2,3);
la broche 2 c'est RX donc elle est en entrée
la broche 3 c'est TX donc elle est en sortie


Mmmh, du coup c'est mal barré (t'as tué mon espoir), car ça ne fonctionne pas, et pourtant j'ai essayé de bien différentes manières! :) Mais je retenterai à nouveau ce soir.


Quote
mais j'aimerai faire fonctionner tout ça en en évitant les solutions de fortune

Je pense que ce que te propose Skywood est aux antipodes d'une solution de fortune.
- Il y a eu analyse du problème.
- Il y a eu conception et proposition d'une vraie solution sûre parce que expliquée, ce n'est pas une solution ou un code qui tombe en marche ...........................


Pas de malentendu, je ne doute pas une seule seconde que la solution soit bonne, j'en suis sûr et d'ailleurs j'y avais songé (à l'interrupteur). Seulement j'aimerai faire au plus simple pour le moment. Si rajouter 50 lignes de codes me permettent de passer outre l'installation d'un transistor, je suis preneur. Sinon mon projet risque de se compliquer et je vais monter une usine à gaz que je ne serai maîtriser.

Apparemment il est réellement possible d'affecter Rx et Tx à d'autres PIN que la 1 et la 0, certains l'on fait, pourquoi pas moi ? :)

Je prends compte de toutes vos remarques, et je vous tiens au courant de l'évolution.

JMe87

Bonjour a tous
c'est absolument inutile d'esperer sortir le RX et TX hardware sur d'autres pins que D0 et D1. C'est une fonctionalite de l'Atmega328, impossible de le modifier, il est fabrique ainsi.
Si tu n'arrives pas a utiliser le port serie software, je te conseille de te diriger vers une carte compatible arduino avec le convertisseur USB > serial situe en dehors de la carte. On en parle ici :
http://arduino.cc/forum/index.php/topic,66178.msg543378.html#msg543378
C'est la solution que j'utilise pour les cartes que je fabrique et qui sont des copies de ceci :
http://www.freetronics.com/products/kitten.
Bon courage
Jacques.

schizophrene

Salut,

Je peux savoir quel type de module GPS utilises-tu (shield ou standalone)? Dans tous les cas:
- tu souhaites certes éviter l'emploi d'un interrupteur, mais pourquoi ne pas en placer un sur l'alimentation du module GPS? C'est simple, pas cher...

Sinon, si ton module consomme moins de 40mA, tu peux toujours mettre l'alimentation sur une broche que tu ne bascules qu'au bout de 10 secondes par exemple (laissant largement le temps d'uploader ton sketch à la mise sous tension).
S'il consomme plus de 40mA, tu peux partir sur la même base, en passant par un transistor pour laisser passer le courant nécessaire.

arduimat


Bonjour

Après avoir déclaré ta librairie SoftSerial, et écris le sketch dans le loop, as tu bien configuré tes PIN dans le setup (in et out)?

Je m'étais fait avoir...

Franck


Bubule Win !  :smiley-mr-green:

Ceci est le graal :

Quote
// include the SoftwareSerial library so you can use its functions:
#include <SoftwareSerial.h>

#define rxPin 2
#define txPin 3

// set up a new serial port
SoftwareSerial mySerial =  SoftwareSerial(rxPin, txPin);

void setup()  {
   // define pin modes for tx, rx:
   pinMode(rxPin, INPUT);
   pinMode(txPin, OUTPUT);
   // set the data rate for the SoftwareSerial port
   mySerial.begin(9600);
   Serial.begin(9600);
}

void loop() {
   char c = mySerial.read();
   Serial.print(c);

}


Bon par contre ça capte plus, je reçois que des trames V, qui sont vides. Surement parceque je suis à l'intérieur (pourtant hier aprem ça marchait dedans).

fdufnews : A croire que c'est la nouvelle version de SoftwareSerial() qui est foireuse (NewSoftSerial()).

schizophrene : J'utilise un Skylab SKM53 suite aux conseils de Jean-François, ce n'est pas un shield non.

zoroastre

#13
Jan 23, 2012, 07:06 pm Last Edit: Jan 23, 2012, 07:09 pm by zoroastre Reason: 1
Yep!

Au fait, je ne sais pas si la question a été posé : Quelle version de l'IDE Arduino ?

La version 1.0 inclus la librairie softwareSerial.

@+

Zoroastre.
Gné! ;)

arsenic

#14
Jan 23, 2012, 11:18 pm Last Edit: Jan 24, 2012, 09:36 pm by arsenic Reason: 1
Pour ton pb de réception, pour un meme positionnement du récepteur, il se peut qu' hier tu etait en limite de reception, et qu'aujourd'hui, ça ne passe plus pour plusieurs raison :
- temps fortement nuageux
- neige,
- forte pluie
- différence dans l'alignement des satellites
- plein d autre phénomènes physiques que je ne maitrisent pas ...  :smiley-slim:

Essaies de le rapprocher d'une fenêtre ....  :D


Go Up