deux arduino un écran

bonjour,
une colle que l'on m'a posée, a laquelle je ne trouve pas de réponse.
Y a t'il possibilité d'afficher alternativement deux arduino sur un seul écran.
Je pensai a couper la liaison Série de l'une pendant que l'autre affiche et inversement, je n'ai pas trouvé comment faire. peut-être le Serial.begin(); dans le loop() .

imaljl:
bonjour,
une colle que l'on m'a posée, a laquelle je ne trouve pas de réponse.
Y a t'il possibilité d'afficher alternativement deux arduino sur un seul écran.
Je pensai a couper la liaison Série de l'une pendant que l'autre affiche et inversement, je n'ai pas trouvé comment faire. peut-être le Serial.begin(); dans le loop() .

bonjour
quel type/modèle "d'ecran" exactement

j'ai fait les essai avec un Nextion NX8048K070 que j'ai en attente pour un futur projet.

J'ai trouvé une façon de faire en attribuant le tx , rx physiquement via un relais type opto LAA110, mais pas en code, j'ai testé avec Serial.end() sans succès.
Y a t'il moyen de couper séparément le: tx ou rx , avec Serial.begin() et Serial.end().
Ou de déclarer juste tx ou rx, dans SoftwareSerial ?

Je crois qu'il y a un film qui parle de ce sujet : "Deux Arduino, un écran, trois possibilités"... :slight_smile:

On serait tenté de dire non.

2 arduino, donc 2 processeurs complètement asynchrones comment vont être gérés les conflits?
Ne serait-il pas plus simple de déléguer l'affichage à l'un des deux?

dans l'absolu c'est possible de gérer correctement le Tx et Rx pour qu'ils arrivent au bon endroit (à condition d'avoir relié les GND).

En pratique cependant le Nextion bavarde sur le port série pour aussi dire ce qu'il se passe sur l'écran et donc difficile de gérer proprement l'interface.

questions:

  • avez vous vraiment besoin de 2 Arduinos?
  • si oui, l'un des deux pourrait gérer l'interface (appelons le "Master") et l'autre arduino ("slave") discuter avec le Master pour lui envoyer des informations à afficher. Il y a plusieurs façons de faire discuter entre eux le Master et le Slave (Série, I2C, SPI, ...)

un master, un slave ou plus ça marche sans problèmes, j’ai testé. :wink:
deux arduino l'une après lautre avec le tx,rx couper par un relais ça marche aussi.
pour relever le défis de mon ami, je cherche encore comment faire avec seulement du code. :wink:

imaljl:
un master, un slave ou plus ça marche sans problèmes, j’ai testé. :wink:
deux arduino l'une après lautre avec le tx,rx couper par un relais ça marche aussi.
pour relever le défis de mon ami, je cherche encore comment faire avec seulement du code. :wink:

bonjour
a tester
une porte OU à diode (ie 1N4148) sur les lignes TX et RX du nextion
theoriquement çà devrait fonctionner sans modif de code

Une solution purement software est difficilement envisageable

Les Tx des deux arduinos seraient connectés au Rx de l’écran et donc directement entre eux - si l’une est HIGH et l’autre LOW vous avez connecté sans ménagement une pin en OUTPUT à 5V directement au GND.

C’est un court circuit, Un courant trop important va passer dans les 2 pins et vous dépassez les 40mA acceptables en émission ou réception.

=> d’où la recommendation des diodes au moins sur le chemin des Tx

Je n'ai pas vraiment l'impression que les bibliothèques Wiring/Arduino gère un Serial.end().

Revenons à la base :
Supposons une carte Uno, nano, mini-pro.
Les pins D0 et D1 sont au démarrage du micro des pins numériques classiques (à condition que le bootloader ne perturbe rien).

Pour les faire passer en Rx et Tx il faut mettre en service un module du micro qui s'appelle l'UART (j'exclue la liaison série logicielle : je ne sais pas comment elle fonctionne).
Pour mettre l'UART en service, il faut configurer ses registres.
C'est ce que fait : Serial.begin(xxxx)
Pour libérer D0 et D1 il faut re-positionner les registres de l'UART dans leur état précédent : c'est ce que devrait faire Serial.end() mais le fait-il ?

Cela fait un peu usine à gaz, mais voilà comment je verrais les choses.

  1. Mettre sur les deux cartes les pins D0 et D1 en mode entrée (INPUT) pour qu'elles soient en haute impédance.
    C'est indispensable pour l'on puisse mettre en service n'importe laquelle des deux cartes sans faire de courts circuit.

  2. Pour activer une carte :
    a) envoyer un signal à l'autre carte pour indiquer que la liaison est prise.
    b) mettre l'UART en service.

  3. A la fin de la connexion
    a) désactiver le module UART et forcer D0 et D1 en mode entrée.
    b) indiquer à l'autre carte que la liaison est libérée.

AMHA ce devrait fonctionner, mais c'est vraiment lourdingue.
La solution relai ou circuit intégré multiplexeur sera plus "sécurisée" contre le risque de destruction des pins D0 et D1 mais il reste à ajouter une solution de "jeton" pour prendre ou libérer la ligne si on ne veut pas perdre des informations.
Sauf si une solution manuelle est possible dans ce cas point besoin de relai, un simple double inverseur devrait faire l'affaire.

Bonjour

Sauf si une solution manuelle est possible dans ce cas point besoin de relai, un simple double inverseur devrait faire l'affaire.

Pourquoi ne pas commencer par tester en premier cette commutation manuelle (inverseur double)
ça permettrait dejà de voir comment l'écran réagit à ce genre de permutation.
Ensuite passer à une autre type de commutation si c'est OK en manuel

68tjs:
Pour libérer D0 et D1 il faut re-positionner les registres de l'UART dans leur état précédent : c'est ce que devrait faire Serial.end() mais le fait-il ?

il suffit de regarder dans le code, il y a bien modification du registre Uart Control and Status Register (ucsr)

  cbi(*_ucsrb, RXEN0);
  cbi(*_ucsrb, TXEN0);
  cbi(*_ucsrb, RXCIE0);
  cbi(*_ucsrb, UDRIE0);

mais je ne crois pas que ça repasse Tx en INPUT

j'ai trouvé une solution "code".
on va dire deux arduino: la 1er "A" la 2em "B" et un écran (Nextion) avec deux pages. un bouton "a" sur la page A' pour appeler la page B' et inversement.
arduino A
SoftwareSerial pour la com bouton en rx; et Serial pour l'envoie de l'affichage tx.
idem pour l'arduino B

si bouton "a" page A' (commande du bouton de l'écran) réception de la commande via: SoftwareSerial, ouverture de Serial() , envoie des données affichage page A, et fermeture, Serial.end()

avec ouverture et fermeture pour les données affichage sur SotwareSerial ça ne marche pas.

Comme dit précédemment, vous avez les 2 Tx (pin 1) de vos Arduino qui sont donc reliées et vous créez de potentiels micro courts circuits lors de l'émission

il se peut que vous ne le voyez pas et que le hardware résiste - pendant un certain temps...

avant d'émettre sur un des Tx il faudrait s'assurer que l'autre Tx soit passé en INPUT.

ok je comprend

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.