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.
Veuillez indiquer [RESOLU] dans l'entête du titre en éditant votre premier message ;)

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 tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Go Up