je m'en sors pas avec I2C

phil135
Compagnon
15 Septembre 2012
1 414
france, essonne, nord
  • Auteur de la discussion
  • #1
bonjour

il faut que je fasse avancer rapidement un mini projet, un test limité, et je tourne en rond sévère:

il s'agit d'interfacer des (d'abord un seul) capteur de distance à ultrasons sur un arduino

arduino uno rev3
capteur à ultrason SRF10 (vendu par lextronic)

je suis arrivé à scanner le bus i2c , ça me répond que le capteur est en 0x70
ok, mais le capteur a bien plus de registres que ça, où sont les autres ? comment y accéder ?

est-ce que l'un de vous aurait un code exemple d'interfaçage d'un capteur i2c à plusieurs registres sur un arduino ? (avec l'initialisation)
je trouve juste des exemples de capteur de température à un seul registre, et trop peu commentés

merci infiniment
 
Dernière édition:
phil135
Compagnon
15 Septembre 2012
1 414
france, essonne, nord
  • Auteur de la discussion
  • #3
et bien ... malgré pas mal de recherches je n'avais pas trouvé cet exemple-là. merci je vais l'examiner de prés
(sans doute pas les bons mots de recherche)
 
phil135
Compagnon
15 Septembre 2012
1 414
france, essonne, nord
  • Auteur de la discussion
  • #4
et bien .... ça marche
par contre quand j'ai voulu changer l'adresse du capteur pour pouvoir en mettre plusieurs sur le bus, j'ai d'abord eu un comportement bizarre (une sorte de décalage) et en voulant compenser ce décalage j'ai perdu la communication avec le capteur :smt022

si quelqu'un connait une manip pour revenir aux paramètres usine, je suis preneur

édit:
c’était un pb d'adressage , j'ai repris la main. mais je reste intéressé par une manip de reset, au cas où

il y a une sorte de division par 2 , ou décalage d'un bit vers la droite, entre l'adresse spécifiée et celle obtenue
et en plus toutes les adresses ne sont pas autorisées :smt021
 
Dernière édition:
phil135
Compagnon
15 Septembre 2012
1 414
france, essonne, nord
  • Auteur de la discussion
  • #5
maintenant que c'est ok pour le capteur SRF10, j'ai un autre pb: l'afficheur

j'ai un afficheur MIDAS MC22005A6W-SPTLYI (vendu par Farnell en ref 2425728 ) qui est en quelques sorte "natif i2c" : les notions de lignes et colonnes de pixels ne sont pas accessibles (j'ai juste des DDRAM address de caractères), du coup les exemples sur le web autour d'un écran parallèle + HD44780 et la library liquidcrystal ... je ne sais pas quoi en faire
 
speedjf37
Compagnon
15 Octobre 2009
1 965
indre et loire
Bonjour,

votre LCD MIDAS MC22005A6W-SPTLYI est piloté par un AC780S

D'après ce site il serait compatible avec LCD HD44780 :
https://developer.mbed.org/users/wim/notebook/textlcd-enhanced/

Note that there are many HD44780 compatible LCD controllers around (e.g. KS0066, ST7066, SPLC780, SED1278, LC7985A, NT7603, AIP31066). There are also controllers available that are compatible and provide additional features like an increased number of segment drivers for more characters or internal LCD contrast voltage generators (e.g. KS0073, KS0078, ST7036, SSD1803, SSD1803A, HD66712, SPLC792A). Several other types of displays use controllers that are compatible with the HD44780 to allow an easy transition, for example OLED drivers such as the WS0010 and US2066. The library controls the HD44780 through a 4-bit bus either directly or by using SPI or I2C portexpanders. Several compatible controllers also have native support for SPI and/or I2C serial interfaces in addition to, or instead of, the parallel bus (eg ST7032i, ST7036i, ST7070, SSD1803, AIP31068, PCF211X, AC780). The enhanced TextLCD library supports some of these devices


quelques liens divers LCD I2C:

http://blog.f8asb.com/2014/03/01/mise-en-oeuvre-i2c-vers-lcd-carte-chinoise-sur-arduino/

http://workshopshed.com/2012/07/a-little-venture-with-electronics-lcd-diagnostics-and-software/


edit: comme dit au dessus LiquidCrystal_I2C.h (il faut paramétrer les pins)

Bonne chance !

JF
 
Dernière édition:
phil135
Compagnon
15 Septembre 2012
1 414
france, essonne, nord
  • Auteur de la discussion
  • #8
mais justement je ne vois aucune notion de pin dans ma documentation, du coup je ne sais pas quoi faire de liquidcrystal_i2c puisque tous les exemples que je trouve passent par une assignation de pins
j'ai déjà trouvé les deux derniers liens, mais je n'arrive pas à transposer vers le cas de cet afficheur
il y a forcement un câblage interne mais je n'y ai pas accès: la seule chose que je trouve dans la doc (http://www.farnell.com/datasheets/2051102.pdf ) c'est des pins i2c (ça ok, je fais marcher le i2c scanner), une liste de registres de commandes et pour les emplacements des caractères, puis un tableau de codes de caractères. c'est surement suffisant pour des gens qui maitrisent bien i2c ... mais moi j'ai besoin d'un exemple de code de mise en œuvre


par contre je n'avais pas trouvé le premier lien vers textlcd-enhanced
je suis dans le cas évoqué à la fin de l'introduction : native i2c instead of parallel bus

l'exemple un peu compliqué donné à la fin semble être un assemblage de tous les cas, à charge pour moi d'en effacer ce qui ne me concerne pas, c'est ça ?
 
jpbbricole
Compagnon
26 Mai 2016
1 962
Corsier-sur-Vevey (Vaud)
Salut phil135
Dans la doc PDF, chapitre 7 il y a
5 SDA. Sur Arduino Uno pin A4
6 SCL. Sur Arduino Uno pin A5
Si tu utilise une bibliothèque, tu te "fiches" de tout ces registres.
D'après la doc, l'adresse semble être 0x78(hexa)
Pour le paramétrage des fonctions de la bibliothèque:
LiquidCrystal_I2C lcd(0x78, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address

Dans void setup()
lcd.begin(20,2);

Bonne nuit
jpbbricole
 
phil135
Compagnon
15 Septembre 2012
1 414
france, essonne, nord
l'adresse scannée n'est pas celle-ci mais c'est pas grave
20,2 ok je vois
le 2 1 0 4 5 6 7 3 positive de liquidcristal , c'est quoi exactement ? pour moi c'etait des identité de pins en sortie d'un module i2c addon
 
jpbbricole
Compagnon
26 Mai 2016
1 962
Corsier-sur-Vevey (Vaud)
Salut phil135
Rectification, si tu prend la bibliothèque LiquidCrystal_I2C.h, c'est une autre version que la mienne et est plus simple à utiliser.
Code:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

// Set the LCD address to 0x27 for a 16 chars and 2 line display
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup()
{
    // initialize the LCD
    lcd.begin();

    // Turn on the blacklight and print a message.
    lcd.backlight();
    lcd.print("Hello, world!");
}

void loop()
{
    // Do nothing here...
}
Bonne journée
jpbbricole
 
La dernière réponse à ce sujet date de plus de 6 mois
Haut