Commande afficheur 4D Systems

Bonjour à tous,
Malgré de nombreuses recherches et différents tests, je n'arrive toujours pas à envoyer ne serait-ce qu'un ordre simple à mon afficheur 4D Systems (afficheur fonctionnant en liaison série).

Pour parenthèse, j'ai fais tourner des lignes de commande avec des valeurs plus ou moins aléatoire, et des choses sont apparus à l'écran (rien de cohérent ni lié à ce que pensais envoyer), ce qui me fait penser que le montage n'est pas en cause mais la manière dont j'envoie les données.

Pour le premier exemple, il s'agit d'envoyer la commande 45 en héxa : qui correspond à l'effacement de l'écran, j'ai donc essayé ceci :

void setup() {
  Serial.begin(19200);
  Serial2.begin(19200); // afficheur relié à la liaison série n°2
}

void loop() {
  Serial2.print(0x45);
  Serial.println(0x45); // je duplique l'information envoyée vers le pc
  delay(2000); // je laisse un peu de repos à l'écran, ce n'est pas la manière la plus élégante...
}

Pour la commande de l'écran, le fabricant indique un format de données série suivant : 8 bits, No parity, 1 stop bit, ce qui me semble être le format par défaut d'envois de données par la liaison série de l'arduino... (j'ai un Arduino Mega 2560).

Cette remarque de format m'amène une autre question : comment vais-je envoyer des données en série sans bit de stop ...? comme par exemple pour changer la couleur de fond, il faut envoyer trois "paquets", commande 42 en héxa, puis FF et FF si l'on souhaite un fond blanc, car il faudrait que le bit de stop ne vienne qu'à la fin.

En vous remerciant d'avance.
Ivan

Yep!

Il existe une librairie compatible avec la plupart des écrans 4D et qui facilite grandement son pilotage : http://playground.arduino.cc/Code/SerialLCDLibrarySuite

Il existe également une autre référence sur Github : GitHub - 4dsystems/Picaso-Serial-Arduino-Library: Arduino Library for 4D Systems Serial Environement for Picaso

Dans la mesure où tu ne nous donnes aucune info sur l’écran en question, sa référence, c’est difficile de savoir si il est supporté par les librairies ci-dessus. Tu peux essayer pour voir.

Autrement, piloter un driver LCD est un peu plus compliqué que de lui balancer une série de caractère les uns derrière les autres en espérant qu’il se passe quelque-chose. Le driver possède ses propres fonctions qu’il faut appeler spécifiquement pour lui envoyer tes ordres.

@+

Zoroastre.

Bon ben déjà je te remercie pour la rapidité et l’efficacité de la réponse...

C'est vrai que j'ai omis de préciser certaines chose : l'écran est donc un 4D Systems, modèle µLCD-128.

Je vais creuser les liens que tu as indiqué dans la réponse,et je pense que cela devrait aller déjà un peu mieux. Il est vrai que je suis partis sur une impression de facilité par rapport à la communication avec ces écrans, la documentation de l'écran indique simplement les codes en hexa à mettre en fonction de ce que l'on souhaite afficher (l'électronique de l'écran se chargeant de la "traduction").

J'espère pouvoir rapidement partager des lignes de codes sur l'analyse des paramètres moteur que je souhaite mettre en place.

Bon codage à tous et à bientôt.
Ivan

Re-bonjour à tous...

J'essaie de me dépatouiller depuis 3 semaines... Ben c'est guère mieux...

J'ai récupéré la bibliothèque comme conseillé, ne sachant pas comment l'utiliser j'ai fouillé dans le code pour essayer de comprendre.

D'après la documentation du µLCD-128, ( http://www.dontronics.com/pdf/uLCD-128%20Users%20Manual%20Rev1.2.pdf ), la commande à envoyer en premier est 55 en hexa (ou le caractère U), de manière à initialiser l'auto-bauds (chose que j'avais oublié la première fois).

En regardant dans la bibliothèque, je suis tombé sur la commande "_writeCommand16(0x55);", celle-ci me renvoyant vers la commande "_writeParallelLCD88", et cette dernière indiquait :

void Screen_HI32::_writeParallelLCD88(uint8_t dataHigh8, uint8_t dataLow8)
{
#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
    PORTA = dataHigh8;
    PORTC = dataLow8;
    pulse_low(_portWR, _bitWR);
#else
#endif
}

Et là... ben je suis resté comme une poule devant un couteau suisse (quoi que cela pourrait être insultant pour la poule...).

J'ai appris quelques trucs, mais pas encore ce qui me permettrais de faire ne serai-ce qu'effacer l'écran...
Ah, j'ai quand même fais une petite boucle pour lire les lire les octets reçus et les convertir en hexa, mais je ne reçois que "4B", hors je devrais avoir 06 ou 15 en hexa (pou ACK ou NAK), ce qui me laisse encore perplexe.

Si quelqu'un aurait une petite bride de code pour m'aider à initialiser le dialogue avec l'écran.
Cordialement
Ivan