Go Down

Topic: Connections I2C Afficheur + clavier (Read 6968 times) previous topic - next topic

Christophe37

Dec 16, 2010, 10:47 am Last Edit: Dec 16, 2010, 11:12 am by Christophe37 Reason: 1
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.

Teiva

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


www.Zartronic.fr : Arduino & Robotique

Christophe37

#2
Dec 16, 2010, 12:58 pm Last Edit: Dec 16, 2010, 01:35 pm by Christophe37 Reason: 1
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

Christophe37

C'est bien un microcontroleur ATTINY2313.

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

Christophe37

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



Christophe37

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

Christophe37

Personne pour m'aider a me lancer.

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

B@tto

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

http://arduino.cc/en/Reference/Wire
Exemple : http://www.instructables.com/id/I2C-between-Arduinos/
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Christophe37

#8
Dec 24, 2010, 09:21 am Last Edit: Dec 24, 2010, 01:40 pm by Christophe37 Reason: 1
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.

Christophe37

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.

Christophe37

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

Le Pnume

#11
Dec 28, 2010, 02:56 pm Last Edit: Dec 28, 2010, 02:57 pm by Le_Pnume Reason: 1
Bonjour,

tu devrais trouver les info que tu cherches ici : tronixstuff.wordpress.com/2010/10/20/tutorial-arduino-and-the-i2c-bus/
(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


Christophe37

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.
http://www.futurlec.com/Pictures/ET-MINI_DS1307_600.jpg
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.
Code: [Select]
#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

B@tto

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 ?
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Go Up