Forum des utilisateurs de Blockly(s)

Blockly@rduino => Améliorations à apporter => Discussion démarrée par: athea22 le septembre 30, 2017, 07:27:56 pm

Titre: lire un capteur I2C
Posté par: athea22 le septembre 30, 2017, 07:27:56 pm
bonjours ,les blocks présent rouge concernant le bus I2c nous permet'il de lire des capteur I2c ? ,pour info le lcd en i2c ne veut pas compiler  :-X
Titre: Re : lire un capteur I2C
Posté par: Bzhtitude le octobre 01, 2017, 11:43:34 am
Bonjour,

Les blocs I2C permettent la communication avec les composants I2C, J'ai implémenté les blocs qui permettent de lire et écrire dans ces composants, Attention, ce sont des blocs assez "bas niveau" , c'est voulu de ma part car ces blocs servent pour des élèves. En principe, en partant des trames fournies par le constructeur , tu peux configurer, écrire et lire les registres d'un composant I2C.

Le LCD-I2C nécessite des bibliothèques tierces, les as-tu bien rajoutées à ton IDE ? ( d'ailleur idem pour les bocs I2C, il faut utiliser une bibliothèque tierce)

N'hésites pas à me dire sur quel composant tu souhaites travailler pour que je vérifie que les trames sont "codables" avec les blocs I2C.


Titre: Re : lire un capteur I2C
Posté par: athea22 le octobre 01, 2017, 12:14:45 pm
bonjours ,j'essaie de communiquer avec un petit gyr 25 ,je pensais être a jours question bibli ,si il compile pas s'est qu'il ne trouve pas la bonne bibliothèque ???
Titre: Re : lire un capteur I2C
Posté par: Bzhtitude le octobre 01, 2017, 12:28:25 pm
Je ne trouve pas de reference explicite pour ton gyr25, si tu as un lien vers le composant, je prends ;)

Pour les biblios, il faut les rajouter soit à la main (ce que je prefére) soit via l'IDE et ajouter un ZIP (souvent deçu)

Les liens vers les biblios qui te manque (éventuellement )

https://github.com/Seeed-Studio/Serial_LCD  pour le LCD

et

http://playground.arduino.cc/Main/SoftwareI2CLibrary   pour les I2C

l' "aide" des blocs I2C pointe vers une page qui explique les différentes fonctions utilisées (au cas où).



Titre: Re : lire un capteur I2C
Posté par: athea22 le octobre 01, 2017, 02:42:19 pm
merci je galère, il me manque beaucoup de base ,mais en générale je peut faire pas mal de truc avec les block, des programme complexe parfois ;D mais faut pas rentrer dans les détaille de librairie etc  :-[, j'ai joint une image de deux blocks que lide arduino ne veut pas compiler ,pour faire fonctionner cette écran i2c
Titre: Re : lire un capteur I2C
Posté par: fontaine.jp le octobre 01, 2017, 03:40:04 pm
Salut,
Je ne sais pas ce que tu recherches exactement mais personnellement j'utilise cet écran --> https://www.seeedstudio.com/grove-lcd-rgb-backlight-p-1643.html
et ça fonctionne bien --> http://lesormeaux.net/blockly@rduino/?url=./examples/hum/hum.xml
mais si tu compiles avec l'EDI arduino il faut ajouter cette bibliothèque --> https://github.com/Seeed-Studio/Grove_LCD_RGB_Backlight
que tu dois copier dans arduino\libraries\rgb_lcd
A+
Titre: Re : lire un capteur I2C
Posté par: SebCanet le octobre 01, 2017, 09:20:54 pm
Bonjour,
merci à tout le mode pour vos coups de main. Pour répondre aux pb de bibliothèques, j'essaie de les intégrer au fur et à mesure des blocs dans un EDI plus complet : https://github.com/technologiescollege/arduino (https://github.com/technologiescollege/arduino).

N'hésitez pas à me dire ce qu'il faut rajouter, si besoin.
Titre: Re : lire un capteur I2C
Posté par: fontaine.jp le octobre 01, 2017, 11:32:34 pm
je pense qu'avec ça --> https://codebender.cc/codebender-external-library-files.zip?v55 il y a de quoi faire ;-)
Titre: Re : lire un capteur I2C
Posté par: SebCanet le octobre 02, 2017, 11:01:18 pm
596 bibliothèques !!!  ???
Euh...vous les voulez vraiment toutes ? Et des blocs pour chaque ?? Vite je double la paye de tous les bénévoles qui s'y engagent  !  :D
Titre: Re : lire un capteur I2C
Posté par: fontaine.jp le octobre 02, 2017, 11:31:42 pm
non il ne faut pas les mettre toutes,
c'était juste un lien pour ceux qui cherchent des bibliothèques, ça évite de perdre du temps.
Par contre pour la double paye je prends ;-)
Titre: Re : lire un capteur I2C
Posté par: Bzhtitude le octobre 02, 2017, 11:38:16 pm
Les biblio NON !! par contre les blocs si tu as des journées de 48h...

Mais j'imagine que la gestion des biblio est déroutante pour les utilisateurs de Blockly qui ne code pas sous arduino ... l'inverse aussi d'ailleurs quand on conçoit les blocs pour adapter du code arduino à Blockly...
Titre: Re : lire un capteur I2C
Posté par: SebCanet le octobre 03, 2017, 12:03:06 am
C'est clair que ce sont des gymnastiques d'esprit assez particulières. Et du coup ça me fait marrer maintenant les interrogations là-dessus, parce qu'il y a plein de confusions alors que ce sont des systèmes tellement basiques dans le principe  ;D
Titre: Re : lire un capteur I2C
Posté par: athea22 le octobre 03, 2017, 03:09:50 pm
merci s'est claire que sa ce veut simple ,je voudrais simplement lire une valeur provenant d'un capteur i2c en justifiant sont adress ox76 par exemple et le traiter dans une variable etc ... :-\ mais la je capte pas les blocks rouge  ( merci de rendre plus simple la programmation pour que des gents comme moi puisse faire des trucs )
Titre: Re : lire un capteur I2C
Posté par: Bzhtitude le octobre 03, 2017, 04:45:33 pm
Ces blocs sont conçus pour être le plus polyvalent possible --> pour le maximum de composant I2C. et conçu pour la formation ( pas de bloc magique donc)

A partir du datasheet (doc constructeur) du fabricant, tu dois avoir la trame I2C à générer pour obtenir ce que tu souhaites (voir PJ pour un exemple).
Les blocs I2C rouges permettent de génerer cette trame (START, SEND, RESTART... ) en fonction de la trame à générer. Tous les composants que j'ai utilisés jusque là fonctionnaient.

Je réitère donc ma demande, si tu as un lien vers le composant que tu souhaites utiliser, je vérifierai que ça peut se coder dans Blockly. (la référence gyr25 n'est pas assez explicite).
Titre: Re : lire un capteur I2C
Posté par: athea22 le octobre 03, 2017, 07:04:39 pm
merci de votre attention ,voici ce modèle de gyro le gy25 qui donne directement en sortie des valeurs angulaire et non des vitesses angulaire, ce qui est sympathique ,
s'est plus aussi un exercice pour moi afin d'apprivoiser s'est bus i2c , spi etc (s'est plus dure que analogique ...(les blocks spi dans blockly sont'ils tous opérationnel?) ::)

gyro 25   http://www.ebay.fr/itm/GY25-capteur-de-position-angulaire-MPU6050-MCU-tilt-angle-module-UART-GY-25-/272219323333
Titre: Re : lire un capteur I2C
Posté par: Bzhtitude le octobre 03, 2017, 08:44:20 pm
le gy25 que tu as dispose de 2 canaux de communications : I2C et série, on ne peut pas dire que la doc soit de première qualité ... surtout si c'est la première fois que tu as un composant I2C à programmer.

Enfin bref , ce "bout" de doc https://docs.bsfrance.fr/documentation/10592_GY25/GY25_MANUAL_EN.pdf permet en principe de s'en sortir (en liaison série)
le code arduino fournit dans la description du composant utilise la liaison série ( bah oui, il y a de l'I2C de dispo mais ils utilisent la liaison série...)
En pseudo-code , sans affichage et toute la décoration, il faut faire un algo du genre là:

VAR
Preambule,Hheading....,FrameEnd  de type octet

INIT
   StartI2C
   I2C_SEND(0xA5) // adresse + mode W
   I2C_SEND(0x52) // configurer en mode auto
   StopI2C
Fin INIT

LOOP
   StartI2C
   I2C_SEND(0xA5) // adresse + mode R ?? aucune info dans la doc pour ce bout là??
   Preambule = I2C_RECEIVE(0)  // on recupere les donnée octet par octet , en commencant par le flag de preembule 0xAA
   Hheading = I2C_RECEIVE(0)   // puis l'octet poid fort du heading ...
   ....
   frameEnd = I2C_RECEIVE(1)  // jusqu'au dernier , le flag de fin de trame , et comme c'est le dernier on met à 1 le "last"
   StopI2C  // c'est fini pour cette salve ...
   Traitement_Affichage // gestion des données reçues
Fin LOOP



En conclusion, avec les blocs I2C présents , tu dois pouvoir t'en sortir, mais ça ne se fait pas sur une jambe... C'est pour ton plaisir personnel ou c'est pour exploiter en classe?

Pour le SPI, en principe les blocs fonctionnent et c'est "en théorie" plus simple que l'I2C à utiliser. (EN PJ, un petit test du SPI)


Bon courage pour la suite.


Titre: Re : lire un capteur I2C
Posté par: athea22 le octobre 03, 2017, 09:26:38 pm
merci je vais me mettre au spi ,tu a des conseilles, une série de block dans l'ordre m'aiderais grandement  ,je fait un programmateur pour un four a céramique avec une sonde k                   http://datasheets.maximintegrated.com/en/ds/MAX6675.pdf     
et voici mes blocks  ::)
Titre: Re : lire un capteur I2C
Posté par: Bzhtitude le octobre 03, 2017, 09:42:34 pm
J'ai du te dégouter de l'I2C... mais bon pas du SPI à priori ;)

Ton code est  un bon début mais doit te ramener des résultats étranges, car le MAX6675 envoies sans cesse des données, et tu les recupères un peu au pif... il va falloir gérer le CS/
Mais avec une VRAIE doc , tu vas trouver la solution -->

"Force CS low to output the first bit on the SO pin. A complete serial interface read requires 16 clock cycles.
Read the 16 output bits on the falling edge of the clock.The first bit, D15, is a dummy sign bit and is always
zero. Bits D14–D3 contain the converted temperature in the order of MSB to LSB. "


il y a aussi des contraintes sur la fréquence de l'horloge ---> voir doc

En tout cas , je suis content que ces blocs servent (à d'autres que mes élèves).

Je n'ai pas vraiment de conseil pour les composants, ça dépend de tes envies, idées et surtout de la documentation disponible...



Titre: Re : lire un capteur I2C
Posté par: athea22 le octobre 03, 2017, 10:22:39 pm
non ,mais le spi me parait plus simple ,sauf que j'arrive pas a faire marcher le circuit ,je comprend pas comment choper les donnés au vole  :-X la sonde affiche des donner hasardeuse
Titre: Re : Re : lire un capteur I2C
Posté par: Bzhtitude le octobre 03, 2017, 10:59:04 pm
Citation de: Bzhtitude le octobre 03, 2017, 09:42:34 pm

Ton code est  un bon début mais doit te ramener des résultats étranges, car le MAX6675 envoies sans cesse des données, et tu les recupères un peu au pif... il va falloir gérer le CS/
Mais avec une VRAIE doc , tu vas trouver la solution -->


Oui, je l'avais prévu  ;D
et déjà donner des pistes , la voilà en pseudo-code

Mettre CS/ à 0  // active le MAX6675
stocker SPIRECEIVE dans un entier (16bits) // simple en pseudo-code mais pas forcement évident en Blockly
Mettre CS/ à 1 // désactive le MAX6675


Lis bien la doc, il y a tout ce qui faut pour le faire, mais rien de magique ici encore...