Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Modules LCD I2C modifié
JJE
Passioné
Passioné
Messages : 342
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#1 Message par JJE » mer. 8 mai 2019 10:49

Bonjour à tous, ce n'est pas que je m'égare sur ce sous-forum, mais j'ai une interrogation en C. Je viens d'ajouter une question.
Contexte :
J'ai acheté il y a déjà quelque temps les modules suivants
    2x MUZOCT IIC/I2C/TWI 1602 Module LCD Rétroéclairage Bleu Pour Arduino UNO R3 MEGA2560
    et
    Arduino LCD Module,Quimat IIC/I2C/TWI Serial 2004 20x4 LCD Module Shield pour Arduino UNO R3 MEGA 2560 Avec 4PIN Mâle à Femelle Wires Câble 4pcsNyl
Il m'a été fourni par le vendeur de ceux à deux lignes les fichiers suivants comme "librairie" permettant d'exploiter ces modules, celui qui m'a vendu celui à 4 lignes n'a pas répondu, mais ce ne devrait pas être très différent. Mais je n'ai rien d'autre.

Fichier d'en-tête :
► Afficher le texte

Fichier du code :
► Afficher le texte


Ma (mes) question(s)

    Je ne vois pas, avec cette librairie, comment est spécifiée la vitesse du bus I2C, ni combien elle vaut d'ailleurs.
    à plusieurs endroits, est utilisée une "étiquette" Rs que je ne vois définie nulle part, est-ce dans un des .h inclus que je n'ai pas ?
    Le premier paramètre du constructeur de la classe semble être l'adresse I2C, comment puis-je savoir la valeur du quartet de haut poids de cette adresse ?
Merci d'avance à qui pourra me dépanner.
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Modules LCD I2C modifié
Claudius
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 64
Enregistré en : septembre 2015
Localisation : ELANCOURT (78 - YVELINES)
Contact :

#2 Message par Claudius » mer. 8 mai 2019 12:10

Bonjour JJE et à tous,
JJE a écrit:
1 - Je ne vois pas, avec cette librairie, comment est spécifiée la vitesse du bus I2C, ni combien elle vaut d'ailleurs.
2 - A plusieurs endroits, est utilisée une "étiquette" Rs que je ne vois définie nulle part, est-ce dans un des .h inclus que je n'ai pas ?
3 - Le premier paramètre du constructeur de la classe semble être l'adresse I2C, comment puis-je savoir la valeur du quartet de haut poids de cette adresse ?

1 - Le LCD est esclave et donc la vitesse du bus I2C est imposée par le maître (Arduino, PIC, etc.). Donc nul besoin de définir une vitesse coté LCD via sa librairie d'accès pour peu que cette vitesse imposée respecte le max attendu par l'esclave (à priori 400 KBits/Sec)

2 - L'"étiquette" Rs est parfaitement définie à #define Rs B00000001 // Register select bit dans le 1st fichier d'entête et représente une constante de masque de bits égale à 0x01

3 - Le 1st paramètre uint8_t lcd_Addr du constructeur LiquidCrystal_I2C défini à LiquidCrystal_I2C(uint8_t lcd_Addr,uint8_t lcd_cols,uint8_t lcd_rows); est bien l'adresse du LCD sur le bus I2C
Cf. Datasheet I2C 1602 Serial LCD Module qui devrait répondre à ta question...

Modules LCD I2C modifié
satinas
Passioné
Passioné
Messages : 398
Enregistré en : novembre 2015

#3 Message par satinas » mer. 8 mai 2019 12:14

Bonjour JJE et Claudius,

En complément de la réponse de Claudius qui m'a devancé de quelques secondes

Cet afficheur I2C utilise un lcd 8 bits classique avec les 3 pins E, R/W et RS.
RS c'est "register select"
Pour afficher on met E à 1 et R/W à 0 (enable et write) puis
- on met RS à 0 pour envoyer une commande
- on met RS à 1 pour envoyer un caractère à afficher en position courante du curseur

Dans les fichiers h et c, on retrouve bien les 2 fonctions d'envoi d'une commande ou d'un caractère :

Code : Tout sélectionner

#define En B00000100  // Enable bit
#define Rw B00000010  // Read/Write bit
#define Rs B00000001  // Register select bit

inline void LiquidCrystal_I2C::command(uint8_t value) {
  send(value, 0);
}

inline size_t LiquidCrystal_I2C::write(uint8_t value) {
 send(value, Rs);
 return 1;
}


La bibliothèque "LiquidCrystal_I2C" utilise la bibliothèque "Wire" qui permet de transmettre en I2C.
#include "Wire.h"
Wire.begin();

Par défaut, lors du begin, l'interface I2C est initalisée à 100kHz.
D'après les sources de la bibliothèque, on peut modifier la vitesse par :
Wire.setClock(i2c_frequency);

voir https://www.arduino.cc/en/reference/wire

Modules LCD I2C modifié
JJE
Passioné
Passioné
Messages : 342
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#4 Message par JJE » mer. 8 mai 2019 12:27

merci à vous deux, j'en ferai bon usage, mais c'est l'heure du casse croûte.
En fait je tente de faire un module de gestion de ces périphériques en assembleur dont j'espère pouvoir faire profiter les amateurs de ce langage de ce forum.
Ce ne sera pas pour demain :-D
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Modules LCD I2C modifié
JJE
Passioné
Passioné
Messages : 342
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#5 Message par JJE » mer. 8 mai 2019 16:14

ReBonjour Claudius et Satinas, une réponse un peu plus civile, dans l'ordre

à Claudius first :
Claudius a écrit :Source du message Le LCD est esclave et donc la vitesse du bus I2C est imposée par le maître
, d'acord, mais j'écris le maître et donc je dois fixer la vitesse du bus en fonction des périphériques qu'il gère.
Claudius a écrit :Source du message L'"étiquette" Rs est parfaitement définie à #define Rs B00000001 // Register select bit
, je suis vraiment trop distrait, j'ai pourtant recopié ces lignes pour les adapter en assembleur :?
Claudius a écrit :Source du message Le 1st paramètre uint8_t lcd_Addr du constructeur LiquidCrystal_I2C
OK, ce n'est donc pas son quartet de bas poids et, comme dit ici
Datasheet I2C 1602 Serial LCD Module
, son premier quartet est 0x02.
Merci Claudius

Satinas deuxième (dans l'ordre)
J'ai bien compris le rôle du bir Rs
, ce fichier m'éclaire beaucoup, c'est dommage qu'on n'ait pas le source, ça me faciliterait la traduction, mais je pense avoir à peu près tout compris et déjà largement codé. Je trébuche un peu sur available, onReceive et on Request, à suivre après réflexion plus approfondie.
Merci Satinas

Merci à vous deux qui m'avez fait gagner de nombreuses et précieuses minutes (heures ?)
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e

Modules LCD I2C modifié
satinas
Passioné
Passioné
Messages : 398
Enregistré en : novembre 2015

#6 Message par satinas » mer. 8 mai 2019 16:34

pour le source de Wire, il suffit de chercher Wire.cpp, cela donne
https://github.com/arduino/ArduinoCore- ... c/Wire.cpp
C'est tout de même très lié à l'Arduino, on est loin du Pic.

Modules LCD I2C modifié
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 1338
Âge : 68
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#7 Message par paulfjujo » mer. 8 mai 2019 18:40

bonsoir à tous,

Meme si je ne fais quasiment plus d'ASM , il est plaisant de voir tout ce travail partagé...

satinas a écrit :.*.cpp...C'est tout de même très lié à l'Arduino, on est loin du Pic.



:sifflotte: un peu plus pres du PIC ,
en MPLAB C18 avec
18F26K22 et fonctions I2C réecrites
pour un afficheur LCD 4x20 char en I2C via un PCF8754
Aides toi, le ciel ou Fantastpic t'aideras

Modules LCD I2C modifié
JJE
Passioné
Passioné
Messages : 342
Âge : 78
Enregistré en : novembre 2017
Localisation : Picardie

#8 Message par JJE » mer. 8 mai 2019 20:02

merci à vous deux, je verrai ça demain et après, je m'absente quelques jours, vous serez plus tranquilles :-D
Cordialement

JJE

C'est pas parcequ'on n'a rien à dire qu'il faut fermer sa G....e


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités