• Welcome to Forum des utilisateurs de Blockly(s). Please login or sign up.
 

lire un capteur I2C

Démarré par athea22, septembre 30, 2017, 07:27:56 pm

« précédent - suivant »

Bzhtitude

octobre 03, 2017, 08:44:20 pm #15 Dernière édition: octobre 03, 2017, 09:24:01 pm par Bzhtitude
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.



athea22

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  ::)

Bzhtitude

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...




athea22

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

Bzhtitude

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...