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 ---
- 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 ---
Modérateur : Jérémy
Modules LCD I2C modifié
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
Fichier d'en-tête :
Fichier du code :
Ma (mes) question(s)
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
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 ?
Modules LCD I2C modifié
- Claudius
Passioné- Messages : 260
- Âge : 69
- Enregistré en : septembre 2015
- Localisation : ELANCOURT (78 - YVELINES)
- Contact :
Bonjour JJE et à tous,
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...
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...
Enregistreur de traces GPS & Boussole GPS parlante (PIC & Arduino)
Modules LCD I2C modifié
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 :
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
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é
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
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
Modules LCD I2C modifié
ReBonjour Claudius et Satinas, une réponse un peu plus civile, dans l'ordre
à Claudius first :
Merci Claudius
Satinas deuxième (dans l'ordre)
J'ai bien compris le rôle du bir Rs
Merci Satinas
Merci à vous deux qui m'avez fait gagner de nombreuses et précieuses minutes (heures ?)
à Claudius first :
, 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 Le LCD est esclave et donc la vitesse du bus I2C est imposée par le maître
, je suis vraiment trop distrait, j'ai pourtant recopié ces lignes pour les adapter en assembleurClaudius a écrit :Source du message L'"étiquette" Rs est parfaitement définie à #define Rs B00000001 // Register select bit
OK, ce n'est donc pas son quartet de bas poids et, comme dit iciClaudius a écrit :Source du message Le 1st paramètre uint8_t lcd_Addr du constructeur LiquidCrystal_I2C
, son premier quartet est 0x02.Datasheet I2C 1602 Serial LCD Module
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.Claudius a écrit :Source du messagesatinas a écrit :Source du message voir https://www.arduino.cc/en/reference/wire
Merci Satinas
Merci à vous deux qui m'avez fait gagner de nombreuses et précieuses minutes (heures ?)
Modules LCD I2C modifié
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.
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
Expert- Messages : 2597
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonsoir à tous,
Meme si je ne fais quasiment plus d'ASM , il est plaisant de voir tout ce travail partagé...
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
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.
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
Modules LCD I2C modifié
Modules LCD I2C modifié
Modules LCD I2C modifié
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 78 invités