Afficheur I2C

Bonjour,
Je voudrai utiliser un afficheur en mode I2C(il fonctionne bien avec Cubloc ou Picaxe).
J'ai ajouté les 2 résistances 4,7k de tirage au 5V.
Mais je débute avec la librairie Wire. Et c'est loin d'être clair dans ma tête!
Pour envoyer des datas à l'afficheur est-ce WRITE ou SEND? J'utilise Arduino 23.
L'adresse de l'afficheur est 0x00

Faut-il mettre byte?

La doc de l'afficheur impose:
adresse: &H00
envoyer 3 fois (0) pour une initialisation correcte
&H1B puis &H43 pour effacer écran

etc...

1° essai avec le code ci-dessous: rien ne s'affiche, l'écran et le curseur sont actifs.

#include <Wire.h>


Wire.begin();

void affichLCD()
{
  Wire.beginTransmission(0);
  Wire.send(byte(0x00));
  Wire.send(byte(0x00));
  Wire.send(byte(0x00)
  Wire.send("bonjour");
  Wire.endTransmission();
  delay (1000);
}

Merci de m'éclairer....

papybricol:
Bonjour,
Je voudrai utiliser un afficheur en mode I2C(il fonctionne bien avec Cubloc ou Picaxe).
J'ai ajouté les 2 résistances 4,7k de tirage au 5V.
Mais je débute avec la librairie Wire. Et c'est loin d'être clair dans ma tête!
Pour envoyer des datas à l'afficheur est-ce WRITE ou SEND? J'utilise Arduino 23.
L'adresse de l'afficheur est 0x00

Faut-il mettre byte?

La doc de l'afficheur impose:
adresse: &H00
envoyer 3 fois (0) pour une initialisation correcte
&H1B puis &H43 pour effacer écran

etc...

1° essai avec le code ci-dessous: rien ne s'affiche, l'écran et le curseur sont actifs.

#include <Wire.h>

Wire.begin();

void affichLCD()
{
 Wire.beginTransmission(0);
 Wire.send(byte(0x00));
 Wire.send(byte(0x00));
 Wire.send(byte(0x00)
 Wire.send("bonjour");
 Wire.endTransmission();
 delay (1000);
}





Merci de m'éclairer....

bonjour
Je ne suis pas spécialiste de l'I2C mais j'ai quelques afficheurs (4 X 7 segments drivé par SAA1064)
et ça roule bien
voir si un/des petit delay n'est pas nécessaire apres le Wire.begin() ?
c'est quoi comme afficheur ? datasheet de l'afficheur ?

le code de base que j'utilise sans me poser (trop) de question

/*include the i2c lib  */
#include <Wire.h>

/* define the SAA1064 i2c address */
const int address = 0x38;

/* defining the digits 1 to 9*/
const int numbers[11] = { 4+2, 64+16+8+2+1, 64+8+4+2+1,  64+32+4+2, B10110100, B11111110, B10101111, B00111000, B10111111, B10111101,B00000000};

/* defining the buffer wich is going to loop trough transmission */
/*buffer[6] = {instructionbyte, contollbyte, digit 1, digit 2, digit 3,digit 4};*/
unsigned char buffer[6] = {0x00, B01000111, numbers[0], numbers[1], numbers[2],numbers[3]};

void setup(){
 /* connect i2c */
 Wire.begin();  
 /* keep it relaxe... */
 delay(50);
}

void loop() {      
   
   /* begin transmission with SAA1064 */  
   Wire.beginTransmission(address);
   
   /* loop buffer though transmission */
   for(int i = 0; i < 7; i++) Wire.send((byte)buffer[i]);
   
   /* end transmission */
   Wire.endTransmission();  
 
   /* delay */
   delay(50);}

Bonjour,

Ce serait possible d'avoir la référence de l'afficheur en question ?
Je suppose que c'est un afficheur en provenance de lextronic vu que tu parle de cubloc/... ?

Adresse I2C : 0x00 !? Tu est sur de toi ? 0x00 fait partie des adresses I2C réservé, donc normalement aucun fabricants ne devrait utiliser cette adresse.

Merci à tous les 2, je vais m'y remettre.
D'ailleurs je viens de me rendre compte, qu'avec Picaxe, pour l'adresse 0 je mettais 1( dû? à l'octet d'écriture 8bits finissant par 1?).

L'afficheur, c'est un CLCD204-BLB
pour l'adresse en mode I2C, voir la page 7et 8 du doc joint.
Les switchs de config de l'adresse du module sont bien sur l'adresse 0.
C'est vrai ce que tu dis,Skywodd, pour les adresses réservées. Ces afficheurs,qui datent peut-être, semblent hors de la norme (actuelle?)
Ils sont parfaits avec Cubloc (surtout en mode Cunet), acceptables avec Picaxe (petits défauts d'affichage contournables).
Etant maintenant Arduiniste, j'essaie de récupérer, réemployer...le possible.

CLCD.pdf (357 KB)

papybricol:
Merci à tous les 2, je vais m'y remettre.
D'ailleurs je viens de me rendre compte, qu'avec Picaxe, pour l'adresse 0 je mettais 1( dû? à l'octet d'écriture 8bits finissant par 1?).

L'afficheur, c'est un CLCD204-BLB
pour l'adresse en mode I2C, voir la page 7et 8 du doc joint.
Les switchs de config de l'adresse du module sont bien sur l'adresse 0.
C'est vrai ce que tu dis,Skywodd, pour les adresses réservées. Ces afficheurs,qui datent peut-être, semblent hors de la norme (actuelle?)
Ils sont parfaits avec Cubloc (surtout en mode Cunet), acceptables avec Picaxe (petits défauts d'affichage contournables).
Etant maintenant Arduiniste, j'essaie de récupérer, réemployer...le possible.

bonsoir
OK
vous avez fureté là ?

Bonsoir

Pour l'adresse I2C, la notice de l'afficheur indique qu'avec les 3 bits du commutateur DIL on peut la définir de 0 à 7...... Il y a le choix !

L'adresse 0 est en théorie une adresse à part comme indiqué par skywood, c'est l'adresse "d'appel général" et seuls certains périphériques savent y répondre.

Dans le cas de cet afficheur qui est un produit plutôt 'amateur' et certainement pas référencé comme I2C 'officiel' l'adresse 0 est peut être gérée comme une adresse ordinaire. le probleme pourrait survenir plus tard si un périphérique 'standard' est ajouté sur le bus et se met à réagir à cette adresse 'appel général"
Tant que l'afficheur est seul périphérique sur le bus peut être pas de pb s'il est 'étudié pour' et si l'Arduino s'en accommode...

Merci Artouste

Sympa comme lien. J'en profite pour commencer à comprendre comment fonctionnent les librairies.
En y fouillant, l'adresse du CLCD semble bien être 0x00.
J'y retrouve le protocole en hexa des commandes.
Je vais refaire le montage et retester tout cela. Avec librairie CLCD ce sera pour l'usage courant. C'est trop pratique: merci la communauté!

Mais d'abord en direct avec wire seule, je suis du genre têtu et je veux savoir comment ça marche!

papybricol:
...
Mais d'abord en direct avec wire seule, je suis du genre têtu et je veux savoir comment ça marche!
...

bonsoir
Cela procède d'une bonne démarche intellectuelle :grin:

Le bout de code simple pour le SAA1064 + haut (me) semble facilement adaptable pour faire de l'expérimentation 8)

Bonsoir,
grace à vous j'avance
Merci

ça marche avec ce code tout simple, depuis que j'ai vérifié le "chevelu" au dessus de la breadboard, Il manquait un fil!
ça m'apprendra à laisser des tas de circuit (inutiles pour le test en cours) sur la même planche

Wire.begin();   
   Wire.beginTransmission(0x00);
   Wire.send("Salut");
    Wire.endTransmission();

Avec la librairie CLCD y a pas photo pour afficher.

Mais toujours coupeur de cheveu en 4, avant cette librairie et "print", comment faisait-on pour convertir une variable int ou long, signée ou non en chr pour l'envoyer byte par byte avec send?
Connaissez-vous un bon tutoriel pour débutant sur la classe String?