Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

SRF02
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 39
Enregistré en : octobre 2015
Localisation : PAU

#1 Message par Subzero64170 » mer. 15 juin 2016 22:40

Bonsoir,
Est ce que quelqu'un a deja programé un srf02 avec un pic en i2C?
Je sais qu'il faut faire une lecture des deux registres haut et bas contenant la mesure mais je donc je procède comme suit :

1)Init i2c
1)Envoie d'un start i2c.
2) Envoie de l'adresse 0xEO du module srf02
3)En voie de l'adresse 0x00 (registre de commande)
4)Envoie de 0x51 (demande une mesure en cm au srf02)
5)Stop sequence

Pause

1)Init i2c
2)Envoie d'un start i2c.
3) Envoie de l'adresse E0 du module srf02
4)En voie de l'adresse 0x02 (registre du byte Haut)
5)i2c repeat start (refait un start aucapteur E0, permet de ne pas refaire toutes les etapes pour interoger le capteur)
6)I2C_Wr(0xE1) ?????je ne sais pas pourquoi on met E1...il parait que c'est pour mettre un bit d'ecriture à 1 mais la commande I2c_wr a deja ce role?
7)PORTB=I2C_Rd(1); // je lit la valeur du byte haut et la stoque dans portB
8)PORTC=I2C_Rd(0); // je lit la valeur du byte bas et la stoque dans portC
9)Stop sequence

Est ce que cela peut marcher??Je ne vois pas qu'il faut mettre un bit de lecture( 0xE1) dans la doc.Dans plusieurs prog j'ai vu que pour avoir la mesure il faut :
Resultat = MSBx256 + LSB ( http://wiki.cybedroid.com/index.php?title=SRF02)

Pouvez vous m'eclaircir sur ces quelques points?
Bonne soirée
Merci
“L'imagination est plus importante que le savoir.” A.Einstein

SRF02
sylvain54
Avatar de l’utilisateur
Amateur
Amateur
Messages : 194
Âge : 53
Enregistré en : août 2015
Localisation : Dans l'est de la France

#2 Message par sylvain54 » jeu. 16 juin 2016 08:51

Bonjour,

je n'ai jamais joué avec ce module.

Mais,
Subzero64170 a écrit :Resultat = MSBx256 + LSB ( http://wiki.cybedroid.com/index.php?title=SRF02)

Cette opération est normale, elle permet de décaler les bits de poids forts, elle est équivalente à ''<< 8'' (mais je pense que le décalage "<<8" est plus performant qu'une multiplication par 256 en terme d’exécution :wink:)

Sinon sur libstock, tu as un exemple d'utilisation http://libstock.mikroe.com/projects/vie ... h-easypic7

A + Sylvain

SRF02
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3261
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » jeu. 16 juin 2016 09:21

bonjour,

attention à la taille des operandes lors du calcul Result
MSB doit etre un integer pour pouvoir contenir x fois 256
ou alors specifier un casting
Result=((unsigned int)MSB <<8 )+LSB;

l'adresse I2C est-elle bien 0xE0 ?
y-à- t'il des straps de config adresse ?
il faut bien rajouter 1 à l'adresse pour faire une lecture.
Aide toi, le ciel ou FantasPic t'aidera

SRF02
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 39
Enregistré en : octobre 2015
Localisation : PAU

#4 Message par Subzero64170 » jeu. 16 juin 2016 18:25

Bonjour,
Oui l'adresse est bien 0xE0.Je peux la changer, il y a une liste d'adresses possibles.Par defaut c'est 0xE0.Il faut changer cette adresse si on met plusieurs srf02 autrement il risque d'y avoir des conflits. Pas de strap il faut envoyer une sequence de valeurs hexa pour reprogrammer le module.Merci Sylvain54 pour le len ;-)
“L'imagination est plus importante que le savoir.” A.Einstein

SRF02
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 39
Enregistré en : octobre 2015
Localisation : PAU

#5 Message par Subzero64170 » jeu. 16 juin 2016 20:46

Au faite, quelqu'un peut m'expliquer l'histoire du E1?Je vois bien qu'il y a 6 registre mais je ne comprend pas pourquoi de l'adresse E0 on passe à E1...

Code : Tout sélectionner

int main(){

TRISB 0x00;    //Port B is output
TRISD 0x00;    //Port D is output

//Get the range
  
while(1)
  {
I2C_Init(2000000);
I2C_Start(void);    // send start sequence
I2C_Wr(0xE0);    // SRF02 I2C address with R/W bit clear
I2C_Wr(0x00); // SRF02 command register address
I2C_Wr(0x81); // command to start ranging in cm
I2C_Stop(void); // send stop sequence

delay_ms(70);    //delay for 70ms.

I2C_Start(void); // send start sequence
I2C_Wr(0xE0); // SRF02 I2C address with R/W bit clear
I2C_Wr(0x02);    // send internal adress of high byte.

I2C_Repeated_Start(void); // send a restart sequence
I2C_Wr(0xE1); // SRF02 I2C address with R/W bit set

PORTB=I2C_Rd(1); // get the high byte of the range and send acknowledge.
PORTC=I2C_Rd(0); // get low byte of the range - note we don't acknowledge the last byte.

I2C_Stop(void); // send stop sequence
 
}

return 
0;
“L'imagination est plus importante que le savoir.” A.Einstein

SRF02
paulfjujo
Avatar de l’utilisateur
Maître
Maître
Messages : 3261
Âge : 75
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » ven. 17 juin 2016 09:48

une adresse I2C est (la plupart du temps) sur 7bits cadrés à gauche
soit E0h à laquelle on rajoute le lsb bit R/W (à droite)
0 si ecriture, 1 si lecture

revoir la norme I2C Philips pour explicage plus concis.
Aide toi, le ciel ou FantasPic t'aidera

SRF02
Subzero64170
Avatar de l’utilisateur
Débutant
Débutant
Messages : 51
Âge : 39
Enregistré en : octobre 2015
Localisation : PAU

#7 Message par Subzero64170 » sam. 18 juin 2016 17:42

Ok merci paulfjujo, je suis parvenu à utiliser le module pour faire des mesures!!!Je vais revoir la norme i2c tout de meme ;-)
“L'imagination est plus importante que le savoir.” A.Einstein


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 2 invités