Interface série qui ne fonctionne pas

Salut,
je maîtrise les PIC, mais je débute sur les Arduino.
Je travaille actuellement sur un programme MIDI qui normalement fonctionne sur un Uno.
Le téléversement fonctionne, le programme aussi.
Dès que je branche l'Arduino sur une alimentation externe le programme ne fonctionne plus.
Donc, j'ai simplifié le programme pour en identifier l'origine.
J'arrive à ces trois lignes de code qui fonctionnent après téléversement, mais pas en autonomie :

void setup() {
  Serial.begin(9600);
}

void loop() {
  Serial.write(0xAA);
  delay(1000);

}

Ce n'est pas un problème d’alimentation.
Je n'ai pas compris un quelque chose, mais je ne sais pas quoi ...
Merci pour votre aide.

Salut

Un schéma ?

Avec ces trois lignes de code, il n'y a pas de schéma. La carte Uno est seule.
Après téléversement, la diode TX s'allume chaque seconde.
Si je branche la carte sur une alimentation externe, la LED TX ne s'allume plus.
J'ai vérifié à l'oscillo, aucun signal sur la broche TX.

Je viens de faire l'essai sur une carte Uno d'une autre provenance, même symptôme.
Sur une Nano, idem.
Je doit merder quelque part, mais où ...

il n'y a pas de schéma

Où est branchée l'alimentation ?
Broche 5V ou VIN ?
Quelle tension ?

Bonjour

Doumai:
J'arrive à ces trois lignes de code qui fonctionnent après téléversement, mais pas en autonomie :

void setup() {

Serial.begin(9600);
}

void loop() {
 Serial.write(0xAA);
 delay(1000);

}




Ce n'est pas un problème d’alimentation.

"Ce n'est pas un problème d’alimentation."
Qu'est ce qui vous permet de l'affirmer?
Quel Arduino?
Quelle alimentation?
Connectée où?
La liaison série connectée entre quoi et quoi?

Cordialement,
bidouilleelec

"Ce n'est pas un problème d'alimentation."
Qu'est ce qui vous permet de l'affirmer?

J'ai fait le test avec une alimentation de labo, tension mesurée 5.01 V,
avec une alimentation 240/5V pour téléphone, tension mesurée 5.1 V,
avec une alimentation 12V branchée sur le jack.

En désespoir de cause, j'ai étripé un câble USB pour n'avoir que l'alimentation 5V sans les données.
Après téléversement, la LED TX clignote.
Je débranche le cordon USB du PC et le remplace par le cordon USB sans les données.
La LED TX ne clignote pas.

Quel Arduino ?
Comme mentionné plus haut, deux Uno R3 de deux provenances différentes et un Nano.

Connectée où :
déjà répondu au-dessus.
Pour le 5V j'ai essayé l'USB, le +5V et le Vin sur l'UNO.

La liaison série connectée entre quoi et quoi :
Comme mentionné plus haut, la carte est nue et j’émets un octet. La sortie TX est en l'air ou reliée à l'oscillo numérique.

Je pense que je fais une fausse manip, mais je ne sais pas laquelle.
Mon site :
http://doumai.pagesperso-orange.fr/

Bonjour,

Tu es sur que le programme que tu as donné est bien celui qui tourne?
Il n'y aurait pas un while (!Serial); ? C'est exactement le même symptôme.

kamill:
Il n'y aurait pas un while (!Serial); ? C'est exactement le même symptôme.

C'est valable pour les Arduino dont les processeurs ont l'USB incorporé (Leonardo, Yun...) autrement c'est inutile.

J'ai fait l'essai, alimenté par l'USB du PC ou un chargeur USB, sur lr plug USB du UNO, ou avec 9V. sur le jack (Vin), le tout sans problème. Je soupçonne une deffectuosité de ta carte.

Cordialement
jpbbricole

jpbbricole:
C'est valable pour les Arduino dont les processeurs ont l'USB incorporé (Leonardo, Yun...) autrement c'est inutile.

Oui - ça ne mange pas de pain cependant car Serial étant défini quand vous compilez pour un UNO l’optimiseur va virer le while et ça fait un code adaptable à d’autres cartes

Sinon C’est quand même louche que le problème soit sur trois cartes... Le code est OK donc c’est sans doute l’opérateur... mais Vous avez l’air quand même de savoir ce que vous faites :slight_smile:

Vin c'est entre 7 et 12V

Doumai:
Connectée où :
déjà répondu au-dessus.
Pour le 5V j'ai essayé l'USB, le +5V et le Vin sur l'UNO.

Remarque:
5V sur Vin, cela ne peut pas fonctionner.

Cordialement,
bidouilleelec

Petit article: Comment alimenter l’Arduino sans ordinateur ?

Doumai:
En désespoir de cause, j'ai étripé un câble USB pour n'avoir que l'alimentation 5V sans les données.
Après téléversement, la LED TX clignote.
Je débranche le cordon USB du PC et le remplace par le cordon USB sans les données.
La LED TX ne clignote pas.

Avec le code que tu as donné il n'y a aucune raison de voir une quelconque LED clignoter.

J-M-L:
Oui - ça ne mange pas de pain cependant car Serial étant défini quand vous compilez pour un UNO l’optimiseur va virer le while et ça fait un code adaptable à d’autres cartes

Je voulais dire par là que ce n'était pas la cause du problème comme suggéré par @kamill

J-M-L:
Petit article: Comment alimenter l’Arduino sans ordinateur ?

Un EXCELLENT site consacré à l'Arduino!

fdufnews:
Avec le code que tu as donné il n'y a aucune raison de voir une quelconque LED clignoter.

Oui la led TX.

Cordialement
jpbbricole

Bonjour

Doumai:
La liaison série connectée entre quoi et quoi :
Comme mentionné plus haut, la carte est nue et j’émets un octet. La sortie TX est en l'air ou reliée à l'oscillo numérique.

"Avec le code que tu as donné il n'y a aucune raison de voir une quelconque LED clignoter."

Ah! Effectif :
J'ai fait un essai en connectant le TX d'un UNO alimenté par le jack au RX d'un second UNO (connecté à l'IDE , donc alimenté par USB):
l'échange est OK et la diode TX du UNO 1 ne clignote pas , ni la RX du UNO
.
Il semblerait que les diodes TX et RX ne clignotent que pour les échanges USB.
Merci fdufnews.

Cordialement,
bidouilleelec

bidouilleelec:
J'ai fait un essai en connectant le TX d'un UNO alimenté par le jack au RX d'un second UNO :
l'échange est OK et la diode TX du UNO 1 ne clignote pas , ni la RX du UNO

wow magique !

(mais à regarder le code du firmware du atmega16u2 et le schéma de câblage d'un UNO R3 (la LED avec une résistance de limitation de courant est connectée entre 5V et PD5) , c'est quand même louche... )

Merci à tous, surtout à jpbbricole d'avoir testé les 3 lignes de code.
La seule donnée commune à tous ces essais est mon PC et le code étant certain de fonctionner, je suis passé sur mon vieux PC qui tourne sous Seven et qui est dédié à ma CNC. J'ai installé tout ce qui concerne l'Arduino, j'ai pris une nouvelle carte Uno R3 et je l'ai programmée. Elle fonctionne du premier coup !!!

La LED TX clignote encore après avoir téléverser le code, mais elle ne clignote plus si je passe l'Arduino sur une alimentation dédiée, ce qui est normal car elle est alimentée moins d'1ms toutes les secondes. Il me reste à tester les trois autres cartes. Et je reste frustré car si j'arrive à tout comprendre avec les PIC, j'ai quelque chose qui fonctionne avec l'Arduino, mais je ne comprends pas tout.

:confused:

Je viens de faire l'essai avec une mega2560.
Elle se comporte de la même manière.

  • Connectée à l'IDE la LED TX fonctionne.
  • Connectée à une alimentation externe ou simplement en connectant la carte mais l'IDE fermé la LED ne clignote pas. J'ai branché un oscillo. Il y a bien du traffic sur TX. En restant dans cette configuration, si je lance minicom (je suis sous Linux) la LED se met à clignoter.

Il semblerait que l'atmega 16u2 qui gère la liaison série fasse le mort lorsqu'il n'y a pas de liaison USB active.

Bonsoir

J-M-L:
wow magique !

(mais à regarder le code du firmware du atmega16u2.....

On le trouve où ce code , s.v.p.?
Vous avez dit louche? Je dirais même plus , bizarre.

Cordialement,
bidouilleelec

bidouilleelec:
Bonsoir

On le trouve où ce code , s.v.p.?
Vous avez dit louche? Je dirais même plus , bizarre.

Cordialement,
bidouilleelec

je pense qu'il est là

led TX sur PD5 dans le pinout

ce que l'on retrouve dans le code:

/** LED mask for the first LED on the board. */
 #define LEDS_LED1        (1 << 5)
/* Macros: */
 /** LED mask for the library LED driver, to indicate TX activity. */
 #define LEDMASK_TX               LEDS_LED1
static inline void LEDs_TurnOnLEDs(const uint8_t LEDMask)
{
   PORTD &= ~LEDMask;
}

Et dans le code y'a rien qui dit de ne pas allumer la LED si un truc particulier n'est pas là...

/** Pulse generation counters to keep track of the number of milliseconds remaining for each pulse type */
#define TX_RX_LED_PULSE_MS 100
volatile u8 TxLEDPulse; /**< Milliseconds remaining for data Tx LED pulse */
/* Check if the UART receive buffer flush timer has expired or the buffer is nearly full */
 RingBuff_Count_t BufferCount = RingBuffer_GetCount(&USARTtoUSB_Buffer);
 if ((TIFR0 & (1 << TOV0)) || (BufferCount > BUFFER_NEARLY_FULL))
 {
 TIFR0 |= (1 << TOV0);

 if (USARTtoUSB_Buffer.Count) {
 LEDs_TurnOnLEDs(LEDMASK_TX);
 PulseMSRemaining.TxLEDPulse = TX_RX_LED_PULSE_MS;
 }

 /* Read bytes from the USART receive buffer into the USB IN endpoint */
 while (BufferCount--)
  CDC_Device_SendByte(&VirtualSerial_CDC_Interface, RingBuffer_Remove(&USARTtoUSB_Buffer));
  
 /* Turn off TX LED(s) once the TX pulse period has elapsed */
 if (PulseMSRemaining.TxLEDPulse && !(--PulseMSRemaining.TxLEDPulse))
  LEDs_TurnOffLEDs(LEDMASK_TX);

 /* Turn off RX LED(s) once the RX pulse period has elapsed */
 if (PulseMSRemaining.RxLEDPulse && !(--PulseMSRemaining.RxLEDPulse))
  LEDs_TurnOffLEDs(LEDMASK_RX);
 }

Il semblerait que l'atmega 16u2 qui gère la liaison série fasse le mort lorsqu'il n'y a pas de liaison USB active.

Également sur une NANO, y compris avec CH340, le convertisseur USB est désactivé si l'USB n'est pas branché.
Les LEDs ne sont pas un indicateur de fonctionnement de l'UART.