Connections I2C Afficheur + clavier

Bonjour.

En provenance de mon boulot, j'ai récupéré des afficheurs devenus obsolète, c'est un afficheur classique 2*16 caractères comme ceux vendu pour l'arduino et que je possède déjà pour mes essaies mais avec en plus un clavier 3 boutons + 2 petites leds monter sur le lexan. Le tout réuni sur une carte pour dialoguer en I2C.

J'ai récupérer la bibliothèque pour dialoguer en IC2 avec les afficheurs I2C vendu pour l'arduino. Mais la j'ai les boutons et Leds en plus.

N'aillant pas encore beaucoup travaillé l'I2C, à part le petit module au lycée, je ne sais pas exactement par ou commencer.

Qu'est ce qu'il me faut pour dialoguer avec ce type de système? Et est-ce possible déjà? Y a t'il de la doc a avoir pour que je puisse trouvé ce qu'il me manque? etc.. (les adresses ou d'autres données)

Merci de m'aiguiller un peut pour le fonctionnement de l'I2C.

Tu peux commencer par scanner le bus I2C tu trouveras ainsi l'adresse du module.
Ensuite il faut déterminer si c'est un contrôleur I2C classique (un chip connu) ou un micro-contrôleur programmé en slave I2C.
Il y a de grande chance que ce soit un chip I2C, si tu arrives à lire sa référence tu trouveras la doc par google.
Ensuite reste à savoir comment il a été branché ... prendre une loupe et essayer de refaire le schéma.

Tu peux t'inspirer de celui que je revends :
http://www.zartronic.fr/lcd-shield-pour-arduino-p-125.html

A+ Teiva


www.Zartronic.fr : Votre source Arduino en France

Merci, j'ai le LCD Shield avec les boutons en m'a procession.
En ce qui concerne le composant I2C c'est pas facile à voir car il est positionné derrière le LCD, mais sa c'est pas un problème car je peut avoir les doc et je peut demander au développeur qui l'utilisait.

Mais ma demande concerne donc plus sur ce qu'il me faut comme info pour pouvoir l'utilisé avec l'ardino ainsi je pourrais la demander au développeur.
Donc pour le moment il faut que je connaisse l'adresse du module, le type de contrôleur et sont câblage.

Mais j'arrive pas encore bien avoir ce qu'il faut pour interagir avec.
Par exemple il faut une adresse pour localisé le composant mais après il faut lui dire ce que tu veux lui faire faire. Lire les boutons, allumer la led, ou envoyer un texte à l'afficheur. Il y a donc l'adresse du chip et après il y a surement le registre à connaitre qui doit être lier à son câblage.

Pour moi l'avantage d'utiliser ce module afficheur c'est qu'il est dans son boitier plastique que je peut l'intégrer facilement dans mon meuble et qu'il possède 3 boutons et 2 leds sur le lexan ce qui est parfait pour ce que je veut en faire. Et en plus il est gratuit

C'est bien un microcontroleur ATTINY2313.

J'ai récupéré la doc, et le protocole pour attaquer le microcontroleur, les adresses du registre.

Avec la documentation que j'ai,
L'adresse du contrôleur I2C de la carte afficheur est 0x23.

Le registre des Boutons est 0x10: sur un Byte
Byte 0:
b0: 1 = Button 1 (left) down.
b1: 1 = Button 1 down for at least 1s.
b2: 1 = Button 2 (middle) down.
b3: 1 = Button 2 down for at least 1s.
b4: 1 = Button 3 (right) down.
b5: 1 = Button 3 down for at least 1s.
b6, b7: Reserved, read as zeroes.

Le rétroéclairage est 0x20: 1 Byte
Byte 0:
0 = Backlight OFF
1 = Backlight ON

le contrast est 0x21: 1Byte
Byte 0:
0 (minimum) to 255(maximum)

Les Leds 0x22: 1 byte
Byte 0:
b0: 0 = Led1 (red) OFF
1 = Led1 ON
b1-3: flashing period index for Led1
b4: 0 = Led2 (green) OFF
1 = Led2 ON
b5-7:flashing period index for Led2

Flashing period index Cycle delay (s)
0 (infinite)
1 0.32
2 0.64
3 0.96
4 1.28
5 1.60
6 1.92
7 2.24

Excuser moi, j'ai était coupé dans mon élan lors de mon précédent post, Donc comme je disais, j'ai récupéré la documentation et j'ai noté quelques infos.

Est-ce que vous pouvez m'indiquer la démarche pour utiliser mon afficheur clavier, vu que c'est un système pas conçu a l'origine pour l'arduino je suppose que les bibliothèque d'origine doivent être modifier

Personne pour m'aider a me lancer.

Un informaticien à mon boulot m'a dit que la gestion de l'I2C n'était pas évidente.

Pourtant c'est très simple avec l'arduino :

Exemple : http://www.instructables.com/id/I2C-between-Arduinos/

Merci beaucoup, je vais pouvoir avancer. Il est vrai qu'en BTS IRIS on voit malheureusement que très peut l'I2C, pourtant indispensable.

Merci en tout cas.

Je n'arrive pas a ouvrir tout les liens des "pages suivante" dans les exemples, mais cela viens peut être de la connections à mon boulot qui est restreinte.

Bonjour et joyeux Noel.

J'aurais besoin d'aide s'il vous plai pour m'aider à comprendre le fonctionnement de l'I2C.

Si j'ai bien compris mon arduino est un maître, donc apparemment lors de la déclaration j'ai pas d'adresse à mettre. Puis je dois déclarer :
Wire.beginTransmission avec l'adressage de mon afficheur en mode decimal.

Ensuite j'ai juste à lire les données comme pour les boutons par exemple, je doit donc lui écrire 0x10 en décimal et il me répond les par le code représentant les boutons?

Et pour lui affecter une valeur, je vois pas trop. Par exemple pour le contraste:
Je doit lui dire que je veux le registre 0x21 puis lui donner la valeur que je veuille qu'il soit. Mais de quelle manière s'il vous plaie

Idem pour l'affichage des lignes faut que je regarde sur quelle adresse lui envoyer

Bonjour,

tu devrais trouver les info que tu cherches ici : Tutorial: Arduino and the I2C bus – Part One | tronixstuff.com
(il n'y a pas de www dans l'adresse)

Désolé de ne pas mettre l'adresse en lien mais comme c'est mon 1er post, je n'ai pas le droit

Serge

Merci beaucoup

Bonjour

Je viens de faire l'essai de mon afficheur mais il ne veut rien savoir.

Mais j'ai avant d'aller plus loin 2 questions, en I2C j'utilise déjà la carte miniBoard avec la DS1307.


Pour l'utiliser j'utilise la bibliothèque fourni, cela marche trés bien mais je suppose que l'adresse de la carte sur l'I2C est réglé dans la bibliothèque car on ne fait rien du tout comme réglage. En tout cas j'arrive à récupérer l'heures.

Par contre j'ai connecté mon Afficheur I2C sur le réseaux I2C et j'arrive à rien, l'afficheur boot j'essaie de communiquer avec lui mais rien ne se passe il boot et reboot continuellement. Par contre à chaque fois qu'il reboot on vois que l'I2C est arrêté car je récupère plus l'heures pendant 1 à 2 lectures.

Autre info l'afficheur est alimenté en 12V, il a donc 4 fils, le 12V, la masse et le SCl et SDA. En interne il possède un 7805 pour avoir du 5v. Du coup j'ai ajouté une alimentation 12V et relier la masse de l'arduino à la masse du 12V par contre les résistance de pull up (2.2K) sont sur le 5V de l'arduino.

J'ose pas tenter de mettre les pull up sur le 12V pour 2 raisons c'est que la petite carte DS1307 possède déjà des pull up qui sont donc sur le 5V mais il y a des cavaliers qui apparemment permettent de les enlever. Ensuite pour le moment j'ai pas de résistance plus grosse sous la main et 2.2K sous 12v est peut être pas assez élevé.

Autre souci le micro contrôleur de l'afficheur attend surement quelque chose pour arrêter de booter en permanence. Je sais pas si c'est dés que la connections est établi. Lors du boot on vois la version su soft embarqué, puis le clignotement du 1er caractère et le clignotement alternatif des 2 LED. A un moment assez court, environ 1 seconde les Leds et l'afficheur s'arrêtent de clignoter et c'est a ce moment que je récupère plus les informations de la DS1307

Voici le tout petit bout de code pour essayer de communiquer avec lui.

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by  mattt on the Arduino forum and modified by D. Sjunnesson

void setup()
{
  Serial.begin(9600);

  RTC.stop();
  RTC.set(DS1307_SEC,1);        //set the seconds
  RTC.set(DS1307_MIN,23);     //set the minutes
  RTC.set(DS1307_HR,12);       //set the hours
  RTC.set(DS1307_DOW,4);       //set the day of the week
  RTC.set(DS1307_DATE,5);       //set the date
  RTC.set(DS1307_MTH,3);        //set the month
  RTC.set(DS1307_YR,9);         //set the year
  RTC.start();
  Wire.begin();
}

void loop()
{

  Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
  Serial.print(":");
  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
  Serial.print(":");
  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
  Serial.print("      ");                 // some space for a more happy life
  Serial.print(RTC.get(DS1307_DATE,false));//read date
  Serial.print("/");
  Serial.print(RTC.get(DS1307_MTH,false));//read month
  Serial.print("/");
  Serial.print(RTC.get(DS1307_YR,false)); //read year 
  Serial.println();

  delay(1000);
//Pour l'afficheur
  Wire.beginTransmission(0x38); //Adresse de l'afficheur
  Wire.send(0x20); //Registre pour le rétroéclairage
  Wire.send(1); //Allumage du rétroéclairage
  Wire.endTransmission();
}

je précise que j'ai essayé d'autre registre mais aucun ne provoque quelque chose.

Autre chose quelle est le symptôme lorsque si l'on inverse le SDA et le SCL car j'ai un doute sur mon schéma car l'alim était inversé, sans gravité car il y a une diode en entrée.

Merci

Je résume : quand tu branches l'afficheur sur ton réseau i2c, le DS1307 ne fonctionne plus ?

Je ne connais pas super bien la librairie DS1307 mais peut-être y'a-t-il un conflit avec la librairie wire ?
Puisque l'afficheur semble fonctionner en 5V, pourquoi ne pas le brancher directement en 5V ? (soit sur l'entrée 12V, dans ce cas vérifier la tension à la sortie du régulateur, soit en bypassant le régulateur).

Est-ce que l'afficheur marche sans DS1307 ?

Bonjour,

Si si la DS1307 marche toujours impeccable sauf lorsque l'afficheur reboot (il le fait toute les 10 secondes environ), je pense qu'il doit faire quelque chose sur le bus qui soit bloque la lecture du DS1307, soit mon interrogation vers l'afficheur bloque le programme a ce moment la peut être à cause d'une erreur.

Le 12V sert apparemment qu'a alimenter le rétro éclairage et bien sur le 7805. Mais si je branche que le 5V de l'arduino j'ai rien du tout, les voyants s'allume pas ni l'afficheur. Il m'est difficile de bypassé le 7805 car la plaque ou se trouve le micro-controleur et donc le 7805 est plaqué à l'arrière de l'afficheur et la carte est réalisé en multicouche.

L'afficheur tout seul me fait exactement la même chose qu'avec le DS1307, c'est vrais que j'avais pas essayé

J'avais pas vu mais :

Wire.send(1);

A mon avis le bug est à chercher ici ... (je touche pas trop (encore) à l'i2c mais j'ai jamais vu un simple "1", toujours des hexa)

cela ne change rien même si je met 0x01 ou 0x1,

Je poserais la question à mon boulot jeudi.

J'ai vu un autre souci :

Wire.beginTransmission(0x38); //Adresse de l'afficheur
Wire.send(0x20); //Registre pour le rétroéclairage
Wire.send(1); //Allumage du rétroéclairage
Wire.endTransmission();

Dans un message précédent tu dis que :

"L'adresse du contrôleur I2C de la carte afficheur est 0x23".

Sinon pour envoyé le fameux 1 (à la place de Wire.send(1):wink: essaye plutôt : Wire.send(0b00000001) ou Wire.send(0b10000000) ou bien encore Wire.send(0b11111111)

Bonjour effectivement je m'était trompé dans le 1er post sur l'adressage de la carte sur l'I2C, c'est bien 0x38.

Ensuite je bien d'essayé avec 0b00000001 ... mais c'est pas mieux l'afficheur continu sont cycle, il doit surement y avoir un truc à envoyer pour qu'il arrête son boot