Go Down

Topic: Utilisation de Rx et Tx comme sortie (Read 81 times) previous topic - next topic

gaelperr

Bonjour,

J'ai remarqué que les pins 0 et 1, soit RX et TX restent toujours à 1 même quand je les définis en tant que sortie et que je les forces à 0.
Voici un code tout simple que j'ai essayé :

void setup() {
DDRD = B00000000;

}

void loop() {
PORTD = B11111111;
delay(500);
PORTD = B00000000;
delay(500);                                                                       
}

Toutes les sorties du Port D (pin 0 - 7) obtiennent un signal carré, sauf les pin 0 et 1 qui elles restent toujours à 1. Faut-il rajouter quelque chose afin de les utilisées normalement ?

_pepe_

#1
Feb 13, 2018, 08:26 am Last Edit: Feb 13, 2018, 08:31 am by _pepe_
Bonjour

La commande DDRD = B00000000 configure toutes les broches du port D en entrée, à la suite de quoi les écritures de PORTD activent ou désactivent les résistances de rappel internes.

Les broches RX et TX étant reliées à l'interface USB (via des résistances de limitation), il n'est pas surprenant que les niveaux logiques lus restent à 1 quand ceux lus sur les autres entrées du port changent dans les mêmes conditions externes.

Il faudrait donc configurer les broches en sortie en mettent les bits de DDRD à 1.

(NB: dans les messages, penser à mettre les citations de code entre balises CODE, à l'aide du bouton </> )

gaelperr

Merci de ta réponse. J'ai fais une erreur en mettant en entrée au lieu de mettre en sortie.

J'ai modifié le DDRD = B11111111;

Mais bizarrement toujours le même problème...  :smiley-confuse:

gaelperr

Par contre lorsque je fais un programme contrôlant uniquement la pin 0 ou la pin 1, ça fonctionne très bien

_pepe_

Ça devrait pourtant marcher.

Si tu utilises une carte Arduino officielle (avec un bootloader qui libère l'interface USART à la fin de la phase d'initialisation), si le programme ne réalise que les opérations décrites (correction comprise) et si tu n'as pas fait d'erreur de câblage, alors il faut envisager que le micro-contrôleur ait pu être endommagé.

Code: [Select]
void setup() {
  DDRD = B11111111;
}

void loop() {
  PORTD = B11111111;
  delay(500);
  PORTD = B00000000;
  delay(500);
}

Go Up